Restore ProtobufQualifiedNameProvider. The current name provider does not add the package to the FQN.
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java new file mode 100644 index 0000000..a45f1bb --- /dev/null +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java
@@ -0,0 +1,56 @@ +/* + * Copyright (c) 2011 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.naming; + +import java.util.*; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.xtext.naming.*; + +import com.google.eclipse.protobuf.protobuf.Package; +import com.google.eclipse.protobuf.util.EObjectFinder; +import com.google.inject.Inject; + +/** + * Provides fully-qualified names for protobuf elements. + * + * @author alruiz@google.com (Alex Ruiz) + */ +public class ProtobufQualifiedNameProvider extends DefaultDeclarativeQualifiedNameProvider { + + @Inject private EObjectFinder finder; + + /** {@inheritDoc} */ + @Override public QualifiedName getFullyQualifiedName(EObject obj) { + QualifiedName qualifiedName = super.getFullyQualifiedName(obj); + if (qualifiedName == null || obj instanceof Package) return qualifiedName; + Package p = finder.findPackage(obj); + if (p == null) return qualifiedName; + List<String> newQualifiedNameSegments = new ArrayList<String>(); + List<String> qualifiedNameSegments = qualifiedName.getSegments(); + String packageName = p.getName(); + if (packageName != null) { + String[] packageNameSegments = packageName.split("\\."); + if (!qualifiedNameContainsPackageName(qualifiedNameSegments, packageNameSegments)) { + // add package to the new FQN + for (String packageSegment : packageNameSegments) newQualifiedNameSegments.add(packageSegment); + } + } + newQualifiedNameSegments.addAll(qualifiedNameSegments); + return QualifiedName.create(newQualifiedNameSegments.toArray(new String[newQualifiedNameSegments.size()])); + } + + private boolean qualifiedNameContainsPackageName(List<String> qualifiedNameSegments, String[] packageNameSegments) { + int packageNameSegmentCount = packageNameSegments.length; + if (qualifiedNameSegments.size() <= packageNameSegmentCount) return false; + for (int i = 0; i < packageNameSegmentCount; i++) + if (!qualifiedNameSegments.get(i).equals(packageNameSegments[i])) return false; + return true; + } +}