diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 5497e80ca0..c3522f09dc 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.23 + +* More Java linter and linter fixes. + ## 0.1.22 * Java code generator enhancements: diff --git a/packages/pigeon/ci/.gitignore b/packages/pigeon/ci/.gitignore new file mode 100644 index 0000000000..72e8ffc0db --- /dev/null +++ b/packages/pigeon/ci/.gitignore @@ -0,0 +1 @@ +* diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index a33b91f9cd..2d4d823c81 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -65,9 +65,9 @@ if (replyMap == null) { \t\tdetails: null, \t); } else if (replyMap['error'] != null) { -\tfinal Map error = replyMap['${Keys.error}'] as Map; +\tfinal Map error = (replyMap['${Keys.error}'] as Map$nullTag)$unwrapOperator; \tthrow PlatformException( -\t\tcode: error['${Keys.errorCode}'] as String, +\t\tcode: (error['${Keys.errorCode}'] as String$nullTag)$unwrapOperator, \t\tmessage: error['${Keys.errorMessage}'] as String$nullTag, \t\tdetails: error['${Keys.errorDetails}'], \t); @@ -161,10 +161,10 @@ void _writeFlutterApi( } else { indent.writeln('final $returnType output = $call;'); } - const String returnExpresion = 'output.encode()'; + const String returnExpression = 'output.encode()'; final String returnStatement = isMockHandler - ? 'return {\'${Keys.result}\': $returnExpresion};' - : 'return $returnExpresion;'; + ? 'return {\'${Keys.result}\': $returnExpression};' + : 'return $returnExpression;'; indent.writeln(returnStatement); } }); @@ -197,7 +197,7 @@ void generateDart(DartOptions opt, Root root, StringSink sink) { indent.writeln('// $generatedCodeWarning'); indent.writeln('// $seeAlsoWarning'); indent.writeln( - '// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import', + '// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators', ); indent.writeln('// @dart = ${opt.isNullSafe ? '2.12' : '2.8'}'); indent.writeln('import \'dart:async\';'); diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart index 1a9c328c60..6b64189aa8 100644 --- a/packages/pigeon/lib/generator_tools.dart +++ b/packages/pigeon/lib/generator_tools.dart @@ -8,7 +8,7 @@ import 'dart:mirrors'; import 'ast.dart'; /// The current version of pigeon. This must match the version in pubspec.yaml. -const String pigeonVersion = '0.1.22'; +const String pigeonVersion = '0.1.23'; /// Read all the content from [stdin] to a String. String readStdin() { diff --git a/packages/pigeon/lib/java_generator.dart b/packages/pigeon/lib/java_generator.dart index 4f3bde4c62..2c119e8ed5 100644 --- a/packages/pigeon/lib/java_generator.dart +++ b/packages/pigeon/lib/java_generator.dart @@ -56,7 +56,7 @@ void _writeHostApi(Indent indent, Api api) { } indent.addln(''); indent.writeln( - '/** Sets up an instance of `${api.name}` to handle messages through the `binaryMessenger` */'); + '/** Sets up an instance of `${api.name}` to handle messages through the `binaryMessenger`. */'); indent.write( 'static void setup(BinaryMessenger binaryMessenger, ${api.name} api) '); indent.scoped('{', '}', () { @@ -108,7 +108,7 @@ void _writeHostApi(Indent indent, Api api) { 'wrapped.put("${Keys.result}", output.toMap());'); } }); - indent.write('catch (Exception exception) '); + indent.write('catch (Error | RuntimeException exception) '); indent.scoped('{', '}', () { indent.writeln( 'wrapped.put("${Keys.error}", wrapError(exception));'); @@ -298,7 +298,7 @@ void generateJava(JavaOptions options, Root root, StringSink sink) { } indent.format(''' -private static Map wrapError(Exception exception) { +private static Map wrapError(Throwable exception) { \tMap errorMap = new HashMap<>(); \terrorMap.put("${Keys.errorMessage}", exception.toString()); \terrorMap.put("${Keys.errorCode}", exception.getClass().getSimpleName()); diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index baa70bd6e2..4072779440 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -305,7 +305,7 @@ options: ..addOption('objc_prefix', help: 'Prefix for generated Objective-C classes and protocols.'); - /// Convert command-line arugments to [PigeonOptions]. + /// Convert command-line arguments to [PigeonOptions]. static PigeonOptions parseArgs(List args) { final ArgResults results = _argParser.parse(args); diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index 7560a04a3c..66894c2aa6 100644 --- a/packages/pigeon/pubspec.yaml +++ b/packages/pigeon/pubspec.yaml @@ -1,5 +1,5 @@ name: pigeon -version: 0.1.22 # This must match the version in lib/generator_tools.dart +version: 0.1.23 # This must match the version in lib/generator_tools.dart description: Code generator tool to make communication between Flutter and the host platform type-safe and easier. homepage: https://github.com/flutter/packages/tree/master/packages/pigeon dependencies: diff --git a/packages/pigeon/run_tests.sh b/packages/pigeon/run_tests.sh index d3dbe0a0f0..f370651fe8 100755 --- a/packages/pigeon/run_tests.sh +++ b/packages/pigeon/run_tests.sh @@ -11,6 +11,16 @@ set -ex JAVA_LINTER=checkstyle-8.41-all.jar JAVA_FORMATTER=google-java-format-1.3-all-deps.jar GOOGLE_CHECKS=google_checks.xml +JAVA_ERROR_PRONE=error_prone_core-2.5.1-with-dependencies.jar +DATAFLOW_SHADED=dataflow-shaded-3.7.1.jar +JFORMAT_STRING=jFormatString-3.0.0.jar +JAVA_VERSION=$(java -version 2>&1 | head -1 | cut -d'"' -f2 | sed '/^1\./s///' | cut -d'.' -f1) +JAVAC_JAR=javac-9+181-r4173-1.jar +if [ $JAVA_VERSION == "8" ]; then + JAVAC_BOOTCLASSPATH="-J-Xbootclasspath/p:ci/$JAVAC_JAR" +else + JAVAC_BOOTCLASSPATH= +fi # TODO(blasten): Enable on stable when possible. # https://github.com/flutter/flutter/issues/75187 @@ -72,17 +82,21 @@ test_pigeon_android() { --input $1 \ --dart_out $temp_dir/pigeon.dart \ --java_out $temp_dir/Pigeon.java \ + --java_package foo - if ! javac $temp_dir/Pigeon.java \ - -Xlint:unchecked \ - -classpath "$flutter_bin/cache/artifacts/engine/android-x64/flutter.jar"; then + java -jar ci/$JAVA_FORMATTER --replace "$temp_dir/Pigeon.java" + java -jar ci/$JAVA_LINTER -c "ci/$GOOGLE_CHECKS" "$temp_dir/Pigeon.java" + if ! javac \ + $JAVAC_BOOTCLASSPATH \ + -XDcompilePolicy=simple \ + -processorpath "ci/$JAVA_ERROR_PRONE:ci/$DATAFLOW_SHADED:ci/$JFORMAT_STRING" \ + '-Xplugin:ErrorProne -Xep:CatchingUnchecked:ERROR' \ + -classpath "$flutter_bin/cache/artifacts/engine/android-x64/flutter.jar" \ + $temp_dir/Pigeon.java; then echo "javac $temp_dir/Pigeon.java failed" exit 1 fi - java -jar $JAVA_FORMATTER $temp_dir/Pigeon.java > $temp_dir/Pigeon.java - java -jar $JAVA_LINTER -c $GOOGLE_CHECKS $temp_dir/Pigeon.java - dartfmt -w $temp_dir/pigeon.dart dartanalyzer $temp_dir/pigeon.dart --fatal-infos --fatal-warnings --packages ./e2e_tests/test_objc/.packages @@ -108,15 +122,28 @@ test_null_safe_dart() { ############################################################################### # Get java linter / formatter ############################################################################### -if [ ! -f "$JAVA_LINTER" ]; then - curl -L https://github.com/checkstyle/checkstyle/releases/download/checkstyle-8.41/$JAVA_LINTER > $JAVA_LINTER +if [ ! -f "ci/$JAVA_LINTER" ]; then + curl -L https://github.com/checkstyle/checkstyle/releases/download/checkstyle-8.41/$JAVA_LINTER > "ci/$JAVA_LINTER" fi -if [ ! -f "$JAVA_FORMATTER" ]; then - curl -L https://github.com/google/google-java-format/releases/download/google-java-format-1.3/$JAVA_FORMATTER > $JAVA_FORMATTER +if [ ! -f "ci/$JAVA_FORMATTER" ]; then + curl -L https://github.com/google/google-java-format/releases/download/google-java-format-1.3/$JAVA_FORMATTER > "ci/$JAVA_FORMATTER" fi -if [ ! -f "$GOOGLE_CHECKS" ]; then - curl -L https://raw.githubusercontent.com/checkstyle/checkstyle/master/src/main/resources/$GOOGLE_CHECKS > $GOOGLE_CHECKS +if [ ! -f "ci/$GOOGLE_CHECKS" ]; then + curl -L https://raw.githubusercontent.com/checkstyle/checkstyle/master/src/main/resources/$GOOGLE_CHECKS > "ci/$GOOGLE_CHECKS" fi +if [ ! -f "ci/$JAVA_ERROR_PRONE" ]; then + curl https://repo1.maven.org/maven2/com/google/errorprone/error_prone_core/2.5.1/$JAVA_ERROR_PRONE > "ci/$JAVA_ERROR_PRONE" +fi +if [ ! -f "ci/$DATAFLOW_SHADED" ]; then + curl https://repo1.maven.org/maven2/org/checkerframework/dataflow-shaded/3.7.1/$DATAFLOW_SHADED > "ci/$DATAFLOW_SHADED" +fi +if [ ! -f "ci/$JFORMAT_STRING" ]; then + curl https://repo1.maven.org/maven2/com/google/code/findbugs/jFormatString/3.0.0/$JFORMAT_STRING > "ci/$JFORMAT_STRING" +fi +if [ ! -f "ci/$JAVAC_JAR" ]; then + curl https://repo1.maven.org/maven2/com/google/errorprone/javac/9+181-r4173-1/$JAVAC_JAR > "ci/$JAVAC_JAR" +fi + ############################################################################### # Dart analysis and unit tests diff --git a/packages/pigeon/test/pigeon_lib_test.dart b/packages/pigeon/test/pigeon_lib_test.dart index 457eff0a4f..1ae3147161 100644 --- a/packages/pigeon/test/pigeon_lib_test.dart +++ b/packages/pigeon/test/pigeon_lib_test.dart @@ -238,7 +238,7 @@ void main() { expect(results.errors.length, 1); }); - test('null saftey flag', () { + test('null safety flag', () { final PigeonOptions results = Pigeon.parseArgs(['--dart_null_safety']); expect(results.dartOptions.isNullSafe, true);