Merge branch 'master' of https://code.google.com/p/protobuf-dt/ into option-ref Conflicts: com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter_toValue_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/DOUBLEValueConverter_toValue_Test.java similarity index 67% rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter_toValue_Test.java rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/DOUBLEValueConverter_toValue_Test.java index 03e58d8..6804161 100644 --- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter_toValue_Test.java +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/DOUBLEValueConverter_toValue_Test.java
@@ -8,6 +8,7 @@ */ package com.google.eclipse.protobuf.conversion; +import static java.lang.Double.*; import static java.util.Arrays.asList; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertThat; @@ -24,45 +25,47 @@ import com.google.eclipse.protobuf.junit.core.XtextRule; /** - * Tests for <code>{@link FLOATValueConverter#toValue(String, INode)}</code>. + * Tests for <code>{@link DOUBLEValueConverter#toValue(String, INode)}</code>. * * @author alruiz@google.com (Alex Ruiz) */ @RunWith(Parameterized.class) -public class FLOATValueConverter_toValue_Test { +public class DOUBLEValueConverter_toValue_Test { @Rule public XtextRule xtext = new XtextRule(); private final String input; - private final Float expected; + private final Double expected; @Parameters public static Collection<Object[]> parameters() { return asList(new Object[][] { - { "52e3", 52e3F }, - { "52E3", 52e3F }, - { "6e-3", 0.006F }, - { "6.8", 6.8F }, - { "-3.1", -3.1F }, - { ".3", 0.3F } + { "52e3", 52e3D }, + { "52E3", 52e3D }, + { "6e-3", 0.006D }, + { "6.8", 6.8D }, + { "-3.1", -3.1D }, + { ".3", 0.3D }, + { "nan", NaN }, + { "inf", POSITIVE_INFINITY } }); } - public FLOATValueConverter_toValue_Test(String input, Float expected) { + public DOUBLEValueConverter_toValue_Test(String input, Double expected) { this.input = input; this.expected = expected; } - private FLOATValueConverter converter; + private DOUBLEValueConverter converter; private INode node; @Before public void setUp() { node = mock(INode.class); - converter = xtext.injector().getInstance(FLOATValueConverter.class); + converter = xtext.injector().getInstance(DOUBLEValueConverter.class); } @Test public void should_parse_hexadecimal_number() { - Float value = converter.toValue(input, node); + Double value = converter.toValue(input, node); assertThat(value, equalTo(expected)); } }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter_toValue_withInvalidInput_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter_toValue_withInvalidInput_Test.java index a2957f4..7dc34e3 100644 --- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter_toValue_withInvalidInput_Test.java +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter_toValue_withInvalidInput_Test.java
@@ -22,7 +22,7 @@ import com.google.eclipse.protobuf.junit.core.XtextRule; /** - * Tests for <code>{@link FLOATValueConverter#toValue(String, INode)}</code>. + * Tests for <code>{@link DOUBLEValueConverter#toValue(String, INode)}</code>. * * @author alruiz@google.com (Alex Ruiz) */ @@ -31,12 +31,12 @@ @Rule public XtextRule xtext = new XtextRule(); @Rule public ExpectedException thrown = none(); - private FLOATValueConverter converter; + private DOUBLEValueConverter converter; private INode node; @Before public void setUp() { node = mock(INode.class); - converter = xtext.injector().getInstance(FLOATValueConverter.class); + converter = xtext.injector().getInstance(DOUBLEValueConverter.class); } @Test public void should_throw_error_if_input_is_null() {
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/Descriptor_fileOptions_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/Descriptor_availableOptionPropertiesFor_Test.java similarity index 81% rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/Descriptor_fileOptions_Test.java rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/Descriptor_availableOptionPropertiesFor_Test.java index 72b65ed..7ee78d2 100644 --- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/Descriptor_fileOptions_Test.java +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/Descriptor_availableOptionPropertiesFor_Test.java
@@ -11,32 +11,35 @@ import static com.google.eclipse.protobuf.junit.matchers.PropertyHasType.hasType; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.mock; import java.util.*; +import org.eclipse.emf.ecore.EObject; import org.junit.*; import com.google.eclipse.protobuf.junit.core.XtextRule; -import com.google.eclipse.protobuf.protobuf.Property; +import com.google.eclipse.protobuf.protobuf.*; /** - * Tests for <code>{@link ProtoDescriptor#fileOptions()}</code>. + * Tests for <code>{@link ProtoDescriptor#availableOptionPropertiesFor(EObject)}</code>. * * @author alruiz@google.com (Alex Ruiz) */ @Ignore("This test requires to be executed as a 'JUnit plug-in test'. I haven't found a way to register PlatformURLHandler with the JVM") -public class Descriptor_fileOptions_Test { +public class Descriptor_availableOptionPropertiesFor_Test { @Rule public XtextRule xtext = new XtextRule(); private ProtoDescriptor descriptor; - + @Before public void setUp() { descriptor = xtext.getInstanceOf(ProtoDescriptorProvider.class).get(); } @Test public void should_return_all_file_options() { - Map<String, Property> fileOptions = mapByName(descriptor.fileOptions()); + Protobuf optionContainer = mock(Protobuf.class); + Map<String, Property> fileOptions = mapByName(descriptor.availableOptionPropertiesFor(optionContainer)); assertThat(fileOptions.get("java_package"), hasType("string")); assertThat(fileOptions.get("java_outer_classname"), hasType("string")); assertThat(fileOptions.get("java_multiple_files"), hasType("bool"));
diff --git a/com.google.eclipse.protobuf.ui/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf.ui/META-INF/MANIFEST.MF index fd2b236..da7e2d6 100644 --- a/com.google.eclipse.protobuf.ui/META-INF/MANIFEST.MF +++ b/com.google.eclipse.protobuf.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Bundle-Vendor: %Bundle-Vendor -Bundle-Version: 1.0.8.qualifier +Bundle-Version: 1.0.9.qualifier Bundle-SymbolicName: com.google.eclipse.protobuf.ui; singleton:=true Bundle-ActivationPolicy: lazy Require-Bundle: com.google.eclipse.protobuf;visibility:=reexport,
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/Messages.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/Messages.java new file mode 100644 index 0000000..03ea039 --- /dev/null +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/Messages.java
@@ -0,0 +1,28 @@ +/* + * 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.ui.quickfix; + +import org.eclipse.osgi.util.NLS; + +/** + * @author alruiz@google.com (Alex Ruiz) + */ +public class Messages extends NLS { + + public static String changeToProto2; + public static String changeToProto2Label; + + static { + Class<Messages> targetType = Messages.class; + NLS.initializeMessages(targetType.getName(), targetType); + } + + private Messages() {} +}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/Messages.properties b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/Messages.properties new file mode 100644 index 0000000..54e5126 --- /dev/null +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/Messages.properties
@@ -0,0 +1,2 @@ +changeToProto2=Change syntax to "proto2". +changeToProto2Label=Change syntax to "proto2"
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickAssistProcessor.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickAssistProcessor.java index 15aa610..a5dc287 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickAssistProcessor.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickAssistProcessor.java
@@ -10,6 +10,7 @@ package com.google.eclipse.protobuf.ui.quickfix; import static java.util.Arrays.asList; +import static java.util.Collections.emptyList; import com.google.inject.Inject; @@ -27,10 +28,21 @@ @Inject private SpellingCorrectionProcessor spellingCorrectionProcessor; - @Override public ICompletionProposal[] computeQuickAssistProposals(IQuickAssistInvocationContext invocationContext) { + @Override public ICompletionProposal[] computeQuickAssistProposals(IQuickAssistInvocationContext context) { List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>(); - proposals.addAll(asList(spellingCorrectionProcessor.computeQuickAssistProposals(invocationContext))); - proposals.addAll(asList(super.computeQuickAssistProposals(invocationContext))); + proposals.addAll(spellingFixes(context)); + proposals.addAll(asList(super.computeQuickAssistProposals(context))); return proposals.toArray(new ICompletionProposal[proposals.size()]); } + + private List<ICompletionProposal> spellingFixes(IQuickAssistInvocationContext context) { + ICompletionProposal[] spellingFixes = spellingCorrectionProcessor.computeQuickAssistProposals(context); + if (spellingFixes.length == 0) return emptyList(); + if (spellingFixes.length == 1 && isNoCompletionsProposal(spellingFixes[0])) return emptyList(); + return asList(spellingFixes); + } + + private boolean isNoCompletionsProposal(ICompletionProposal p) { + return p.getClass().getSimpleName().equals("NoCompletionsProposal"); + } }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickfixProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickfixProvider.java index 59fc306..04f7973 100644 --- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickfixProvider.java +++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickfixProvider.java
@@ -1,29 +1,42 @@ /* * 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 - * + * + * 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.ui.quickfix; -import org.eclipse.xtext.ui.editor.quickfix.DefaultQuickfixProvider; +import static com.google.eclipse.protobuf.ui.quickfix.Messages.*; +import static com.google.eclipse.protobuf.validation.ProtobufJavaValidator.SYNTAX_IS_NOT_PROTO2_ERROR_CODE; + +import com.google.eclipse.protobuf.protobuf.Syntax; +import com.google.eclipse.protobuf.ui.labeling.Images; +import com.google.inject.Inject; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.xtext.ui.editor.model.edit.*; +import org.eclipse.xtext.ui.editor.quickfix.*; +import org.eclipse.xtext.validation.Issue; /** * @author alruiz@google.com (Alex Ruiz) */ public class ProtobufQuickfixProvider extends DefaultQuickfixProvider { -// @Fix(MyJavaValidator.INVALID_NAME) -// public void capitalizeName(final Issue issue, IssueResolutionAcceptor acceptor) { -// acceptor.accept(issue, "Capitalize name", "Capitalize the name.", "upcase.png", new IModification() { -// public void apply(IModificationContext context) throws BadLocationException { -// IXtextDocument xtextDocument = context.getXtextDocument(); -// String firstLetter = xtextDocument.get(issue.getOffset(), 1); -// xtextDocument.replace(issue.getOffset(), 1, firstLetter.toUpperCase()); -// } -// }); -// } - + @Inject private Images images; + + @Fix(SYNTAX_IS_NOT_PROTO2_ERROR_CODE) + public void makeSyntaxProto2(final Issue issue, IssueResolutionAcceptor acceptor) { + String image = images.imageFor(Syntax.class); + acceptor.accept(issue, changeToProto2Label, changeToProto2, image, new ISemanticModification() { + public void apply(EObject element, IModificationContext context) throws Exception { + if (!(element instanceof Syntax)) return; + Syntax syntax = (Syntax) element; + syntax.setName("proto2"); + } + }); + } }
diff --git a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF index 06792c5..21189b7 100644 --- a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF +++ b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Eclipse-ExtensibleAPI: true Bundle-Name: %Bundle-Name Bundle-Vendor: %Bundle-Vendor -Bundle-Version: 1.0.8.qualifier +Bundle-Version: 1.0.9.qualifier Bundle-SymbolicName: com.google.eclipse.protobuf; singleton:=true Bundle-ActivationPolicy: lazy Require-Bundle: org.eclipse.xtext,
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext index 84ba83c..6c6c4d3 100644 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext
@@ -106,7 +106,7 @@ name=Name ':' value=SimpleRef; SimpleRef: - LiteralRef | BooleanRef | NumberRef | StringRef | Nan; + LiteralRef | BooleanRef | NumberRef | StringRef; LiteralRef: literal=[Literal]; @@ -119,7 +119,7 @@ | false; NumberRef: - HexRef | LongRef | FloatRef; + HexRef | LongRef | DoubleRef; HexRef: hex=HEX; @@ -130,11 +130,11 @@ terminal LONG returns ecore::ELong: ('-')? (NUMBER)+; -FloatRef: - float=FLOAT; +DoubleRef: + double=DOUBLE; -terminal FLOAT returns ecore::EFloat: - ('-')? (NUMBER)* ('.' (NUMBER)+)? (('e'|'E')('-')? (NUMBER)+)?; +terminal DOUBLE returns ecore::EDouble: + (('-')? (NUMBER)* ('.' (NUMBER)+)? (('e'|'E')('-')? (NUMBER)+)?) | 'nan' | 'inf'; StringRef: string=STRING; @@ -143,13 +143,11 @@ SL_STRING (SL_STRING)*; terminal SL_STRING: - '"' ('\\' ('b' | 't' | 'n' | 'f' | 'r' | 'u' | '"' | "'" | '\\' | UNICODE_OCTAL) | !('\\' | '"'))* '"' (WS)*; + '"' ('\\' ('b' | 't' | 'n' | 'f' | 'r' | 'u' | '"' | "'" | '\\' | UNICODE_OCTAL) | !('\\' | '"'))* '"' (WS)* | + "'" ('\\' ('b' | 't' | 'n' | 'f' | 'r' | 'u' | '"' | "'" | '\\' | UNICODE_OCTAL) | !('\\' | "'"))* "'" (WS)*; terminal UNICODE_OCTAL: ('0'..'3')('0'..'7')('0'..'7'); - -Nan: - number='nan'; Enum: 'enum' name=Name '{'
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/DOUBLEValueConverter.java similarity index 72% rename from com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter.java rename to com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/DOUBLEValueConverter.java index 930b070..cec6067 100644 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter.java +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/DOUBLEValueConverter.java
@@ -8,6 +8,8 @@ */ package com.google.eclipse.protobuf.conversion; +import static java.lang.Double.*; +import static java.lang.Double.NaN; import static org.eclipse.xtext.util.Strings.isEmpty; import org.eclipse.xtext.conversion.ValueConverterException; @@ -15,11 +17,11 @@ import org.eclipse.xtext.nodemodel.INode; /** - * Converts floating-point numbers to {@code float}s. + * Converts floating-point numbers to {@code double}s. * * @author alruiz@google.com (Alex Ruiz) */ -public class FLOATValueConverter extends AbstractLexerBasedConverter<Float> { +public class DOUBLEValueConverter extends AbstractLexerBasedConverter<Double> { /** * Creates an {@code float} from the given input, if the given input represents a floating-point number. @@ -29,16 +31,18 @@ * @throws ValueConverterException if the given input is {@code null}, empty or does not represent a floating-point * number. */ - public Float toValue(String string, INode node) throws ValueConverterException { - if (isEmpty(string)) throw new ValueConverterException("Couldn't convert empty string to float.", node, null); + public Double toValue(String string, INode node) throws ValueConverterException { + if (isEmpty(string)) throw new ValueConverterException("Couldn't convert empty string to double.", node, null); + if ("nan".equals(string)) return NaN; + if ("inf".equals(string)) return POSITIVE_INFINITY; try { - return Float.parseFloat(string); + return Double.parseDouble(string); } catch (NumberFormatException e) { throw parsingError(string, node, e); } } private ValueConverterException parsingError(String string, INode node, Exception cause) { - return new ValueConverterException("Couldn't convert '" + string + "' to float.", node, cause); + return new ValueConverterException("Couldn't convert '" + string + "' to double.", node, cause); } }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/ProtobufTerminalConverters.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/ProtobufTerminalConverters.java index e4ac026..d778e94 100644 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/ProtobufTerminalConverters.java +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/ProtobufTerminalConverters.java
@@ -18,14 +18,14 @@ */ public class ProtobufTerminalConverters extends DefaultTerminalConverters { - @Inject private FLOATValueConverter floatValueConverter; + @Inject private DOUBLEValueConverter doubleValueConverter; @Inject private HEXValueConverter hexValueConverter; @Inject private LONGValueConverter longValueConverter; @Inject private STRINGValueConverter stringValueConverter; - @ValueConverter(rule = "FLOAT") - public IValueConverter<Float> FLOAT() { - return floatValueConverter; + @ValueConverter(rule = "DOUBLE") + public IValueConverter<Double> DOUBLE() { + return doubleValueConverter; } @ValueConverter(rule = "HEX")
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/STRINGValueConverter.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/STRINGValueConverter.java index 63c5f96..ae23a29 100644 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/STRINGValueConverter.java +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/STRINGValueConverter.java
@@ -41,7 +41,7 @@ public String toValue(String string, INode node) throws ValueConverterException { if (string == null) return null; try { - String clean = removeLineBreaksFrom(string); + String clean = removeLineBreaksFrom(string).trim(); return convertToJavaString(clean.substring(1, clean.length() - 1), true); } catch (IllegalArgumentException e) { throw parsingError(string, node, e);
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/OptionType.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/OptionType.java index ce32976..2c75f54 100644 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/OptionType.java +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/OptionType.java
@@ -21,7 +21,7 @@ */ enum OptionType { FILE("FileOptions"), MESSAGE("MessageOptions"), FIELD("FieldOptions"), ENUM("EnumOptions"), - ENUM_LITERAL("EnumValueOptions"), SERVICE("ServiceOptions"), RPC("MethodOptions"); + LITERAL("EnumValueOptions"), SERVICE("ServiceOptions"), RPC("MethodOptions"); private static final Map<Class<?>, OptionType> OPTION_TYPES_BY_CONTAINER = new HashMap<Class<?>, OptionType>(); @@ -48,4 +48,4 @@ } return null; } -} \ No newline at end of file +}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java index 984b28f..af6225f 100644 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java
@@ -133,11 +133,12 @@ } /** - * Returns the options available for the given option or option container. For example, if the given object is an - * <code>{@link Enum}</code>, this method will return <code>{@link #enumOptions()}</code>. - * @param o an option or an option container. + * Returns the options available for the given option or option container. The returned options are defined in + * {@code google/protobuf/descriptor.proto} (more details can be found + * <a href=http://code.google.com/apis/protocolbuffers/docs/proto.html#options" target="_blank">here</a>.) + * @param o the given option or option container. * @return the options available for the given option or option container, or an empty collection if the are not any - * options available for the given option container. + * options available. */ public Collection<Property> availableOptionPropertiesFor(EObject o) { EObject target = o;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Properties.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Properties.java index 625ca65..df6ed1c 100644 --- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Properties.java +++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Properties.java
@@ -55,6 +55,11 @@ return isScalarType(p, BOOL); } + /** + * Indicates whether the given property can accept "nan" as its default value. + * @param p the given property. + * @return {@code true} if the given property can accept "nan" as its default value, {@code false} otherwise. + */ public boolean mayBeNan(Property p) { String typeName = typeNameOf(p); return FLOAT.hasValue(typeName) || DOUBLE.hasValue(typeName);
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 9de1574..1ede6e7 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
@@ -30,6 +30,9 @@ */ public class ProtobufJavaValidator extends AbstractProtobufJavaValidator { + public static final String SYNTAX_IS_NOT_PROTO2_ERROR_CODE = "syntaxIsNotProto2"; + public static final String TAG_NUMBER_IS_NOT_UNIQUE_ERROR_CODE = "tagNumberIsNotUnique"; + @Inject private FieldOptions fieldOptions; @Inject private ImportUriResolver uriResolver; @Inject private IQualifiedNameProvider qualifiedNameProvider; @@ -71,7 +74,7 @@ String name = syntax.getName(); if ("proto2".equals(name)) return; String msg = (name == null) ? expectedSyntaxIdentifier : format(unrecognizedSyntaxIdentifier, name); - error(msg, SYNTAX__NAME); + error(msg, syntax, SYNTAX__NAME, SYNTAX_IS_NOT_PROTO2_ERROR_CODE); } @Check public void checkTagNumberIsUnique(Field field) { @@ -87,7 +90,7 @@ if (other.getIndex() != index) continue; QualifiedName messageName = qualifiedNameProvider.getFullyQualifiedName(message); String msg = format(fieldNumberAlreadyUsed, index, messageName.toString(), other.getName()); - error(msg, FIELD__INDEX); + error(msg, field, FIELD__INDEX, TAG_NUMBER_IS_NOT_UNIQUE_ERROR_CODE); break; } }