diff --git a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/serializer/tokens/CrossReferenceSerializer.java b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/serializer/tokens/CrossReferenceSerializer.java index 489f4533f..3dcce3197 100755 --- a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/serializer/tokens/CrossReferenceSerializer.java +++ b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/serializer/tokens/CrossReferenceSerializer.java @@ -17,6 +17,7 @@ import org.eclipse.xtext.CrossReference; import org.eclipse.xtext.GrammarUtil; import org.eclipse.xtext.conversion.IValueConverterService; import org.eclipse.xtext.conversion.ValueConverterException; +import org.eclipse.xtext.linking.LinkingScopeProviderBinding; import org.eclipse.xtext.linking.impl.LinkingHelper; import org.eclipse.xtext.naming.IQualifiedNameConverter; import org.eclipse.xtext.naming.QualifiedName; @@ -50,6 +51,7 @@ public class CrossReferenceSerializer implements ICrossReferenceSerializer { private IQualifiedNameConverter qualifiedNameConverter; @Inject + @SerializerScopeProviderBinding private IScopeProvider scopeProvider; @Inject diff --git a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/serializer/tokens/SerializerScopeProviderBinding.java b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/serializer/tokens/SerializerScopeProviderBinding.java new file mode 100644 index 000000000..32a5fa9f5 --- /dev/null +++ b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/serializer/tokens/SerializerScopeProviderBinding.java @@ -0,0 +1,16 @@ +package org.eclipse.xtext.serializer.tokens; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import com.google.inject.BindingAnnotation; + +/** + * Indicates that a scope provider is requested that is used + * to serialize existing cross references. + * + * @author Sebastian Zarnekow - Initial contribution and API + * @since 2.4 + */ +@BindingAnnotation +@Retention(RetentionPolicy.RUNTIME) +public @interface SerializerScopeProviderBinding {} \ No newline at end of file diff --git a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/service/DefaultRuntimeModule.java b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/service/DefaultRuntimeModule.java index cb50d90fe..8d8ee20af 100644 --- a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/service/DefaultRuntimeModule.java +++ b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/service/DefaultRuntimeModule.java @@ -54,11 +54,13 @@ import org.eclipse.xtext.serializer.ISerializer; import org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer; import org.eclipse.xtext.serializer.sequencer.GenericSequencer; import org.eclipse.xtext.serializer.sequencer.ISemanticSequencer; +import org.eclipse.xtext.serializer.tokens.SerializerScopeProviderBinding; import org.eclipse.xtext.validation.CancelableDiagnostician; import org.eclipse.xtext.validation.IConcreteSyntaxValidator; import org.eclipse.xtext.validation.impl.ConcreteSyntaxValidator; import com.google.inject.Binder; +import com.google.inject.Key; import com.google.inject.Provider; import com.google.inject.name.Names; @@ -138,6 +140,13 @@ public abstract class DefaultRuntimeModule extends AbstractGenericModule { return SimpleLocalScopeProvider.class; } + /** + * @since 2.4 + */ + public void configureSerializerIScopeProvider(Binder binder) { + binder.bind(IScopeProvider.class).annotatedWith(SerializerScopeProviderBinding.class).to(Key.get(IScopeProvider.class, LinkingScopeProviderBinding.class)); + } + public void configureLinkingIScopeProvider(Binder binder) { binder.bind(IScopeProvider.class).annotatedWith(LinkingScopeProviderBinding.class).to(IScopeProvider.class); }