Procházet zdrojové kódy

Enable resolving of lazy links in Stext Tests

Andreas Mülder před 13 roky
rodič
revize
c3bbdd8850

+ 1 - 1
plugins/org.yakindu.sct.model.sgraph/src/org/yakindu/sct/model/sgraph/resource/AbstractSCTResource.java

@@ -205,7 +205,7 @@ public abstract class AbstractSCTResource extends GMFResource {
 			return super.getURIFragment(eObject);
 		}
 		ICompositeNode node = NodeModelUtils.findActualNodeFor(eObject);
-		if (node != null) {
+		if (node != null && eObject.eContainingFeature() != null) {
 			return getXtextFragment(eObject, node);
 		}
 		return super.getURIFragment(eObject);

+ 17 - 6
test-plugins/org.yakindu.sct.model.stext.test/src/org/yakindu/sct/model/stext/test/util/AbstractSTextTest.java

@@ -16,6 +16,7 @@ import java.io.StringReader;
 
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource.Diagnostic;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.emf.ecore.util.EcoreUtil;
@@ -26,16 +27,19 @@ import org.eclipse.xtext.linking.ILinker;
 import org.eclipse.xtext.nodemodel.INode;
 import org.eclipse.xtext.parser.IParseResult;
 import org.eclipse.xtext.parser.IParser;
-import org.eclipse.xtext.resource.XtextResource;
 import org.eclipse.xtext.resource.impl.ListBasedDiagnosticConsumer;
+import org.eclipse.xtext.util.CancelIndicator;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.model.sgraph.Scope;
+import org.yakindu.sct.model.sgraph.SpecificationElement;
 import org.yakindu.sct.model.sgraph.Statechart;
+import org.yakindu.sct.model.stext.resource.factory.StextResourceFactory;
+import org.yakindu.sct.model.stext.resource.impl.StextResource;
 import org.yakindu.sct.model.stext.stext.InterfaceScope;
 import org.yakindu.sct.model.stext.stext.InternalScope;
 
+import com.google.common.collect.Multimap;
 import com.google.inject.Inject;
-import com.google.inject.Provider;
 
 import de.itemis.xtext.utils.jface.viewers.ContextElementAdapter;
 
@@ -51,10 +55,11 @@ public abstract class AbstractSTextTest {
 	@Inject
 	private ILinker linker;
 	@Inject
-	private Provider<XtextResource> resourceProvider;
+	private StextResourceFactory factory;
 
-	protected XtextResource getResource() {
-		final XtextResource resource = resourceProvider.get();
+	protected StextResource getResource() {
+		final StextResource resource = (StextResource) factory
+				.createResource(URI.createFileURI(""));
 		resource.eAdapters().add(
 				new ContextElementAdapter(
 						new ContextElementAdapter.IContextElementProvider() {
@@ -75,7 +80,7 @@ public abstract class AbstractSTextTest {
 
 	protected EObject parseExpression(String expression, Scope context,
 			String ruleName) {
-		XtextResource resource = getResource();
+		StextResource resource = getResource();
 		resource.setURI(URI.createURI("path", true));
 		ParserRule parserRule = XtextFactory.eINSTANCE.createParserRule();
 		parserRule.setName(ruleName);
@@ -91,6 +96,12 @@ public abstract class AbstractSTextTest {
 			linker.linkModel(context, diagnosticsConsumer);
 		}
 		linker.linkModel(result.getRootASTElement(), diagnosticsConsumer);
+		resource.resolveLazyCrossReferences(CancelIndicator.NullImpl);
+		Multimap<SpecificationElement, Diagnostic> diagnostics = resource
+				.getLinkingDiagnostics();
+		if (diagnostics.size() > 0) {
+			throw new RuntimeException(diagnostics.toString());
+		}
 		if (result.hasSyntaxErrors()) {
 			StringBuilder errorMessages = new StringBuilder();
 			Iterable<INode> syntaxErrors = result.getSyntaxErrors();