Fixed: [ Issue 62 ] Outline View should show import URI as the user entered https://code.google.com/p/protobuf-dt/issues/detail?id=62
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/ProtobufSemanticHighlightingCalculator.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/ProtobufSemanticHighlightingCalculator.java index e560ad3..11b60a4 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/ProtobufSemanticHighlightingCalculator.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/ProtobufSemanticHighlightingCalculator.java
@@ -13,6 +13,7 @@ import java.util.List; +import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.*; import org.eclipse.xtext.nodemodel.INode; import org.eclipse.xtext.resource.XtextResource; @@ -27,8 +28,10 @@ public class ProtobufSemanticHighlightingCalculator implements ISemanticHighlightingCalculator { public void provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor) { - if (resource.getContents().isEmpty()) return; - Protobuf protobuf = (Protobuf) resource.getContents().get(0); + if (resource == null) return; + EList<EObject> contents = resource.getContents(); + if (contents == null || contents.isEmpty()) return; + Protobuf protobuf = (Protobuf) contents.get(0); highlightAllNames(protobuf, acceptor, DEFAULT_ID); }
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 189f736..496ffd4 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
@@ -9,8 +9,13 @@ package com.google.eclipse.protobuf.ui.labeling; import static org.eclipse.jface.viewers.StyledString.DECORATIONS_STYLER; +import static org.eclipse.xtext.nodemodel.util.NodeModelUtils.findNodesForFeature; +import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.*; import org.eclipse.jface.viewers.StyledString; +import org.eclipse.xtext.nodemodel.INode; + +import java.util.List; import com.google.eclipse.protobuf.protobuf.*; import com.google.eclipse.protobuf.ui.util.Properties; @@ -56,7 +61,10 @@ } private Object labelFor(Import i) { - return i.getImportURI(); + List<INode> nodes = findNodesForFeature(i, IMPORT__IMPORT_URI); + if (nodes.size() != 1) return i.getImportURI(); + INode node = nodes.get(0); + return node.getText(); } private Object labelFor(Literal l) { @@ -68,7 +76,9 @@ private Object labelFor(Property p) { StyledString text = new StyledString(p.getName()); - String indexAndType = String.format(" [%d] : %s", p.getIndex(), properties.typeNameOf(p)); + String typeName = properties.typeNameOf(p); + if (typeName == null) typeName = "<unable to resolve type reference>"; + String indexAndType = String.format(" [%d] : %s", p.getIndex(), typeName); text.append(indexAndType, DECORATIONS_STYLER); return text; }
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 8a6913f..3b25837 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
@@ -41,20 +41,22 @@ return true; } - protected void _createChildren(DocumentRootNode parentNode, Protobuf protobuf) { + protected void _createChildren(DocumentRootNode parent, Protobuf protobuf) { OutlineViewModel model = new OutlineViewModel(protobuf); - for (EObject aPackage : model.packages()) createNode(parentNode, aPackage); - addGroup(parentNode, model.imports(), "imports", importDeclarations); - addGroup(parentNode, model.options(), "options", optionDeclarations); + for (EObject aPackage : model.packages()) createNode(parent, aPackage); + addGroup(parent, protobuf, model.imports(), "imports", importDeclarations); + addGroup(parent, protobuf, model.options(), "options", optionDeclarations); for (EObject e : model.remainingElements()) { - createNode(parentNode, e); + createNode(parent, e); } } - private void addGroup(DocumentRootNode parent, List<? extends EObject> group, String imageKey, String text) { - if (!group.isEmpty()) { - SimpleOutlineNode groupNode = new SimpleOutlineNode(parent, labelProvider.getImage(imageKey), text, false); - for (EObject o : group) createNode(groupNode, o); + private void addGroup(DocumentRootNode parent, Protobuf protobuf, List<? extends EObject> group, String imageKey, + String text) { + if (group.isEmpty()) return; + SimpleOutlineNode groupNode = new SimpleOutlineNode(parent, protobuf, labelProvider.getImage(imageKey), text, false); + for (EObject o : group) { + createNode(groupNode, o); } }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/SimpleOutlineNode.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/SimpleOutlineNode.java index f7787ff..ae89fac 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/SimpleOutlineNode.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/SimpleOutlineNode.java
@@ -8,6 +8,9 @@ */ package com.google.eclipse.protobuf.ui.outline; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.swt.graphics.Image; import org.eclipse.xtext.ui.editor.outline.IOutlineNode; import org.eclipse.xtext.ui.editor.outline.impl.AbstractOutlineNode; @@ -17,7 +20,14 @@ */ class SimpleOutlineNode extends AbstractOutlineNode { - SimpleOutlineNode(IOutlineNode parent, Image image, Object text, boolean isLeaf) { + private final URI ownerUri; + + SimpleOutlineNode(IOutlineNode parent, EObject owner, Image image, Object text, boolean isLeaf) { super(parent, image, text, isLeaf); + ownerUri = EcoreUtil.getURI(owner); + } + + @Override protected URI getEObjectURI() { + return ownerUri; } }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java index 70fe2cf..48a35ce 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PathsPreferencePage.java
@@ -149,8 +149,10 @@ } private String directoryNames() { + List<DirectoryPath> paths = directoryPathsEditor.directoryPaths(); + if (paths.isEmpty()) return ""; List<String> pathsAsText = new ArrayList<String>(); - for (DirectoryPath path : directoryPathsEditor.directoryPaths()) { + for (DirectoryPath path : paths) { pathsAsText.add(path.toString()); } return concat(COMMA_DELIMITER, pathsAsText);