Fixed: [Issue 229] Type references in nested messages not found.
https://code.google.com/p/protobuf-dt/issues/detail?id=229
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/Issue229_ReferenceToTypeFromNestedMessage.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/Issue229_ReferenceToTypeFromNestedMessage.java
new file mode 100644
index 0000000..df05b72
--- /dev/null
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/Issue229_ReferenceToTypeFromNestedMessage.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2012 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.bugs;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertThat;
+
+import static com.google.eclipse.protobuf.junit.core.UnitTestModule.unitTestModule;
+import static com.google.eclipse.protobuf.junit.core.XtextRule.overrideRuntimeModuleWith;
+
+import org.junit.Rule;
+import org.junit.Test;
+
+import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.protobuf.ExtensibleType;
+import com.google.eclipse.protobuf.protobuf.TypeExtension;
+
+/**
+ * Tests fix for <a href="http://code.google.com/p/protobuf-dt/issues/detail?id=229">Issue 229</a>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class Issue229_ReferenceToTypeFromNestedMessage {
+ @Rule public XtextRule xtext = overrideRuntimeModuleWith(unitTestModule());
+
+ // syntax = "proto2";
+ //
+ // message OuterProto {
+ // message ProtoWithExtensions {
+ // required string string_value = 1;
+ // extensions 100 to max;
+ // }
+ //
+ // message Extension {
+ // extend ProtoWithExtensions {
+ // optional Extension the_extension = 100;
+ // }
+ // required string string_value = 1;
+ // }
+ // }
+ @Test public void should_recognize_extendMessage_in_nestedMessage() {
+ TypeExtension extension = xtext.findFirst(TypeExtension.class);
+ ExtensibleType extended = extension.getType().getTarget();
+ assertThat(extended.getName(), equalTo("ProtoWithExtensions"));
+ }
+}
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 6e6eeea..53e57a8 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
@@ -94,17 +94,14 @@
@SuppressWarnings("unused")
public IScope scope_ExtensibleTypeLink_target(ExtensibleTypeLink link, EReference r) {
- Protobuf root = modelObjects.rootOf(link);
- Collection<IEObjectDescription> extensibleTypes = extensibleTypes(root);
+ EObject c = link.eContainer();
+ Collection<IEObjectDescription> extensibleTypes =
+ modelElementFinder.find(c, complexTypeFinderDelegate, ExtensibleType.class);
return createScope(extensibleTypes);
}
@Override public Collection<IEObjectDescription> potentialExtensibleTypesFor(TypeExtension extension) {
Protobuf root = modelObjects.rootOf(extension);
- return extensibleTypes(root);
- }
-
- private Collection<IEObjectDescription> extensibleTypes(Protobuf root) {
return modelElementFinder.find(root, complexTypeFinderDelegate, ExtensibleType.class);
}