diff --git a/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/XtextGeneratorResourceSetInitializer.xtend b/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/XtextGeneratorResourceSetInitializer.xtend index 50d2b235f..ed99a0adf 100644 --- a/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/XtextGeneratorResourceSetInitializer.xtend +++ b/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/XtextGeneratorResourceSetInitializer.xtend @@ -19,6 +19,7 @@ import org.eclipse.emf.mwe.utils.StandaloneSetup import org.eclipse.xtext.ecore.EcoreSupportStandaloneSetup import org.eclipse.xtext.resource.IResourceServiceProvider import org.eclipse.xtext.util.internal.Log +import org.eclipse.emf.ecore.EcorePackage /** * @noextend @@ -30,6 +31,7 @@ class XtextGeneratorResourceSetInitializer { public def void initialize(ResourceSet resourceSet, List referencedResources) { val delegate = new StandaloneSetup delegate.resourceSet = resourceSet + resourceSet.packageRegistry.put(EcorePackage.eNS_URI, EcorePackage.eINSTANCE) referencedResources.forEach[ loadResource(resourceSet) ] diff --git a/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/idea/IdeaPluginGenerator.xtend b/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/idea/IdeaPluginGenerator.xtend index 11456a2d3..32fe454d1 100644 --- a/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/idea/IdeaPluginGenerator.xtend +++ b/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/idea/IdeaPluginGenerator.xtend @@ -718,7 +718,7 @@ class IdeaPluginGenerator extends AbstractStubGeneratingFragment { } val classifier = type?.classifier val feature = if(classifier instanceof EClass) classifier.getEStructuralFeature('name') - feature instanceof EAttribute && !feature.many && String.isAssignableFrom(feature.EType.instanceClass) + feature instanceof EAttribute && !feature.many && feature?.EType?.instanceClass != null && String.isAssignableFrom(feature.EType.instanceClass) } def compileAbstractCompletionContributor(Grammar grammar) { diff --git a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/validation/AbstractInjectableValidator.java b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/validation/AbstractInjectableValidator.java index 75d467b7a..c0928d17d 100644 --- a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/validation/AbstractInjectableValidator.java +++ b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/validation/AbstractInjectableValidator.java @@ -73,6 +73,10 @@ public abstract class AbstractInjectableValidator implements EValidator { protected abstract boolean internalValidate(EClass eClass, EObject eObject, DiagnosticChain diagnostics, Map context); + /** + * If this validator is for an EPackage you want to use in multiple languages, + * this method should return false. Otherwise issues will be reported twice. + */ public boolean isLanguageSpecific() { return languageName != null; } diff --git a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/validation/ComposedChecks.java b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/validation/ComposedChecks.java index 088069a07..db3cc1fa3 100644 --- a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/validation/ComposedChecks.java +++ b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/validation/ComposedChecks.java @@ -13,6 +13,11 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** + * Annotation that allows to modularize the validator into multiple classes. + * + * The listed validators should override the method {@link AbstractDeclarativeValidator#register(EValidatorRegistrar)} + * with an empty implementation otherwise all issues will be reported twice. + * * @author Sebastian Zarnekow - Initial contribution and API */ @Retention(RetentionPolicy.RUNTIME) diff --git a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/validation/CompositeEValidator.java b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/validation/CompositeEValidator.java index 7b2e61f6d..8d33e5b63 100644 --- a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/validation/CompositeEValidator.java +++ b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/validation/CompositeEValidator.java @@ -215,6 +215,7 @@ public class CompositeEValidator implements EValidator { CompositeEValidator result = new CompositeEValidator(); result.equalitySupportProvider = this.equalitySupportProvider; result.useEObjectValidator = this.useEObjectValidator; + result.operationCanceledManager = this.operationCanceledManager; if (this.contents != null) { result.contents = Lists.newArrayList(this.contents); this.contents = null;