Fixed: [ Issue 34 ] Finish outline view for proto files
https://code.google.com/p/protobuf-dt/issues/detail?id=34
diff --git a/com.google.eclipse.protobuf.ui/icons/rpc.gif b/com.google.eclipse.protobuf.ui/icons/rpc.gif
new file mode 100644
index 0000000..b5dd4ec
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/icons/rpc.gif
Binary files differ
diff --git a/com.google.eclipse.protobuf.ui/icons/syntax.gif b/com.google.eclipse.protobuf.ui/icons/syntax.gif
new file mode 100644
index 0000000..c71de32
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/icons/syntax.gif
Binary files differ
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java
index 0534220..7fe0ced 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java
@@ -48,7 +48,9 @@
IMAGES_BY_TYPE.put(Option.class, "option.gif");
IMAGES_BY_TYPE.put(Package.class, "package.gif");
IMAGES_BY_TYPE.put(Protobuf.class, "protobuf.gif");
+ IMAGES_BY_TYPE.put(Rpc.class, "rpc.gif");
IMAGES_BY_TYPE.put(Service.class, "service.gif");
+ IMAGES_BY_TYPE.put(Syntax.class, "syntax.gif");
}
private static final List<String> STANDALONE_IMAGES = asList("extensions.gif");
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
index db89fd2..09f8cc2 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
@@ -28,6 +28,10 @@
@Inject private Properties properties;
public Object labelFor(Object o) {
+ if (o instanceof ExtendMessage) {
+ ExtendMessage extend = (ExtendMessage) o;
+ return labelFor(extend);
+ }
if (o instanceof Import) {
Import i = (Import) o;
return labelFor(i);
@@ -44,9 +48,17 @@
Protobuf p = (Protobuf) o;
return labelFor(p);
}
+ if (o instanceof Rpc) {
+ Rpc r = (Rpc) o;
+ return labelFor(r);
+ }
return null;
}
+ private Object labelFor(ExtendMessage extend) {
+ return messageName(extend.getMessage());
+ }
+
private Object labelFor(Import i) {
String uri = i.getImportURI();
if (uri == null || !uri.startsWith(URI_PREFIX)) return uri;
@@ -71,4 +83,15 @@
// TODO show this text till I figure out how to hide 'Protobuf' node in outline view
return "Protocol Buffer";
}
+
+ private Object labelFor(Rpc r) {
+ StyledString text = new StyledString(r.getName());
+ String types = String.format(" : %s > %s", messageName(r.getArgType()), messageName(r.getReturnType()));
+ text.append(types, DECORATIONS_STYLER);
+ return text;
+ }
+
+ private String messageName(MessageReference r) {
+ return r.getType().getName();
+ }
}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java
index 02334ba..412134b 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java
@@ -8,12 +8,14 @@
*/
package com.google.eclipse.protobuf.ui.outline;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.ui.editor.outline.IOutlineNode;
import org.eclipse.xtext.ui.editor.outline.impl.DefaultOutlineTreeProvider;
import com.google.eclipse.protobuf.protobuf.*;
/**
- * Customization of the default outline structure
+ * Customization of the default outline structure.
*
* @author alruiz@google.com (Alex Ruiz)
*/
@@ -27,7 +29,8 @@
return true;
}
- boolean _isLeaf(Service s) {
- return true;
+ @Override protected void createNode(IOutlineNode parent, EObject modelElement) {
+ if (modelElement instanceof MessageReference) return;
+ super.createNode(parent, modelElement);
}
}