Code cleanup.
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 0798fb2..615996d 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
@@ -48,10 +48,11 @@
IScope scope_TypeReference_type(TypeReference typeRef, EReference reference) {
Protobuf root = finder.rootOf(typeRef);
Set<IEObjectDescription> descriptions = new HashSet<IEObjectDescription>();
- EObject message = typeRef.eContainer().eContainer();
- descriptions.addAll(typesIn(message));
- descriptions.addAll(typesIn(message.eContainer()));
- descriptions.addAll(typesIn(root));
+ EObject current = typeRef.eContainer().eContainer(); // get message of the property containing the TypeReference
+ while (current != null) {
+ descriptions.addAll(typesIn(current));
+ current = current.eContainer();
+ }
descriptions.addAll(importedTypes(root, Type.class));
return createScope(descriptions);
}
@@ -69,7 +70,7 @@
return createScope(descriptions);
}
- private Collection<IEObjectDescription> messagesIn(EObject root) {
+ private Collection<IEObjectDescription> messagesIn(Protobuf root) {
return children(root, Message.class);
}
@@ -81,13 +82,15 @@
List<IEObjectDescription> descriptions = new ArrayList<IEObjectDescription>();
for (EObject element : root.eContents()) {
if (!targetType.isInstance(element)) continue;
- T type = targetType.cast(element);
- List<QualifiedName> names = alternativeNamesProvider.alternativeFullyQualifiedNames(type);
+ List<QualifiedName> names = alternativeNamesProvider.alternativeFullyQualifiedNames(element);
int nameCount = names.size();
- for (int i = level; i < nameCount; i++) descriptions.add(create(names.get(i), type));
- descriptions.add(create(nameProvider.getFullyQualifiedName(type), type));
- if (!(element instanceof Message)) continue;
- descriptions.addAll(children(element, targetType, level + 1));
+ for (int i = level; i < nameCount; i++) {
+ descriptions.add(create(names.get(i), element));
+ }
+ descriptions.add(create(nameProvider.getFullyQualifiedName(element), element));
+ if (element instanceof Message) {
+ descriptions.addAll(children(element, targetType, level + 1));
+ }
}
return descriptions;
}