From 30cf6abf8c59251f98ba3ab1162441ed4a89fdc1 Mon Sep 17 00:00:00 2001 From: Michael Ernst Date: Sun, 5 Apr 2026 13:12:47 -0700 Subject: [PATCH 1/2] Simplify --- .claude/settings.json | 3 +- build.gradle | 6 +++ .../java/org/plumelib/bcelutil/BcelUtil.java | 6 +-- .../org/plumelib/bcelutil/StackMapUtils.java | 6 +-- .../org/plumelib/bcelutil/StackTypes.java | 43 +++++++------------ 5 files changed, 28 insertions(+), 36 deletions(-) diff --git a/.claude/settings.json b/.claude/settings.json index 2626b61a..84ab2f18 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -17,9 +17,10 @@ "Bash(ls:*)", "Bash(mkdir:*)", "Bash(mkdir:*)", - "Bash(python3 -m json.tool)" + "Bash(python3 -m json.tool)", "Bash(timeout 300 ./gradlew:*)", "Bash(wc:*)", + "Bash(xargs cat:*)", "Edit(./**)", "Read(//home/mernst/research/types/checker-framework-fork*/**)", "Read(//scratch/**)", diff --git a/build.gradle b/build.gradle index 86ab43f6..fb9560c9 100644 --- a/build.gradle +++ b/build.gradle @@ -288,6 +288,12 @@ tasks.register("installGitHooks", Copy) { description = "Copies git hooks to .git directory" from("githooks") into(".git/hooks") + eachFile { + File target = file("$destinationDir/$relativePath") + if (java.nio.file.Files.isSymbolicLink(target.toPath())) { + target.delete() // Delete the link so Gradle writes a real file instead + } + } } tasks.withType(JavaCompile) { diff --git a/src/main/java/org/plumelib/bcelutil/BcelUtil.java b/src/main/java/org/plumelib/bcelutil/BcelUtil.java index 3b9ae6e1..bba893d1 100644 --- a/src/main/java/org/plumelib/bcelutil/BcelUtil.java +++ b/src/main/java/org/plumelib/bcelutil/BcelUtil.java @@ -69,16 +69,14 @@ public static String methodDeclarationToString(Method m) { StringBuilder sb = new StringBuilder(); String flags = accessFlagsToString(m); - boolean argsExist = false; if (flags != null && !flags.isEmpty()) { sb.append(String.format("%s ", flags)); } sb.append(String.format("%s %s(", m.getReturnType(), m.getName())); for (Type at : m.getArgumentTypes()) { sb.append(String.format("%s, ", at)); - argsExist = true; } - if (argsExist) { + if (m.getArgumentTypes().length > 0) { sb.setLength(sb.length() - 2); // remove trailing ", " } sb.append(')'); @@ -277,7 +275,7 @@ public static boolean inJdkInternalform(@InternalForm String classname) { || classname.startsWith("com/sun/") || classname.startsWith("javax/") || classname.startsWith("jdk/") - || classname.startsWith("org/ietj/") + || classname.startsWith("org/ietf/") || classname.startsWith("org/jcp/") || classname.startsWith("org/w3c/") || classname.startsWith("org/xml/") diff --git a/src/main/java/org/plumelib/bcelutil/StackMapUtils.java b/src/main/java/org/plumelib/bcelutil/StackMapUtils.java index 7655aae7..8b12e83b 100644 --- a/src/main/java/org/plumelib/bcelutil/StackMapUtils.java +++ b/src/main/java/org/plumelib/bcelutil/StackMapUtils.java @@ -126,7 +126,7 @@ public StackMapUtils() { /** An empty StackMap used for initialization. */ @SuppressWarnings("interning") // @InternedDistinct initalization with fresh object - private StackMapEntry @InternedDistinct [] emptyStackmaptable = {}; + private StackMapEntry @InternedDistinct [] emptyStackMapTable = {}; /** * A map from instructions that create uninitialized NEW objects to the corresponding StackMap @@ -551,7 +551,7 @@ protected final void setCurrentStackMapTable(MethodGen mgen, int javaClassVersio // Delete existing stack map - we'll add a new one later. mgen.removeCodeAttribute(smta); } else { - stackMapTable = emptyStackmaptable; + stackMapTable = emptyStackMapTable; if (javaClassVersion > Const.MAJOR_1_6) { needStackMap = true; } @@ -585,7 +585,7 @@ protected final void createNewStackMapAttribute(MethodGen mgen) throws IOExcepti if (!needStackMap) { return; } - if (stackMapTable == emptyStackmaptable) { + if (stackMapTable == emptyStackMapTable) { return; } printStackMapTable("Final"); diff --git a/src/main/java/org/plumelib/bcelutil/StackTypes.java b/src/main/java/org/plumelib/bcelutil/StackTypes.java index 3dae4899..e214b42c 100644 --- a/src/main/java/org/plumelib/bcelutil/StackTypes.java +++ b/src/main/java/org/plumelib/bcelutil/StackTypes.java @@ -1,5 +1,6 @@ package org.plumelib.bcelutil; +import java.util.StringJoiner; import org.apache.bcel.generic.InstructionList; import org.apache.bcel.generic.MethodGen; import org.apache.bcel.generic.Type; @@ -72,9 +73,7 @@ public OperandStack get(@IndexFor({"localVariableses", "operandStacks"}) int off @SideEffectFree @Override public String toString(@GuardSatisfied StackTypes this) { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < operandStacks.length; i++) { if (operandStacks[i] != null) { sb.append(String.format("Instruction %d:\n", i)); @@ -82,7 +81,6 @@ public String toString(@GuardSatisfied StackTypes this) { sb.append(String.format(" locals: %s\n", toString(localVariableses[i]))); } } - return sb.toString(); } @@ -92,24 +90,18 @@ public String toString(@GuardSatisfied StackTypes this) { * @param os the OperandStack to print * @return a printed representation of {@code os} */ + @SuppressWarnings({ + "allcheckers:purity.not.sideeffectfree.call", + "lock:method.guarantee.violated" + }) // side effect to local state @SideEffectFree public String toString(@GuardSatisfied StackTypes this, OperandStack os) { - - String buff = ""; - + StringJoiner sj = new StringJoiner(", ", "{", "}"); for (int i = 0; i < os.size(); i++) { - if (buff.length() > 0) { - buff += ", "; - } Type t = os.peek(i); - if (t instanceof UninitializedObjectType) { - buff += "uninitialized-object"; - } else { - buff += t; - } + sj.add(t instanceof UninitializedObjectType ? "uninitialized-object" : t.toString()); } - - return "{" + buff + "}"; + return sj.toString(); } /** @@ -118,22 +110,17 @@ public String toString(@GuardSatisfied StackTypes this, OperandStack os) { * @param lv the LocalVariablesStack to print * @return a printed representation of {@code lv} */ + @SuppressWarnings({ + "allcheckers:purity.not.sideeffectfree.call", + "lock:method.guarantee.violated" + }) // side effect to local state @SideEffectFree public String toString(@GuardSatisfied StackTypes this, LocalVariables lv) { - - String buff = ""; - + StringJoiner sj = new StringJoiner(", ", "{", "}"); for (int i = 0; i < lv.maxLocals(); i++) { - if (buff.length() > 0) { - buff += ", "; - } Type t = lv.get(i); - if (t instanceof UninitializedObjectType) { - buff += "uninitialized-object"; - } else { - buff += t; - } + sj.add(t instanceof UninitializedObjectType ? "uninitialized-object" : t.toString()); } - return "{" + buff + "}"; + return sj.toString(); } } From bac52b20bc9164b25b1440b1be498f4bc490f6c7 Mon Sep 17 00:00:00 2001 From: Michael Ernst Date: Sun, 5 Apr 2026 13:20:39 -0700 Subject: [PATCH 2/2] Update build.gradle Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index fb9560c9..a8608ab1 100644 --- a/build.gradle +++ b/build.gradle @@ -291,7 +291,7 @@ tasks.register("installGitHooks", Copy) { eachFile { File target = file("$destinationDir/$relativePath") if (java.nio.file.Files.isSymbolicLink(target.toPath())) { - target.delete() // Delete the link so Gradle writes a real file instead + java.nio.file.Files.delete(target.toPath()) // Fail if the symlink cannot be removed } } }