From 818ed07881e0351fb8efe977c91f89ef184bab46 Mon Sep 17 00:00:00 2001 From: David Phillips Date: Sun, 25 Aug 2024 19:55:21 -0700 Subject: [PATCH] Enable default Error Prone checks --- .../java/com/dylibso/chicory/aot/AotMachine.java | 3 ++- .../dylibso/chicory/aot/HostFunctionInvoker.java | 2 +- .../java/com/dylibso/chicory/aot/ValueWrapper.java | 2 +- pom.xml | 10 +++++++++- .../chicory/runtime/InterpreterMachine.java | 4 ++-- .../java/com/dylibso/chicory/runtime/Memory.java | 1 + .../com/dylibso/chicory/maven/JavaTestGen.java | 14 ++------------ .../com/dylibso/chicory/maven/StringUtils.java | 2 +- .../com/dylibso/chicory/maven/TestGenMojo.java | 1 - .../com/dylibso/chicory/maven/wast/Command.java | 4 ++++ .../com/dylibso/chicory/maven/StringUtils.java | 2 +- .../java/com/dylibso/chicory/wasi/WasiErrno.java | 7 ++++++- .../com/dylibso/chicory/wasi/WasiFileType.java | 7 ++++++- .../com/dylibso/chicory/wasi/WasiPreview1.java | 8 ++++---- .../dylibso/chicory/wasm/types/ExternalType.java | 7 ++----- .../java/com/dylibso/chicory/wasm/types/Value.java | 2 +- 16 files changed, 43 insertions(+), 33 deletions(-) diff --git a/aot/src/main/java/com/dylibso/chicory/aot/AotMachine.java b/aot/src/main/java/com/dylibso/chicory/aot/AotMachine.java index d13fb2f83..3f70e609d 100644 --- a/aot/src/main/java/com/dylibso/chicory/aot/AotMachine.java +++ b/aot/src/main/java/com/dylibso/chicory/aot/AotMachine.java @@ -26,6 +26,7 @@ import static java.lang.invoke.MethodHandles.insertArguments; import static java.lang.invoke.MethodHandles.publicLookup; import static java.lang.invoke.MethodType.methodType; +import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Objects.requireNonNull; import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toSet; @@ -506,7 +507,7 @@ private Class loadClass(String className, byte[] classBytes) { // run ASM verifier to help with debugging try { ClassReader reader = new ClassReader(classBytes); - CheckClassAdapter.verify(reader, true, new PrintWriter(System.out)); + CheckClassAdapter.verify(reader, true, new PrintWriter(System.out, false, UTF_8)); } catch (NoClassDefFoundError ignored) { // the ASM verifier is an optional dependency } catch (Throwable t) { diff --git a/aot/src/main/java/com/dylibso/chicory/aot/HostFunctionInvoker.java b/aot/src/main/java/com/dylibso/chicory/aot/HostFunctionInvoker.java index 100909651..a131ccd8b 100644 --- a/aot/src/main/java/com/dylibso/chicory/aot/HostFunctionInvoker.java +++ b/aot/src/main/java/com/dylibso/chicory/aot/HostFunctionInvoker.java @@ -17,7 +17,7 @@ final class HostFunctionInvoker { HostFunctionInvoker.class.getMethod( "invoke", Instance.class, int.class, Value[].class)); } catch (NoSuchMethodException | IllegalAccessException e) { - throw new AssertionError(e); + throw new LinkageError(e.getMessage(), e); } } diff --git a/aot/src/main/java/com/dylibso/chicory/aot/ValueWrapper.java b/aot/src/main/java/com/dylibso/chicory/aot/ValueWrapper.java index 911b06fdf..97b1d3a9f 100644 --- a/aot/src/main/java/com/dylibso/chicory/aot/ValueWrapper.java +++ b/aot/src/main/java/com/dylibso/chicory/aot/ValueWrapper.java @@ -12,7 +12,7 @@ final class ValueWrapper { try { HANDLE = lookup().unreflect(ValueWrapper.class.getMethod("wrap", Value.class)); } catch (NoSuchMethodException | IllegalAccessException e) { - throw new AssertionError(e); + throw new LinkageError(e.getMessage(), e); } } diff --git a/pom.xml b/pom.xml index 6eeb3e95f..b6c8f0689 100644 --- a/pom.xml +++ b/pom.xml @@ -495,11 +495,19 @@ ${maven.compiler.release} true + true + true + true -XDcompilePolicy=simple -Xplugin:ErrorProne \ - -XepDisableAllChecks \ + -Xep:MissingCasesInEnumSwitch:OFF \ -Xep:MissingOverride:ERROR \ + -Xep:MissingSummary:OFF \ + -Xep:NonOverridingEquals:OFF \ + -Xep:OperatorPrecedence:OFF \ + -Xep:ReferenceEquality:OFF \ + -Xep:UnnecessaryParentheses:OFF \ -XepExcludedPaths:.*/target/generated-(|test-)sources/.* diff --git a/runtime/src/main/java/com/dylibso/chicory/runtime/InterpreterMachine.java b/runtime/src/main/java/com/dylibso/chicory/runtime/InterpreterMachine.java index 070c3f1a5..7bf2d1172 100644 --- a/runtime/src/main/java/com/dylibso/chicory/runtime/InterpreterMachine.java +++ b/runtime/src/main/java/com/dylibso/chicory/runtime/InterpreterMachine.java @@ -182,7 +182,7 @@ static void eval(MStack stack, Instance instance, Deque callStack) SELECT(stack); break; case SELECT_T: - SELECT_T(stack, operands); + SELECT_T(stack); break; case LOCAL_GET: stack.push(frame.local((int) operands[0])); @@ -1819,7 +1819,7 @@ private static void SELECT(MStack stack) { } } - private static void SELECT_T(MStack stack, long[] operands) { + private static void SELECT_T(MStack stack) { var pred = stack.pop().asInt(); var b = stack.pop(); var a = stack.pop(); diff --git a/runtime/src/main/java/com/dylibso/chicory/runtime/Memory.java b/runtime/src/main/java/com/dylibso/chicory/runtime/Memory.java index f1bd8466b..ee15f5325 100644 --- a/runtime/src/main/java/com/dylibso/chicory/runtime/Memory.java +++ b/runtime/src/main/java/com/dylibso/chicory/runtime/Memory.java @@ -372,6 +372,7 @@ public void fill(byte value) { fill(value, 0, buffer.capacity()); } + @SuppressWarnings("ByteBufferBackingArray") public void fill(byte value, int fromIndex, int toIndex) { try { // see https://appsintheopen.com/posts/53-resetting-bytebuffers-to-zero-in-java diff --git a/test-gen-plugin/src/main/java/com/dylibso/chicory/maven/JavaTestGen.java b/test-gen-plugin/src/main/java/com/dylibso/chicory/maven/JavaTestGen.java index e333fdc37..b329f177e 100644 --- a/test-gen-plugin/src/main/java/com/dylibso/chicory/maven/JavaTestGen.java +++ b/test-gen-plugin/src/main/java/com/dylibso/chicory/maven/JavaTestGen.java @@ -34,14 +34,11 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; -import org.apache.maven.plugin.logging.Log; public class JavaTestGen { private static final String TEST_MODULE_NAME = "testModule"; - private final Log log; - private final File baseDir; private final File sourceTargetFolder; @@ -57,7 +54,6 @@ public class JavaTestGen { private final List excludedUnlinkableWasts; public JavaTestGen( - Log log, File baseDir, File sourceTargetFolder, List excludedTests, @@ -65,7 +61,6 @@ public JavaTestGen( List excludedInvalidWasts, List excludedUninstantiableWasts, List excludedUnlinkableWasts) { - this.log = log; this.baseDir = baseDir; this.sourceTargetFolder = sourceTargetFolder; this.excludedTests = excludedTests; @@ -171,7 +166,6 @@ public CompilationUnit generate( new AssignExpr( new NameExpr(lastInstanceVarName), generateModuleInstantiation( - cmd, currentWasmFile, importsName, hostFuncs, @@ -399,11 +393,7 @@ private List generateInvoke(String varName, Command cmd) { private static final String INDENT = TAB + TAB + TAB + TAB + TAB; private static NameExpr generateModuleInstantiation( - Command cmd, - String wasmFile, - String importsName, - String hostFuncs, - boolean excludeInvalid) { + String wasmFile, String importsName, String hostFuncs, boolean excludeInvalid) { return new NameExpr( "TestModule.of(\n" + INDENT @@ -478,7 +468,7 @@ private void generateAssertThrows( + exceptionType + ".class, () -> " + generateModuleInstantiation( - cmd, wasmFile, importsName, hostFuncs, false) + wasmFile, importsName, hostFuncs, false) + ")"); method.getBody().get().addStatement(assertThrows); diff --git a/test-gen-plugin/src/main/java/com/dylibso/chicory/maven/StringUtils.java b/test-gen-plugin/src/main/java/com/dylibso/chicory/maven/StringUtils.java index 868107925..685cf1912 100644 --- a/test-gen-plugin/src/main/java/com/dylibso/chicory/maven/StringUtils.java +++ b/test-gen-plugin/src/main/java/com/dylibso/chicory/maven/StringUtils.java @@ -8,7 +8,7 @@ public static String capitalize(String in) { if (in.isEmpty()) { return in; } - return in.substring(0, 1).toUpperCase() + in.substring(1); + return Character.toUpperCase(in.charAt(0)) + in.substring(1); } public static String escapedCamelCase(String in) { diff --git a/test-gen-plugin/src/main/java/com/dylibso/chicory/maven/TestGenMojo.java b/test-gen-plugin/src/main/java/com/dylibso/chicory/maven/TestGenMojo.java index 8c3e767b4..01afd4e24 100644 --- a/test-gen-plugin/src/main/java/com/dylibso/chicory/maven/TestGenMojo.java +++ b/test-gen-plugin/src/main/java/com/dylibso/chicory/maven/TestGenMojo.java @@ -136,7 +136,6 @@ public void execute() throws MojoExecutionException { var testSuiteDownloader = new TestSuiteDownloader(log); var testGen = new JavaTestGen( - log, project.getBasedir(), sourceDestinationFolder, excludedTests, diff --git a/test-gen-plugin/src/main/java/com/dylibso/chicory/maven/wast/Command.java b/test-gen-plugin/src/main/java/com/dylibso/chicory/maven/wast/Command.java index 753fe17e4..964eff748 100644 --- a/test-gen-plugin/src/main/java/com/dylibso/chicory/maven/wast/Command.java +++ b/test-gen-plugin/src/main/java/com/dylibso/chicory/maven/wast/Command.java @@ -90,4 +90,8 @@ public String text() { public String moduleType() { return moduleType; } + + public String as() { + return as; + } } diff --git a/wasi-test-gen-plugin/src/main/java/com/dylibso/chicory/maven/StringUtils.java b/wasi-test-gen-plugin/src/main/java/com/dylibso/chicory/maven/StringUtils.java index 868107925..685cf1912 100644 --- a/wasi-test-gen-plugin/src/main/java/com/dylibso/chicory/maven/StringUtils.java +++ b/wasi-test-gen-plugin/src/main/java/com/dylibso/chicory/maven/StringUtils.java @@ -8,7 +8,7 @@ public static String capitalize(String in) { if (in.isEmpty()) { return in; } - return in.substring(0, 1).toUpperCase() + in.substring(1); + return Character.toUpperCase(in.charAt(0)) + in.substring(1); } public static String escapedCamelCase(String in) { diff --git a/wasi/src/main/java/com/dylibso/chicory/wasi/WasiErrno.java b/wasi/src/main/java/com/dylibso/chicory/wasi/WasiErrno.java index dc15e5349..f4f8827c3 100644 --- a/wasi/src/main/java/com/dylibso/chicory/wasi/WasiErrno.java +++ b/wasi/src/main/java/com/dylibso/chicory/wasi/WasiErrno.java @@ -77,5 +77,10 @@ enum WasiErrno { ETIMEDOUT, ETXTBSY, EXDEV, - ENOTCAPABLE, + ENOTCAPABLE; + + @SuppressWarnings("EnumOrdinal") + public int value() { + return ordinal(); + } } diff --git a/wasi/src/main/java/com/dylibso/chicory/wasi/WasiFileType.java b/wasi/src/main/java/com/dylibso/chicory/wasi/WasiFileType.java index 78f4588b0..72cc75c3e 100644 --- a/wasi/src/main/java/com/dylibso/chicory/wasi/WasiFileType.java +++ b/wasi/src/main/java/com/dylibso/chicory/wasi/WasiFileType.java @@ -8,5 +8,10 @@ enum WasiFileType { REGULAR_FILE, SOCKET_DGRAM, SOCKET_STREAM, - SYMBOLIC_LINK, + SYMBOLIC_LINK; + + @SuppressWarnings("EnumOrdinal") + public int value() { + return ordinal(); + } } diff --git a/wasi/src/main/java/com/dylibso/chicory/wasi/WasiPreview1.java b/wasi/src/main/java/com/dylibso/chicory/wasi/WasiPreview1.java index 57c7fd5b6..bb50d86ce 100644 --- a/wasi/src/main/java/com/dylibso/chicory/wasi/WasiPreview1.java +++ b/wasi/src/main/java/com/dylibso/chicory/wasi/WasiPreview1.java @@ -419,7 +419,7 @@ public HostFunction fdFdstatGet() { Memory memory = instance.memory(); memory.write(buf, new byte[8]); - memory.writeByte(buf, (byte) fileType.ordinal()); + memory.writeByte(buf, (byte) fileType.value()); memory.writeShort(buf + 2, (short) flags); memory.writeLong(buf + 8, rightsBase); memory.writeLong(buf + 16, rightsInheriting); @@ -758,7 +758,7 @@ public HostFunction fdReaddir() { entry.putLong(0, cookie); entry.putLong(8, ((Number) attributes.get("ino")).longValue()); entry.putInt(16, name.length); - entry.put(20, (byte) getFileType(attributes).ordinal()); + entry.put(20, (byte) getFileType(attributes).value()); entry.position(24); entry.put(name); @@ -1610,7 +1610,7 @@ private Value[] wasiResult(WasiErrno errno) { if (errno != WasiErrno.ESUCCESS) { logger.info("result = " + errno.name()); } - return new Value[] {Value.i32(errno.ordinal())}; + return new Value[] {Value.i32(errno.value())}; } private static Path resolvePath(Path directory, String rawPathString) { @@ -1638,7 +1638,7 @@ private static void writeFileStat( memory.writeLong(buf, (long) attributes.get("dev")); memory.writeLong(buf + 8, ((Number) attributes.get("ino")).longValue()); memory.write(buf + 16, new byte[8]); - memory.writeByte(buf + 16, (byte) fileType.ordinal()); + memory.writeByte(buf + 16, (byte) fileType.value()); memory.writeLong(buf + 24, ((Number) attributes.get("nlink")).longValue()); memory.writeLong(buf + 32, (long) attributes.get("size")); memory.writeLong(buf + 40, fileTimeToNanos(attributes, "lastAccessTime")); diff --git a/wasm/src/main/java/com/dylibso/chicory/wasm/types/ExternalType.java b/wasm/src/main/java/com/dylibso/chicory/wasm/types/ExternalType.java index 27b5bc2f6..4fa046b15 100644 --- a/wasm/src/main/java/com/dylibso/chicory/wasm/types/ExternalType.java +++ b/wasm/src/main/java/com/dylibso/chicory/wasm/types/ExternalType.java @@ -20,8 +20,10 @@ public enum ExternalType { private final int id; + @SuppressWarnings("EnumOrdinal") ExternalType(int id) { this.id = id; + assert ordinal() == id; } /** @@ -33,11 +35,6 @@ public int id() { private static final List values = List.of(values()); - static { - // integrity verification - assert values.stream().allMatch(e -> e.ordinal() == e.id()); - } - public static ExternalType byId(int id) { return values.get(id); } diff --git a/wasm/src/main/java/com/dylibso/chicory/wasm/types/Value.java b/wasm/src/main/java/com/dylibso/chicory/wasm/types/Value.java index da9239fcc..85ebfe3fb 100644 --- a/wasm/src/main/java/com/dylibso/chicory/wasm/types/Value.java +++ b/wasm/src/main/java/com/dylibso/chicory/wasm/types/Value.java @@ -238,7 +238,7 @@ public final boolean equals(Object v) { return false; } Value other = (Value) v; - return Objects.equals(type.id(), other.type.id()) && data == other.data; + return type.id() == other.type.id() && data == other.data; } @Override