From 96fb0e81ed73963864f9cce9765d53650ad13e8d Mon Sep 17 00:00:00 2001 From: Sebastian Zarnekow Date: Thu, 24 Jan 2013 22:35:26 +0100 Subject: [PATCH] [xbase][typesystem] Make the serializer tests pass with the new type system Introduced @SerializerScopeProvider similar to @LinkingScopeProvider to allow for optimized implementations Change-Id: Iec84687cd30b7326aac77db66cd9436542f54f39 --- .../tokens/CrossReferenceSerializer.java | 2 ++ .../tokens/SerializerScopeProviderBinding.java | 16 ++++++++++++++++ .../xtext/service/DefaultRuntimeModule.java | 9 +++++++++ 3 files changed, 27 insertions(+) create mode 100644 plugins/org.eclipse.xtext/src/org/eclipse/xtext/serializer/tokens/SerializerScopeProviderBinding.java 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); }