Skip to content

Commit

Permalink
Fix MPS-8212 on "get model contents from source" nothing happens
Browse files Browse the repository at this point in the history
  • Loading branch information
danilla committed Nov 13, 2015
1 parent aa170a8 commit 08d4068
Show file tree
Hide file tree
Showing 25 changed files with 2,128 additions and 1,763 deletions.
Expand Up @@ -42,6 +42,7 @@
import jetbrains.mps.extapi.model.SModelBase;
import jetbrains.mps.ide.java.newparser.JavaParseException;
import jetbrains.mps.ide.java.newparser.JavaToMpsConverter;
import jetbrains.mps.ide.messages.MessagesViewTool;
import jetbrains.mps.ide.platform.watching.ReloadManager;
import jetbrains.mps.ide.vfs.IdeaFileSystemProvider;
import jetbrains.mps.idea.core.facet.MPSFacet;
Expand Down Expand Up @@ -132,7 +133,7 @@ public void run() {
}
}

final JavaToMpsConverter parser = new JavaToMpsConverter(mpsModule, mpsProject.getRepository(), true, true);
final JavaToMpsConverter parser = new JavaToMpsConverter(mpsModule, mpsProject.getRepository(), true, true, project.getComponent(MessagesViewTool.class).newHandler());
final List<IFile> javaFiles = toIFiles(psiJavaFiles);

ApplicationManager.getApplication().saveAll();
Expand Down
6 changes: 6 additions & 0 deletions plugins/mps-build/solutions/mpsBuild/models/build.mps
Expand Up @@ -17835,6 +17835,12 @@
<ref role="3bR37D" node="7KapL9OABnm" resolve="jetbrains.mps.ide.ui" />
</node>
</node>
<node concept="1SiIV0" id="1jur8MZMEzP" role="3bR37C">
<node concept="3bR9La" id="1jur8MZMEzQ" role="1SiIV1">
<property role="3bR36h" value="false" />
<ref role="3bR37D" node="5xwbQ0eEV3x" resolve="jetbrains.mps.ide.java.platform" />
</node>
</node>
</node>
<node concept="398b33" id="7gQEwkA7l8u" role="3989C9">
<property role="TrG5h" value="consoleTool" />
Expand Down
@@ -1,3 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<dependencies version="2" modelHash="e9vh94hw6lwb1dezbigbfbmvgsfklv0" />
<dependencies version="2" modelHash="4alf0pp656edukf5083zzt9mz5m3bjl" />

428 changes: 324 additions & 104 deletions plugins/mpsjava/basePlatform/models/jetbrains/mps/ide/java/parser.mps

Large diffs are not rendered by default.

Expand Up @@ -353,6 +353,9 @@
<classNode dependClassName="jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations" />
<classNode dependClassName="jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations" />
<classNode dependClassName="jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations" />
<classNode dependClassName="jetbrains.mps.messages.IMessageHandler" />
<classNode dependClassName="jetbrains.mps.messages.Message" />
<classNode dependClassName="jetbrains.mps.messages.MessageKind" />
<classNode dependClassName="jetbrains.mps.persistence.DefaultModelRoot" />
<classNode dependClassName="jetbrains.mps.persistence.FilePerRootModelPersistence" />
<classNode dependClassName="jetbrains.mps.persistence.PersistenceRegistry" />
Expand Down
@@ -1,3 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<dependencies version="2" modelHash="-cg0vy94ihm9vywanrh76vae1fowojec" />
<dependencies version="2" modelHash="-26fyurq3lfzip1jkoxfh3h2nwuk80br" />

Expand Up @@ -17,11 +17,14 @@
import jetbrains.mps.vfs.IFile;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import jetbrains.mps.messages.IMessageHandler;
import java.util.Collections;
import jetbrains.mps.internal.collections.runtime.SetSequence;
import java.util.HashSet;
import org.jetbrains.mps.openapi.util.ProgressMonitor;
import java.io.IOException;
import jetbrains.mps.messages.Message;
import jetbrains.mps.messages.MessageKind;
import jetbrains.mps.extapi.model.SModelBase;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.smodel.adapter.ids.MetaIdFactory;
Expand Down Expand Up @@ -92,28 +95,32 @@ public class JavaToMpsConverter {
private boolean wasDefaultPkg = false;
private int myRootCount = 0;

public JavaToMpsConverter(SModule module, SRepository repository) {
this(module, repository, false, false);
private IMessageHandler myMessageHandler;

public JavaToMpsConverter(SModule module, SRepository repository, IMessageHandler messageHandler) {
this(module, repository, false, false, messageHandler);
}

public Set<SNode> getRootsBuilt() {
return Collections.<SNode>unmodifiableSet(SetSequence.fromSetWithValues(new HashSet<SNode>(), myAttachedRoots));
}

public JavaToMpsConverter(SModule module, SRepository repository, boolean perRoot, boolean inPlace) {
public JavaToMpsConverter(SModule module, SRepository repository, boolean perRoot, boolean inPlace, IMessageHandler messageHandler) {
// currently perRoot==false and inPlace==true doesn't make it in-place
// because of how DefaultModelRoot is implemented
myModule = module;
myCreatePerRoot = perRoot;
myCreateInplace = inPlace;
myRepository = repository;
myModelAccess = repository.getModelAccess();
myMessageHandler = messageHandler;
}

public JavaToMpsConverter(SModel model, SRepository repository) {
public JavaToMpsConverter(SModel model, SRepository repository, IMessageHandler messageHandler) {
myModel = model;
myRepository = repository;
myModelAccess = repository.getModelAccess();
myMessageHandler = messageHandler;
}

public void convertToMps(final List<IFile> files, ProgressMonitor progress) throws JavaParseException, IOException {
Expand All @@ -132,9 +139,14 @@ public void run() {
try {
parseFile(file);
parseProgress.advance(1);

} catch (JavaParseException e) {
Message msg = new Message(MessageKind.ERROR, String.format("Parse error: %s", e.getMessage()));
if (e.getCause() != null) {
msg.setException(e.getCause());
}
myMessageHandler.handle(msg);
} catch (IOException e) {
myMessageHandler.handle(new Message(MessageKind.ERROR, String.format("IO error when converting (java->mps) file %s", file.getName())).setException(e));
}
}
}
Expand Down Expand Up @@ -329,15 +341,15 @@ private void parseFile(IFile file) throws JavaParseException, IOException {
if (pkg == null) {
// default package (i.e. none), bad
if (!(wasDefaultPkg)) {
LOG.error("default package is not supported in java source directory input (first such file in dir: " + file.getName() + ")");
myMessageHandler.handle(new Message(MessageKind.ERROR, String.format("default package is not supported in java source directory input (first such file in dir: %s)", file.getName())));
wasDefaultPkg = true;
}
return;
}

IFile dir = file.getParent();
if (!(DirParser.checkPackageMatchesSourceDirectory(pkg, dir))) {
LOG.error("package " + pkg + " doesn't match directory " + dir.getPath() + " (in file " + file.getName() + ")");
myMessageHandler.handle(new Message(MessageKind.ERROR, String.format("package %s doesn't match directory %s (in file %s)", pkg, dir.getPath(), file.getName())));
return;
}

Expand Down Expand Up @@ -1033,7 +1045,7 @@ private SModel createModel(String pkgFqName, IFile pkgDir) {
ModelRoot modelRoot = place._0();
String sourceRoot = place._1();
if (modelRoot == null) {
LOG.error("Cannot convert to MPS in-place: java sources not under proper model root");
myMessageHandler.handle(new Message(MessageKind.ERROR, "Cannot convert to MPS in-place: java sources not under proper model root"));
return null;
}
Map<String, String> options = MapSequence.fromMap(new HashMap<String, String>());
Expand All @@ -1047,18 +1059,18 @@ private SModel createModel(String pkgFqName, IFile pkgDir) {
} else {
ModelRoot modelRoot = getFirstRootToCreateModel(pkgFqName);
if (modelRoot == null) {
LOG.error("Failed to find model root to create model in");
myMessageHandler.handle(new Message(MessageKind.ERROR, "Failed to find model root to create model in"));
return null;
}
modelDescr = ((DefaultModelRoot) modelRoot).createModel(pkgFqName, null, null, PersistenceRegistry.getInstance().getModelFactory(MPSExtentions.MODEL));
}

if (modelDescr == null) {
LOG.error("Failed to create model: createModel returned null");
myMessageHandler.handle(new Message(MessageKind.ERROR, String.format("Failed to create model for package %s", pkgFqName)));
return null;
}
} catch (IOException e) {
LOG.error("Failed to create model", e);
myMessageHandler.handle(new Message(MessageKind.ERROR, "IO error when trying to create model").setException(e));
return null;
}

Expand Down

0 comments on commit 08d4068

Please sign in to comment.