Importing non-proto2 files now shows a warning.
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/TypeDescriptions.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/TypeDescriptions.java
index 2258513..835d74b 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/TypeDescriptions.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/TypeDescriptions.java
@@ -21,6 +21,7 @@
import org.eclipse.xtext.resource.IEObjectDescription;
import com.google.eclipse.protobuf.model.util.*;
+import com.google.eclipse.protobuf.parser.NonProto2;
import com.google.eclipse.protobuf.protobuf.*;
import com.google.eclipse.protobuf.protobuf.Package;
import com.google.inject.Inject;
@@ -98,6 +99,7 @@
}
Resource importedResource = resources.importedResource(anImport, resourceSet);
Protobuf rootOfImported = finder.rootOf(importedResource);
+ if (rootOfImported instanceof NonProto2) continue;
if (rootOfImported != null) {
descriptions.addAll(publicImported(rootOfImported, targetType));
if (arePackagesRelated(aPackage, rootOfImported)) {
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.java
index 3c610fc..07f30b4 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.java
@@ -22,6 +22,7 @@
public static String expectedTrueOrFalse;
public static String fieldNumberAlreadyUsed;
public static String fieldNumbersMustBePositive;
+ public static String importingNonProto2;
public static String importNotFound;
public static String missingFieldNumber;
public static String multiplePackages;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.properties b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.properties
index fdbabb1..688c504 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.properties
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.properties
@@ -5,6 +5,7 @@
expectedTrueOrFalse = Expected "true" or "false".
fieldNumberAlreadyUsed = Field number %d has already been used in \"%s\" by field \"%s\".
fieldNumbersMustBePositive = Field numbers must be positive integers.
+importingNonProto2 = Importing non-proto2 file. This may result in errors related to unresolved references.
importNotFound = Import \"%s\" was not found.
missingFieldNumber = Missing field number.
multiplePackages = Multiple package definitions.
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 e3b7e6e..ca2221d 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
@@ -15,6 +15,7 @@
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.*;
import org.eclipse.xtext.naming.*;
import org.eclipse.xtext.scoping.impl.ImportUriResolver;
import org.eclipse.xtext.validation.Check;
@@ -35,9 +36,11 @@
public static final String MORE_THAN_ONE_PACKAGE_ERROR = "moreThanOnePackage";
@Inject private FieldOptions fieldOptions;
+ @Inject private ModelFinder finder;
@Inject private ImportUriResolver uriResolver;
@Inject private IQualifiedNameProvider qualifiedNameProvider;
@Inject private Properties properties;
+ @Inject private Resources resources;
@Check public void checkIsProto2(Protobuf protobuf) {
if (protobuf instanceof NonProto2) {
@@ -58,15 +61,36 @@
error(expectedTrueOrFalse, FIELD_OPTION__VALUE);
}
}
+
+ @Check public void checkIsImportingNonProto2File(Import anImport) {
+ if (!retryUntilItIsResolved(anImport)) return;
+ Resource imported = importedResource(anImport);
+ Protobuf root = finder.rootOf(imported);
+ if (root instanceof NonProto2) {
+ warning(importingNonProto2, IMPORT__IMPORT_URI);
+ }
+ }
+
+ private Resource importedResource(Import anImport) {
+ ResourceSet resourceSet = resourceSet(anImport);
+ return resources.importedResource(anImport, resourceSet);
+ }
+
+ private ResourceSet resourceSet(EObject e) {
+ Protobuf root = finder.rootOf(e);
+ return root.eResource().getResourceSet();
+ }
@Check public void checkImportIsResolved(Import anImport) {
- boolean isResolved = isResolved(anImport);
- if (isResolved) return;
- uriResolver.apply(anImport);
- isResolved = isResolved(anImport);
- if (isResolved) return;
+ if (retryUntilItIsResolved(anImport)) return;
error(format(importNotFound, anImport.getImportURI()), IMPORT__IMPORT_URI);
}
+
+ private boolean retryUntilItIsResolved(Import anImport) {
+ if (isResolved(anImport)) return true;
+ uriResolver.apply(anImport);
+ return isResolved(anImport);
+ }
private boolean isResolved(Import anImport) {
String importUri = anImport.getImportURI();