Handle the scoping case where a LiteralLink is the child of a ValueField Change-Id: Ib6f2d2bcf30b0aa667133c6c7421408b2f6178d6 Signed-off-by: Alexander Rookey <atrookey@google.com>
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralLink_target_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralLink_target_Test.java index a341d0b..33123c9 100644 --- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralLink_target_Test.java +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralLink_target_Test.java
@@ -22,6 +22,8 @@ import org.junit.Test; import com.google.eclipse.protobuf.junit.core.XtextRule; +import com.google.eclipse.protobuf.protobuf.ComplexValueCurlyBracket; +import com.google.eclipse.protobuf.protobuf.CustomOption; import com.google.eclipse.protobuf.protobuf.DefaultValueFieldOption; import com.google.eclipse.protobuf.protobuf.Enum; import com.google.eclipse.protobuf.protobuf.FieldOption; @@ -30,6 +32,7 @@ import com.google.eclipse.protobuf.protobuf.Message; import com.google.eclipse.protobuf.protobuf.MessageField; import com.google.eclipse.protobuf.protobuf.Option; +import com.google.eclipse.protobuf.protobuf.SimpleValueField; import com.google.inject.Inject; /** @@ -256,6 +259,43 @@ // // Create file sample_proto.proto // syntax = "proto2"; + // package sample; + // + // extend proto2.MethodOptions { + // optional Foo method = 2910611; + // } + // + // message Foo { + // enum Kind { + // CUSTOM = 1; + // CREATE = 2; + // } + // optional Kind kind = 1 [default = CUSTOM]; + + // syntax = "proto2"; + // package example; + // import "sample_proto.proto"; + // + // message Example { + // option (sample.method) = { + // kind: CREATE + // }; + // } + @Test + public void should_provide_Literals_for_source_of_simple_value_field() { + Message message = xtext.find("Example", " {", Message.class); + CustomOption customFieldOption = (CustomOption) message.getElements().get(0); + ComplexValueCurlyBracket complexValueCurlyBracket = + (ComplexValueCurlyBracket) customFieldOption.getValue(); + SimpleValueField simpleValueField = + (SimpleValueField) complexValueCurlyBracket.getFields().get(0); + LiteralLink literalLink = (LiteralLink) simpleValueField.getValues().get(0); + IScope scope = scopeProvider.getScope(literalLink, LITERAL_LINK__TARGET); + assertThat(descriptionsIn(scope), contain("CREATE")); + } + + // // Create file sample_proto.proto + // syntax = "proto2"; // package example; // // enum Status {
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java index ab63d3b..c69fa05 100644 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
@@ -34,6 +34,7 @@ import com.google.eclipse.protobuf.protobuf.OptionSource; import com.google.eclipse.protobuf.protobuf.Package; import com.google.eclipse.protobuf.protobuf.Protobuf; +import com.google.eclipse.protobuf.protobuf.SimpleValueField; import com.google.eclipse.protobuf.protobuf.TypeLink; import com.google.eclipse.protobuf.protobuf.ValueField; import com.google.eclipse.protobuf.util.EResources; @@ -340,6 +341,9 @@ indexedElement = ((CustomOption) container).getSource().getTarget(); } } + if (container instanceof SimpleValueField) { + indexedElement = ((SimpleValueField) container).getName().getTarget(); + } return createNormalizedScopeForIndexedElement(indexedElement, reference); }