Revert "Added namespace support to scoping." This change caused the following tests to fail. com.google.eclipse.protobuf.naming.NameResolver_nameOf_Test com.google.eclipse.protobuf.validation.ImportValidator_checkUnknownSyntaxImports_withNonProto2Imports_Tests com.google.eclipse.protobuf.validation.ProtobufJavaValidator_checkOnlyOnePackageDefinition_Test com.google.eclipse.protobuf.model.util.Packages_addPackageNameSegments_Test This reverts commit 4d53754dd76572a85bd84a7847285d7458897e99. Change-Id: I1417ec7a6f6390bab7291d4d269a2afd4e6ef0fb
diff --git a/com.google.eclipse.protobuf.generator/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf.generator/META-INF/MANIFEST.MF index bb2b6b6..173239d 100644 --- a/com.google.eclipse.protobuf.generator/META-INF/MANIFEST.MF +++ b/com.google.eclipse.protobuf.generator/META-INF/MANIFEST.MF
@@ -21,4 +21,3 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Export-Package: com.google.eclipse.protobuf -Import-Package: com.google.eclipse.protobuf.scoping
diff --git a/com.google.eclipse.protobuf.generator/bin/.project b/com.google.eclipse.protobuf.generator/bin/.project new file mode 100644 index 0000000..de89a7e --- /dev/null +++ b/com.google.eclipse.protobuf.generator/bin/.project
@@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>com.google.eclipse.protobuf.generator</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.xtext.ui.shared.xtextBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ManifestBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.SchemaBuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.pde.PluginNature</nature> + <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.eclipse.xtext.ui.shared.xtextNature</nature> + </natures> +</projectDescription>
diff --git a/com.google.eclipse.protobuf.generator/src/com/google/eclipse/protobuf/GenerateProtobuf.mwe2 b/com.google.eclipse.protobuf.generator/src/com/google/eclipse/protobuf/GenerateProtobuf.mwe2 index 473a016..097852b 100644 --- a/com.google.eclipse.protobuf.generator/src/com/google/eclipse/protobuf/GenerateProtobuf.mwe2 +++ b/com.google.eclipse.protobuf.generator/src/com/google/eclipse/protobuf/GenerateProtobuf.mwe2
@@ -42,14 +42,14 @@ uri = grammarURI fileExtensions = file.extensions - // Java APIto access grammar elements (required by several other fragments) + // Java API to access grammar elements (required by several other fragments) fragment = grammarAccess.GrammarAccessFragment {} - // generates Java APIfor the generated EPackages + // generates Java API for the generated EPackages fragment = ecore.EMFGeneratorFragment { // referencedGenModels = "uri to genmodel, uri to next genmodel" } - + // Serializer 2.0 fragment = serializer.SerializerFragment { generateStub = false @@ -58,7 +58,7 @@ // the serialization component // fragment = parseTreeConstructor.ParseTreeConstructorFragment {} - // a custom ResourceFactory for use with EMF + // a custom ResourceFactory for use with EMF fragment = resourceFactory.ResourceFactoryFragment { fileExtensions = file.extensions } @@ -70,7 +70,7 @@ // } } - // java-based APIfor validation + // java-based API for validation fragment = validation.JavaValidatorFragment { // composedCheck = "org.eclipse.xtext.validation.ImportUriValidator" // composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator" @@ -81,41 +81,41 @@ // fragment = scoping.ImportURIScopingFragment {} // fragment = exporting.SimpleNamesFragment {} - // scoping and exporting API - fragment = scoping.ProtobufImportNamespacesScopingFragment {} + // scoping and exporting API + fragment = scoping.ImportNamespacesScopingFragment {} fragment = exporting.QualifiedNamesFragment {} fragment = builder.BuilderIntegrationFragment {} - // formatter API + // formatter API fragment = formatting.FormatterFragment {} - // labeling API + // labeling API fragment = labeling.LabelProviderFragment {} - // outline API + // outline API fragment = outline.OutlineTreeProviderFragment {} fragment = outline.QuickOutlineFragment {} - // quickfix API + // quickfix API fragment = quickfix.QuickfixProviderFragment {} // rename refactoring fragment = refactoring.RefactorElementNameFragment {} - // content assist API + // content assist API fragment = contentAssist.JavaBasedContentAssistFragment {} - // generates a more lightweight Antlr parser and lexer tailored for content assist + // generates a more lightweight Antlr parser and lexer tailored for content assist fragment = parser.antlr.XtextAntlrUiGeneratorFragment { // options = { // backtrack = true // } } - // project wizard (optional) + // project wizard (optional) // fragment = projectWizard.SimpleProjectWizardFragment { - // generatorProjectName = "${projectName}.generator" - // modelFileExtension = file.extensions + // generatorProjectName = "${projectName}.generator" + // modelFileExtension = file.extensions // } } }
diff --git a/com.google.eclipse.protobuf.generator/src/com/google/eclipse/protobuf/Protobuf.xtext b/com.google.eclipse.protobuf.generator/src/com/google/eclipse/protobuf/Protobuf.xtext index 2b99ea7..2a39ba6 100644 --- a/com.google.eclipse.protobuf.generator/src/com/google/eclipse/protobuf/Protobuf.xtext +++ b/com.google.eclipse.protobuf.generator/src/com/google/eclipse/protobuf/Protobuf.xtext
@@ -24,7 +24,7 @@ Package | Import | Option | ComplexType | TypeExtension | Service; Package: - 'package' importedNamespace=PackageName (';')+; + 'package' name=PackageName (';')+; PackageName: IdOrReservedWord ('.' IdOrReservedWord)*;
diff --git a/com.google.eclipse.protobuf.generator/src/com/google/eclipse/protobuf/scoping/ProtobufImportNamespacesScopingFragment.java b/com.google.eclipse.protobuf.generator/src/com/google/eclipse/protobuf/scoping/ProtobufImportNamespacesScopingFragment.java deleted file mode 100644 index 497b6cc..0000000 --- a/com.google.eclipse.protobuf.generator/src/com/google/eclipse/protobuf/scoping/ProtobufImportNamespacesScopingFragment.java +++ /dev/null
@@ -1,25 +0,0 @@ -/* - * Copyright (c) 2016 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.scoping; - -import org.eclipse.xtext.generator.scoping.AbstractScopingFragment; -import org.eclipse.xtext.scoping.IGlobalScopeProvider; -import org.eclipse.xtext.scoping.IScopeProvider; - -public class ProtobufImportNamespacesScopingFragment extends AbstractScopingFragment { - @Override - protected Class<? extends IGlobalScopeProvider> getGlobalScopeProvider() { - return ProtobufImportUriGlobalScopeProvider.class; - } - - @Override - protected Class<? extends IScopeProvider> getLocalScopeProvider() { - return ProtobufImportedNamespaceAwareLocalScopeProvider.class; - } -}
diff --git a/com.google.eclipse.protobuf.generator/src/com/google/eclipse/protobuf/scoping/ProtobufImportNamespacesScopingFragment.xpt b/com.google.eclipse.protobuf.generator/src/com/google/eclipse/protobuf/scoping/ProtobufImportNamespacesScopingFragment.xpt deleted file mode 100644 index 23c6cc5..0000000 --- a/com.google.eclipse.protobuf.generator/src/com/google/eclipse/protobuf/scoping/ProtobufImportNamespacesScopingFragment.xpt +++ /dev/null
@@ -1,23 +0,0 @@ -«REM» -/******************************************************************************* - * Copyright (c) 2008 itemis AG (http://www.itemis.eu) and others. - * 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 - * - *******************************************************************************/ -«ENDREM» - -«IMPORT org::eclipse::xtext» - - -«DEFINE addToPluginXmlRt(String scopeProviderSuperClassName, Boolean generateStub, Boolean generateXtendStub) FOR Grammar»«ENDDEFINE» - -«DEFINE addToPluginXmlUi(String scopeProviderSuperClassName, Boolean generateStub, Boolean generateXtendStub) FOR Grammar»«ENDDEFINE» - -«DEFINE addToStandaloneSetup(String scopeProviderSuperClassName, Boolean generateStub, Boolean generateXtendStub) FOR Grammar»«ENDDEFINE» - -«DEFINE generate(String scopeProviderSuperClassName, Boolean generateStub, Boolean generateXtendStub) FOR Grammar» - «EXPAND generator::scoping::AbstractScopingFragment::generateScopeProvider(scopeProviderSuperClassName, generateStub, generateXtendStub)» -«ENDDEFINE»
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelObjects_packageOf_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelObjects_packageOf_Test.java index 043d467..01412d5 100644 --- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelObjects_packageOf_Test.java +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/ModelObjects_packageOf_Test.java
@@ -44,7 +44,7 @@ @Test public void should_return_package_if_proto_has_one() { MessageField field = xtext.find("id", MessageField.class); Package aPackage = modelObjects.packageOf(field); - assertThat(aPackage.getImportedNamespace(), equalTo("person.test")); + assertThat(aPackage.getName(), equalTo("person.test")); } // syntax = "proto2";
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Packages_areRelated_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Packages_areRelated_Test.java index c9aeec4..2ebfa12 100644 --- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Packages_areRelated_Test.java +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/model/util/Packages_areRelated_Test.java
@@ -49,36 +49,36 @@ "may" }; p1 = mock(Package.class); - when(p1.getImportedNamespace()).thenReturn(baseName); + when(p1.getName()).thenReturn(baseName); p2 = mock(Package.class); } @Test public void should_return_true_if_packages_are_equal() { - when(p2.getImportedNamespace()).thenReturn(baseName); + when(p2.getName()).thenReturn(baseName); assertTrue(packages.areRelated(p1, p2)); } @Test public void should_return_true_second_is_subPackage_of_first() { for (String name : subpackageNames) { - when(p2.getImportedNamespace()).thenReturn(name); + when(p2.getName()).thenReturn(name); assertTrue(packages.areRelated(p1, p2)); } } @Test public void should_return_true_first_is_subPackage_of_second() { for (String name : subpackageNames) { - when(p2.getImportedNamespace()).thenReturn(name); + when(p2.getName()).thenReturn(name); assertTrue(packages.areRelated(p2, p1)); } } @Test public void should_return_false_if_second_starts_with_few_segments_of_first_but_is_not_subpackage() { - when(p2.getImportedNamespace()).thenReturn("may.the.ring"); + when(p2.getName()).thenReturn("may.the.ring"); assertFalse(packages.areRelated(p1, p2)); } @Test public void should_return_false_if_names_are_completely_different() { - when(p2.getImportedNamespace()).thenReturn("peace.dog"); + when(p2.getName()).thenReturn("peace.dog"); assertFalse(packages.areRelated(p1, p2)); } }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ImportValidator_checkUnknownSyntaxImports_withNonProto2Imports_Tests.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ImportValidator_checkUnknownSyntaxImports_withNonProto2Imports_Tests.java index 47e4e6c..c8b91bc 100644 --- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ImportValidator_checkUnknownSyntaxImports_withNonProto2Imports_Tests.java +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ImportValidator_checkUnknownSyntaxImports_withNonProto2Imports_Tests.java
@@ -10,7 +10,7 @@ import static com.google.eclipse.protobuf.junit.core.IntegrationTestModule.integrationTestModule; import static com.google.eclipse.protobuf.junit.core.XtextRule.overrideRuntimeModuleWith; -import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.PACKAGE__IMPORTED_NAMESPACE; +import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.IMPORT__PATH; import static com.google.eclipse.protobuf.validation.Messages.importingUnsupportedSyntax; import static org.eclipse.xtext.validation.ValidationMessageAcceptor.INSIGNIFICANT_INDEX; import static org.mockito.Mockito.mock; @@ -104,7 +104,7 @@ private void verifyThatImportingUnknownSyntaxFileCreatedWarning(Import anImport) { verify(messageAcceptor).acceptWarning(importingUnsupportedSyntax, anImport, - PACKAGE__IMPORTED_NAMESPACE, + IMPORT__PATH, INSIGNIFICANT_INDEX, null, new String[0]);
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkOnlyOnePackageDefinition_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkOnlyOnePackageDefinition_Test.java index 5bf5457..df880f4 100644 --- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkOnlyOnePackageDefinition_Test.java +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkOnlyOnePackageDefinition_Test.java
@@ -15,7 +15,7 @@ import static com.google.eclipse.protobuf.junit.core.UnitTestModule.unitTestModule; import static com.google.eclipse.protobuf.junit.core.XtextRule.overrideRuntimeModuleWith; -import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.PACKAGE__IMPORTED_NAMESPACE; +import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.PACKAGE__NAME; import static com.google.eclipse.protobuf.validation.Messages.multiplePackages; import static com.google.eclipse.protobuf.validation.ProtobufJavaValidator.MORE_THAN_ONE_PACKAGE_ERROR; @@ -51,7 +51,7 @@ @Test public void should_create_error_if_there_are_more_than_one_package_definitions() { Package p = xtext.find("com.google.eclipse", Package.class); validator.checkOnlyOnePackageDefinition(p); - verify(messageAcceptor).acceptError(multiplePackages, p, PACKAGE__IMPORTED_NAMESPACE, INSIGNIFICANT_INDEX, MORE_THAN_ONE_PACKAGE_ERROR); + verify(messageAcceptor).acceptError(multiplePackages, p, PACKAGE__NAME, INSIGNIFICANT_INDEX, MORE_THAN_ONE_PACKAGE_ERROR); } // syntax = "proto2";
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java index a40d43a..0b90171 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java
@@ -43,7 +43,6 @@ import org.eclipse.ui.plugin.AbstractUIPlugin; import org.eclipse.ui.views.contentoutline.IContentOutlinePage; import org.eclipse.xtext.documentation.IEObjectDocumentationProvider; -import org.eclipse.xtext.ide.editor.syntaxcoloring.ISemanticHighlightingCalculator; import org.eclipse.xtext.parser.IParser; import org.eclipse.xtext.resource.IResourceServiceProvider; import org.eclipse.xtext.ui.LanguageSpecific; @@ -54,6 +53,7 @@ import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer; import org.eclipse.xtext.ui.editor.syntaxcoloring.AbstractAntlrTokenToAttributeIdMapper; import org.eclipse.xtext.ui.editor.syntaxcoloring.IHighlightingConfiguration; +import org.eclipse.xtext.ui.editor.syntaxcoloring.ISemanticHighlightingCalculator; import org.eclipse.xtext.ui.resource.IResourceSetProvider; import org.eclipse.xtext.ui.resource.SimpleResourceSetProvider;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ProtobufHyperlinkDetector.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ProtobufHyperlinkDetector.java index e6b4aa9..c2482ee 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ProtobufHyperlinkDetector.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ProtobufHyperlinkDetector.java
@@ -8,7 +8,7 @@ */ package com.google.eclipse.protobuf.ui.editor.hyperlinking; -import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.PACKAGE__IMPORTED_NAMESPACE; +import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.IMPORT__PATH; import com.google.eclipse.protobuf.model.util.INodes; import com.google.eclipse.protobuf.model.util.Imports; @@ -71,7 +71,7 @@ if (!imports.isResolved(anImport)) { return NO_HYPERLINKS; } - INode importUriNode = nodes.firstNodeForFeature(anImport, PACKAGE__IMPORTED_NAMESPACE); + INode importUriNode = nodes.firstNodeForFeature(anImport, IMPORT__PATH); if (importUriNode.getLength() == 0) { return NO_HYPERLINKS; }
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 b0046aa..95ab1bb 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
@@ -35,11 +35,10 @@ import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.xtext.ide.editor.syntaxcoloring.IHighlightedPositionAcceptor; -import org.eclipse.xtext.ide.editor.syntaxcoloring.ISemanticHighlightingCalculator; import org.eclipse.xtext.nodemodel.INode; import org.eclipse.xtext.resource.XtextResource; -import org.eclipse.xtext.util.CancelIndicator; +import org.eclipse.xtext.ui.editor.syntaxcoloring.IHighlightedPositionAcceptor; +import org.eclipse.xtext.ui.editor.syntaxcoloring.ISemanticHighlightingCalculator; import com.google.eclipse.protobuf.model.util.INodes; import com.google.eclipse.protobuf.model.util.IndexedElements; @@ -78,11 +77,7 @@ @Inject private INodes nodes; @Inject private Options options; - @Override - public void provideHighlightingFor( - XtextResource resource, - IHighlightedPositionAcceptor acceptor, - CancelIndicator cancelIndicator) { + @Override public void provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor) { if (resource == null) { return; } @@ -162,8 +157,7 @@ private void highlight(IndexedElement element, IHighlightedPositionAcceptor acceptor) { highlightName(element, acceptor, DEFAULT_ID); - highlightFirstFeature( - element, indexedElements.indexFeatureOf(element), acceptor, MESSAGE_FIELD_INDEX_ID); + highlightFirstFeature(element, indexedElements.indexFeatureOf(element), acceptor, MESSAGE_FIELD_INDEX_ID); highlightOptions(element, acceptor); if (element instanceof Group) { highlight((Group) element, acceptor); @@ -275,18 +269,11 @@ } private void highlightName(EObject o, IHighlightedPositionAcceptor acceptor, String highlightId) { - EStructuralFeature feature = o.eClass().getEStructuralFeature("name"); - if (feature == null) { - feature = o.eClass().getEStructuralFeature("importedNamespace"); - } - highlightFirstFeature(o, feature, acceptor, highlightId); + highlightFirstFeature(o, o.eClass().getEStructuralFeature("name"), acceptor, highlightId); } - private void highlightFirstFeature( - EObject semantic, - EStructuralFeature feature, - IHighlightedPositionAcceptor acceptor, - String highlightId) { + private void highlightFirstFeature(EObject semantic, EStructuralFeature feature, + IHighlightedPositionAcceptor acceptor, String highlightId) { INode node = nodes.firstNodeForFeature(semantic, feature); if (node == null) { return;
diff --git a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF index e76431d..589dac1 100644 --- a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF +++ b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
@@ -18,7 +18,8 @@ org.eclipse.xtext, org.eclipse.xtext.generator;resolution:=optional, org.eclipse.xtext.ui, - org.eclipse.xtext.util + org.eclipse.xtext.util, + com.google.eclipse.protobuf.generator;bundle-version="1.0.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Export-Package: com.google.eclipse.protobuf, com.google.eclipse.protobuf.conversion,
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java index 378fe86..541b1a1 100644 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java
@@ -15,6 +15,7 @@ import com.google.eclipse.protobuf.resource.FastXtextResourceSet; import com.google.eclipse.protobuf.resource.GlobalResourceServiceProvider; import com.google.eclipse.protobuf.scoping.ExtensionRegistryProvider; +import com.google.eclipse.protobuf.scoping.ProtobufGlobalScopeProvider; import com.google.eclipse.protobuf.validation.ProtobufResourceValidator; import com.google.eclipse.protobuf.validation.ProtobufSyntaxErrorMessageProvider; import com.google.inject.Binder; @@ -27,11 +28,11 @@ import org.eclipse.xtext.resource.IGlobalServiceProvider; import org.eclipse.xtext.resource.XtextResource; import org.eclipse.xtext.resource.XtextResourceSet; +import org.eclipse.xtext.scoping.IGlobalScopeProvider; import org.eclipse.xtext.validation.IResourceValidator; /** - * Use this class to register components to be used at runtime / without the Equinox extension - * registry. + * Use this class to register components to be used at runtime / without the Equinox extension registry. */ public class ProtobufRuntimeModule extends AbstractProtobufRuntimeModule { public Class<? extends IGlobalServiceProvider> bindIGlobalServiceProvider() { @@ -42,8 +43,7 @@ return ProtobufQualifiedNameConverter.class; } - @Override - public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() { + @Override public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() { return ProtobufQualifiedNameProvider.class; } @@ -55,21 +55,22 @@ return ProtobufSyntaxErrorMessageProvider.class; } - @Override - public Class<? extends IValueConverterService> bindIValueConverterService() { + @Override public Class<? extends IValueConverterService> bindIValueConverterService() { return ProtobufTerminalConverters.class; } - @Override - public Class<? extends XtextResource> bindXtextResource() { + @Override public Class<? extends XtextResource> bindXtextResource() { return ProtobufResource.class; } - @Override - public Class<? extends XtextResourceSet> bindXtextResourceSet() { + @Override public Class<? extends XtextResourceSet> bindXtextResourceSet() { return FastXtextResourceSet.class; } + @Override public Class<? extends IGlobalScopeProvider> bindIGlobalScopeProvider() { + return ProtobufGlobalScopeProvider.class; + } + public void configureExtensionRegistry(Binder binder) { binder.bind(IExtensionRegistry.class).toProvider(ExtensionRegistryProvider.class); }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Packages.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Packages.java index 324b9c3..66a57f6 100644 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Packages.java +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/model/util/Packages.java
@@ -130,7 +130,7 @@ } private QualifiedName nameOf(Package p) { - String name = p.getImportedNamespace(); + String name = p.getName(); return (isEmpty(name)) ? null : qualifiedNameConverter.toQualifiedName(name); } }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufGlobalScopeProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufGlobalScopeProvider.java new file mode 100644 index 0000000..9f10eb0 --- /dev/null +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufGlobalScopeProvider.java
@@ -0,0 +1,70 @@ +/* + * Copyright (c) 2014 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.scoping; + +import com.google.eclipse.protobuf.model.util.Protobufs; +import com.google.eclipse.protobuf.model.util.Resources; +import com.google.eclipse.protobuf.protobuf.Import; +import com.google.eclipse.protobuf.protobuf.Protobuf; +import com.google.inject.Inject; +import com.google.inject.Provider; + +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.xtext.EcoreUtil2; +import org.eclipse.xtext.scoping.impl.ImportUriGlobalScopeProvider; +import org.eclipse.xtext.util.IAcceptor; +import org.eclipse.xtext.util.IResourceScopeCache; + +import java.util.Iterator; +import java.util.LinkedHashSet; + +/** + * A global scope provider that reads each {@link Import} in the protobuf file, resolves it, and + * caches the result. + */ +public class ProtobufGlobalScopeProvider extends ImportUriGlobalScopeProvider { + @Inject + private IResourceScopeCache cache; + + @Inject + private Resources resources; + + @Inject + private Protobufs protobufs; + + @Inject + private IImportResolver importResolver; + + @Override + protected LinkedHashSet<URI> getImportedUris(final Resource resource) { + return cache.get(ProtobufGlobalScopeProvider.class.getName(), resource, + new Provider<LinkedHashSet<URI>>() { + @Override + public LinkedHashSet<URI> get() { + final LinkedHashSet<URI> uniqueImportURIs = new LinkedHashSet<>(5); + IAcceptor<String> collector = createURICollector(resource, uniqueImportURIs); + Protobuf protobuf = resources.rootOf(resource); + if (protobuf == null) { + return uniqueImportURIs; + } + for (Import anImport : protobufs.importsIn(protobuf)) { + collector.accept(importResolver.resolve(anImport)); + } + Iterator<URI> uriIter = uniqueImportURIs.iterator(); + while (uriIter.hasNext()) { + if (!EcoreUtil2.isValidUri(resource, uriIter.next())) { + uriIter.remove(); + } + } + return uniqueImportURIs; + } + }); + } +}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufImportUriGlobalScopeProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufImportUriGlobalScopeProvider.java deleted file mode 100644 index bc84250..0000000 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufImportUriGlobalScopeProvider.java +++ /dev/null
@@ -1,72 +0,0 @@ -/* - * Copyright (c) 2014 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.scoping; - -import com.google.eclipse.protobuf.model.util.Imports; -import com.google.eclipse.protobuf.model.util.Protobufs; -import com.google.eclipse.protobuf.model.util.Resources; -import com.google.eclipse.protobuf.protobuf.Import; -import com.google.eclipse.protobuf.protobuf.Protobuf; -import com.google.inject.Inject; -import com.google.inject.Provider; - -import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.xtext.scoping.impl.ImportUriGlobalScopeProvider; -import org.eclipse.xtext.util.IResourceScopeCache; - -import java.util.LinkedHashSet; - -/** - * A global scope provider that reads each {@link Import} in the protobuf file, resolves it, and - * caches the result. - */ -public class ProtobufImportUriGlobalScopeProvider extends ImportUriGlobalScopeProvider { - @Inject private Protobufs protobufs; - @Inject private Resources resources; - @Inject private Imports imports; - @Inject private IResourceScopeCache cache; - - @Override - protected LinkedHashSet<URI> getImportedUris(final Resource resource) { - return cache.get( - ProtobufImportUriGlobalScopeProvider.class.getName(), - resource, - new Provider<LinkedHashSet<URI>>() { - @Override - public LinkedHashSet<URI> get() { - LinkedHashSet<URI> importedUris = new LinkedHashSet<>(); - Protobuf protobuf = resources.rootOf(resource); - if (protobuf == null) { - return importedUris; - } - for (Import singleImport : protobufs.importsIn(protobuf)) { - resolveImport(importedUris, singleImport); - } - return importedUris; - } - - private void addPublicImportedUris(Protobuf protobuf, LinkedHashSet<URI> importedUris) { - for (Import singleImport : protobufs.publicImportsIn(protobuf)) { - resolveImport(importedUris, singleImport); - } - } - - private void resolveImport(LinkedHashSet<URI> importedUris, Import singleImport) { - if (imports.isResolved(singleImport)) { - importedUris.add(imports.resolvedUriOf(singleImport)); - Protobuf root = resources.rootOf(imports.importedResource(singleImport)); - if (root != null) { - addPublicImportedUris(root, importedUris); - } - } - } - }); - } -}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufImportedNamespaceAwareLocalScopeProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufImportedNamespaceAwareLocalScopeProvider.java deleted file mode 100644 index de3ccb1..0000000 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufImportedNamespaceAwareLocalScopeProvider.java +++ /dev/null
@@ -1,42 +0,0 @@ -/* - * Copyright (c) 2016 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.scoping; - -import org.eclipse.xtext.naming.QualifiedName; -import org.eclipse.xtext.scoping.impl.ImportNormalizer; -import org.eclipse.xtext.scoping.impl.ImportedNamespaceAwareLocalScopeProvider; -import org.eclipse.xtext.util.Strings; -import com.google.eclipse.protobuf.naming.ProtobufQualifiedNameConverter; -import com.google.inject.Inject; - -public class ProtobufImportedNamespaceAwareLocalScopeProvider - extends ImportedNamespaceAwareLocalScopeProvider { - @Inject private ProtobufQualifiedNameConverter qualifiedNameConverter; - - /** - * Creates a new {@link ImportNormalizer} for the given namespace. - * - * @param namespace the namespace. - * @param ignoreCase <code>true</code> if the resolver should be case insensitive. - * @return a new {@link ImportNormalizer} or {@code null} if the namespace cannot be - * converted to a valid qualified name. - */ - @Override - protected ImportNormalizer createImportedNamespaceResolver( - final String namespace, boolean ignoreCase) { - if (Strings.isEmpty(namespace)) { - return null; - } - QualifiedName importedNamespace = qualifiedNameConverter.toQualifiedName(namespace); - if (importedNamespace == null || importedNamespace.isEmpty()) { - return null; - } - return doCreateImportNormalizer(importedNamespace, true, ignoreCase); - } -}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java index b164957..3c6e173 100644 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java
@@ -11,7 +11,7 @@ import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.MAP_TYPE__KEY_TYPE; import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.MAP_TYPE__VALUE_TYPE; import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.MESSAGE_FIELD__MODIFIER; -import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.PACKAGE__IMPORTED_NAMESPACE; +import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.PACKAGE__NAME; import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.SYNTAX__NAME; import static com.google.eclipse.protobuf.validation.Messages.expectedFieldNumber; import static com.google.eclipse.protobuf.validation.Messages.expectedSyntaxIdentifier; @@ -380,7 +380,7 @@ for (ProtobufElement e : root.getElements()) { if (e == aPackage) { if (firstFound) { - error(multiplePackages, aPackage, PACKAGE__IMPORTED_NAMESPACE, MORE_THAN_ONE_PACKAGE_ERROR); + error(multiplePackages, aPackage, PACKAGE__NAME, MORE_THAN_ONE_PACKAGE_ERROR); } return; }