From 5cd030ea7ac483fc2977318d770f78fe9974f341 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Mon, 19 Jan 2026 06:54:46 -0500 Subject: [PATCH 01/83] Add a sanity check in JavaClassTest Extract some constants --- .../apache/bcel/classfile/JavaClassTest.java | 68 ++++++++++++++----- 1 file changed, 50 insertions(+), 18 deletions(-) diff --git a/src/test/java/org/apache/bcel/classfile/JavaClassTest.java b/src/test/java/org/apache/bcel/classfile/JavaClassTest.java index b1faaa2275..ff76cba598 100644 --- a/src/test/java/org/apache/bcel/classfile/JavaClassTest.java +++ b/src/test/java/org/apache/bcel/classfile/JavaClassTest.java @@ -26,7 +26,9 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import org.apache.bcel.Const; import org.apache.bcel.Repository; @@ -37,6 +39,7 @@ import org.apache.bcel.generic.Type; import org.apache.bcel.util.ClassPath; import org.apache.bcel.util.SyntheticRepository; +import org.apache.commons.lang3.SystemProperties; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -48,8 +51,11 @@ */ class JavaClassTest { - private static final String CLASS_NAME = "TargetClass"; + private static final String INTERFACE_NAME_A = "InterfaceA"; + + private static final String INTERFACE_NAME_B = "InterfaceB"; + private static final String CLASS_NAME = "TargetClass"; // Doesn't compile due to cyclic inheritance // private interface InterfaceA extends InterfaceB { // } @@ -60,14 +66,20 @@ class JavaClassTest { @TempDir static Path tempDir; + static Path tempClassFile; + + static Path tempIntefaceAFile; + + static Path tempIntefaceBFile; + @BeforeAll static void beforeAll() throws Exception { // Create InterfaceA that extends InterfaceB (will create cycle) - writeInterfaceA(); + tempIntefaceAFile = writeInterfaceA(); // Create InterfaceB that extends InterfaceA (completes the cycle) - writeInterfaceB(); + tempIntefaceBFile = writeInterfaceB(); // Create a class that implements InterfaceA - writeTargetClass(); + tempClassFile = writeTargetClass(); // Cycle: InterfaceA -> InterfaceB -> InterfaceA -> ... } @@ -90,23 +102,27 @@ static byte[] toByteArray(final ClassGen cg) throws IOException { return baos.toByteArray(); } - private static void writeInterfaceA() throws Exception { + private static Path writeInterfaceA() throws Exception { // Create InterfaceA that extends InterfaceB - final ClassGen cg = new ClassGen("InterfaceA", "java.lang.Object", "InterfaceA.java", Const.ACC_PUBLIC | Const.ACC_INTERFACE | Const.ACC_ABSTRACT, - new String[] { "InterfaceB" }); - cg.getJavaClass().dump(tempDir.resolve("InterfaceA.class").toString()); + final ClassGen classGen = new ClassGen(INTERFACE_NAME_A, "java.lang.Object", INTERFACE_NAME_A + ".java", + Const.ACC_PUBLIC | Const.ACC_INTERFACE | Const.ACC_ABSTRACT, new String[] { INTERFACE_NAME_B }); + final Path path = tempDir.resolve(INTERFACE_NAME_A + ".class"); + classGen.getJavaClass().dump(path.toString()); + return path; } - private static void writeInterfaceB() throws Exception { + private static Path writeInterfaceB() throws Exception { // Create InterfaceB that extends InterfaceA - final ClassGen cg = new ClassGen("InterfaceB", "java.lang.Object", "InterfaceB.java", Const.ACC_PUBLIC | Const.ACC_INTERFACE | Const.ACC_ABSTRACT, - new String[] { "InterfaceA" }); - cg.getJavaClass().dump(tempDir.resolve("InterfaceB.class").toString()); + final ClassGen classGen = new ClassGen(INTERFACE_NAME_B, "java.lang.Object", INTERFACE_NAME_B + ".java", + Const.ACC_PUBLIC | Const.ACC_INTERFACE | Const.ACC_ABSTRACT, new String[] { INTERFACE_NAME_A }); + final Path path = tempDir.resolve(INTERFACE_NAME_B + ".class"); + classGen.getJavaClass().dump(path.toString()); + return path; } - private static void writeTargetClass() throws Exception { + private static Path writeTargetClass() throws Exception { // Create a class that implements InterfaceA - final ClassGen cg = new ClassGen(CLASS_NAME, "java.lang.Object", "VulnerableClass.java", Const.ACC_PUBLIC, new String[] { "InterfaceA" }); + final ClassGen cg = new ClassGen(CLASS_NAME, "java.lang.Object", CLASS_NAME + ".java", Const.ACC_PUBLIC, new String[] { INTERFACE_NAME_A }); // Add default constructor final InstructionList il = new InstructionList(); final MethodGen constructor = new MethodGen(Const.ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] {}, "", CLASS_NAME, il, cg.getConstantPool()); @@ -119,7 +135,9 @@ private static void writeTargetClass() throws Exception { cg.addMethod(constructor.getMethod()); il.dispose(); // Create the class file - cg.getJavaClass().dump(tempDir.resolve(CLASS_NAME + ".class").toString()); + final Path path = tempDir.resolve(CLASS_NAME + ".class"); + cg.getJavaClass().dump(path.toString()); + return path; } private Field findFieldDoesNotExist(final Class clazz) throws ClassNotFoundException { @@ -149,11 +167,26 @@ void testFindFieldCustomClass() throws Exception { } @Test - void testFindFieldCustomInterface1() throws ClassNotFoundException { + void testFindFieldCustomInterface1() throws IOException, ClassNotFoundException { // Set up repository to load classes from the malicious_classes directory - final String classPath = tempDir.toString() + System.getProperty("path.separator") + System.getProperty("java.class.path"); + final String classPath = tempDir.toString() + SystemProperties.getPathSeparator() + SystemProperties.getJavaClassPath(); Repository.setRepository(SyntheticRepository.getInstance(new ClassPath(classPath))); assertThrows(ClassFormatException.class, () -> Repository.lookupClass(CLASS_NAME).findField("nonExistentField", Type.INT)); + // sanity check + final Path targetDir = Paths.get("target/test-classes"); + final Path targetClassFile = targetDir.resolve(CLASS_NAME + ".class"); + final Path targetInterfaceA = targetDir.resolve(INTERFACE_NAME_A + ".class"); + final Path targetInterfaceB = targetDir.resolve(INTERFACE_NAME_B + ".class"); + try { + Files.copy(tempClassFile, targetClassFile); + Files.copy(tempIntefaceAFile, targetInterfaceA); + Files.copy(tempIntefaceBFile, targetInterfaceB); + assertThrows(ClassCircularityError.class, () -> Class.forName(CLASS_NAME)); + } finally { + Files.delete(targetClassFile); + Files.delete(targetInterfaceA); + Files.delete(targetInterfaceB); + } } @Test @@ -195,5 +228,4 @@ void testGetAllInterfaces(final Class clazz) throws ClassNotFoundException { void testGetSuperClassesAll(final Class clazz) throws ClassNotFoundException { assertNotNull(Repository.lookupClass(clazz.getName()).getSuperClasses()); } - } From 88556adb3c19b7c9323cd5c0c72084d0d14eb93f Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Thu, 22 Jan 2026 13:49:25 +0000 Subject: [PATCH 02/83] Updates for the next release --- src/changes/changes.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index e604e9e8ed..3efe0b3f21 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -59,6 +59,11 @@ The type attribute can be add,update,fix,remove. Defining changes.version allows one to create the RN without first removing the SNAPSHOT suffix. --> + + + + + Fix infinite loop in example.TransitiveHull #476. From 9c1cf9005ba7d3b215644ffe93b6a58dcb65c981 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Thu, 22 Jan 2026 13:58:55 +0000 Subject: [PATCH 03/83] Updates for the next release --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index b94e4ee02e..d7c3c3f289 100644 --- a/pom.xml +++ b/pom.xml @@ -44,11 +44,11 @@ 1.8 bcel org.apache.bcel - 6.12.0 + 6.12.1 6.12.1 true RC1 - 6.11.0 + 6.12.0 (Java 8 or above) https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-bcel scm:svn:https://dist.apache.org/repos/dist/dev/commons/${commons.componentid} From b881c8a9800095136f3c7ef7c892945458f61e16 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Thu, 22 Jan 2026 15:39:08 +0000 Subject: [PATCH 04/83] Bump actions/setup-java from 5.1.0 to 5.2.0 --- .github/workflows/maven.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 5ee0820979..c621602a10 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -48,7 +48,7 @@ jobs: restore-keys: | ${{ runner.os }}-maven- - name: Set up JDK ${{ matrix.java }} - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: ${{ runner.os == 'macOS' && matrix.java == '8' && 'zulu' || 'temurin' }} java-version: ${{ matrix.java }} From 89b2aefc106e8dfb1710e438880b4dc61d04be3f Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Thu, 22 Jan 2026 18:17:20 -0500 Subject: [PATCH 05/83] Bump org.apache.commons:commons-parent from 95 to 96. --- pom.xml | 2 +- src/changes/changes.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d7c3c3f289..dcf48b9343 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ org.apache.commons commons-parent - 95 + 96 org.apache.bcel bcel diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 3efe0b3f21..f136652dbe 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -63,6 +63,7 @@ The type attribute can be add,update,fix,remove. + Bump org.apache.commons:commons-parent from 95 to 96. From bab23f7396250dd861215810260c4f8a35543200 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Fri, 23 Jan 2026 07:43:50 -0500 Subject: [PATCH 06/83] Bump actions/checkout from 6.0.1 to 6.0.2 --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/dependency-review.yml | 2 +- .github/workflows/maven.yml | 2 +- .github/workflows/scorecards-analysis.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index c4c4c67879..cc69f53340 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -45,7 +45,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1 diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 1df8666044..a04da50909 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -26,6 +26,6 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: 'Dependency Review PR' uses: actions/dependency-review-action@3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261 # v4.8.2 diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index c621602a10..b34da06f30 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -38,7 +38,7 @@ jobs: steps: - name: Prepare git run: git config --global core.autocrlf false - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1 diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 4b88ad5153..36f8ff733f 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -40,7 +40,7 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false From b9ebad1310df011b33cdd4f1a03bcacd78c8d26d Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 24 Jan 2026 06:38:28 -0500 Subject: [PATCH 07/83] Bump for next release --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dcf48b9343..a402106350 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ bcel org.apache.bcel 6.12.1 - 6.12.1 + 6.12.2 true RC1 6.12.0 From 563e7bc27f83859d7b681aba410361cc0e0df862 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Mon, 26 Jan 2026 09:36:45 -0500 Subject: [PATCH 08/83] Bump github/codeql-action from 4.31.10 to 4.31.11 --- .github/workflows/codeql-analysis.yml | 6 +++--- .github/workflows/scorecards-analysis.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index cc69f53340..17321f5dd1 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -57,7 +57,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 + uses: github/codeql-action/init@19b2f06db2b6f5108140aeb04014ef02b648f789 # v4.31.11 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -68,7 +68,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 + uses: github/codeql-action/autobuild@19b2f06db2b6f5108140aeb04014ef02b648f789 # v4.31.11 # â„šī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -82,4 +82,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 + uses: github/codeql-action/analyze@19b2f06db2b6f5108140aeb04014ef02b648f789 # v4.31.11 diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 36f8ff733f..5eba7ee299 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -64,6 +64,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 + uses: github/codeql-action/upload-sarif@19b2f06db2b6f5108140aeb04014ef02b648f789 # v4.31.11 with: sarif_file: results.sarif From 055b5863c03dec9d1f75a2035bf348a5825c583f Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Mon, 26 Jan 2026 15:52:19 -0500 Subject: [PATCH 09/83] Add license file headers --- src/examples/Mini/README | 19 +++++++++++++++++++ src/test/resources/Java4Example.java | 19 +++++++++++++++++++ src/test/resources/Java8Example.java | 19 +++++++++++++++++++ src/test/resources/Java8Example2.java | 19 +++++++++++++++++++ src/test/resources/StackMapExample.java | 19 +++++++++++++++++++ src/test/resources/StackMapExample2.java | 19 +++++++++++++++++++ src/test/resources/record/SimpleRecord.java | 19 +++++++++++++++++++ 7 files changed, 133 insertions(+) diff --git a/src/examples/Mini/README b/src/examples/Mini/README index db1320d1f5..69f6b3ec44 100644 --- a/src/examples/Mini/README +++ b/src/examples/Mini/README @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + Mini-Mini tutorial ------------------ diff --git a/src/test/resources/Java4Example.java b/src/test/resources/Java4Example.java index 3173b26c85..27f612dc08 100644 --- a/src/test/resources/Java4Example.java +++ b/src/test/resources/Java4Example.java @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + import java.io.IOException; import java.io.ObjectOutputStream; import java.io.OutputStream; diff --git a/src/test/resources/Java8Example.java b/src/test/resources/Java8Example.java index 07ba6dfbd9..48fde8a775 100644 --- a/src/test/resources/Java8Example.java +++ b/src/test/resources/Java8Example.java @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + import java.util.*; import java.util.stream.*; diff --git a/src/test/resources/Java8Example2.java b/src/test/resources/Java8Example2.java index eacdd8b09b..3c4a453d99 100644 --- a/src/test/resources/Java8Example2.java +++ b/src/test/resources/Java8Example2.java @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + import java.io.Serializable; import java.util.*; import java.util.stream.*; diff --git a/src/test/resources/StackMapExample.java b/src/test/resources/StackMapExample.java index f4fc316825..12e9c0dec1 100644 --- a/src/test/resources/StackMapExample.java +++ b/src/test/resources/StackMapExample.java @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + /* * Example to check if BCELifier generates the stack map table * so that the generated class passes the Java verifier checks. diff --git a/src/test/resources/StackMapExample2.java b/src/test/resources/StackMapExample2.java index 24598d3cee..8e6f70e95a 100644 --- a/src/test/resources/StackMapExample2.java +++ b/src/test/resources/StackMapExample2.java @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + /* * Another version of StackMapExample using 2 types of locals String and int * instead of just String. diff --git a/src/test/resources/record/SimpleRecord.java b/src/test/resources/record/SimpleRecord.java index 10316b07f8..c6f56c6790 100644 --- a/src/test/resources/record/SimpleRecord.java +++ b/src/test/resources/record/SimpleRecord.java @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + import javax.annotation.Nonnull; public record SimpleRecord(int aNumber,@Nonnull String aString) { From 3473c6d625194acd5e0e960403506c8637b10b48 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Wed, 28 Jan 2026 08:25:12 -0500 Subject: [PATCH 10/83] Update test to match InterruptedException guidelines --- src/test/java/org/apache/bcel/verifier/VerifyBadClassesTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/org/apache/bcel/verifier/VerifyBadClassesTest.java b/src/test/java/org/apache/bcel/verifier/VerifyBadClassesTest.java index 6d955d89aa..61d38dab4a 100644 --- a/src/test/java/org/apache/bcel/verifier/VerifyBadClassesTest.java +++ b/src/test/java/org/apache/bcel/verifier/VerifyBadClassesTest.java @@ -96,6 +96,7 @@ private String run(final List command) throws ExecuteException, IOExcept exitValue = resultHandler.getExitValue(); } catch (final InterruptedException e) { // Ignore exception, but watchdog.killedProcess() records that the process timed out. + Thread.currentThread().interrupt(); } final boolean timedOut = executor.isFailure(exitValue) && watchdog.killedProcess(); if (timedOut) { From b59383700441a464230d16b37d31c45d490dce0c Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Wed, 28 Jan 2026 15:44:51 -0500 Subject: [PATCH 11/83] Bump github/codeql-action from 4.31.11 to 4.32.0 --- .github/workflows/codeql-analysis.yml | 6 +++--- .github/workflows/scorecards-analysis.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 17321f5dd1..658b44aef9 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -57,7 +57,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@19b2f06db2b6f5108140aeb04014ef02b648f789 # v4.31.11 + uses: github/codeql-action/init@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -68,7 +68,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@19b2f06db2b6f5108140aeb04014ef02b648f789 # v4.31.11 + uses: github/codeql-action/autobuild@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0 # â„šī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -82,4 +82,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@19b2f06db2b6f5108140aeb04014ef02b648f789 # v4.31.11 + uses: github/codeql-action/analyze@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0 diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 5eba7ee299..98e267bc0d 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -64,6 +64,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@19b2f06db2b6f5108140aeb04014ef02b648f789 # v4.31.11 + uses: github/codeql-action/upload-sarif@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0 with: sarif_file: results.sarif From bfead0ab010b626ac0b92cfbf3dad26d631464cf Mon Sep 17 00:00:00 2001 From: nbauma109 Date: Sun, 1 Feb 2026 16:42:40 +0100 Subject: [PATCH 12/83] Fix constant pool module access test (#492) * Update test ConstantPoolModuleAccessTest for Java 26-ea * fix sun.util.resources.LocaleData$LocaleDataResourceBundleProvider --------- Co-authored-by: nbauma109 --- .../classfile/ConstantPoolModuleAccessTest.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/test/java/org/apache/bcel/classfile/ConstantPoolModuleAccessTest.java b/src/test/java/org/apache/bcel/classfile/ConstantPoolModuleAccessTest.java index 2c9b1cce51..f4a17aadda 100644 --- a/src/test/java/org/apache/bcel/classfile/ConstantPoolModuleAccessTest.java +++ b/src/test/java/org/apache/bcel/classfile/ConstantPoolModuleAccessTest.java @@ -179,8 +179,12 @@ public void visitModule(final Module obj) { expected.add("jdk.internal.logger.DefaultLoggerFinder"); expected.add("sun.text.spi.JavaTimeDateTimePatternProvider"); expected.add("sun.util.locale.provider.LocaleDataMetaInfo"); - expected.add("sun.util.resources.LocaleData$CommonResourceBundleProvider"); - expected.add("sun.util.resources.LocaleData$SupplementaryResourceBundleProvider"); + if (javaClass.getMajor() <= Const.MAJOR_25) { + expected.add("sun.util.resources.LocaleData$CommonResourceBundleProvider"); + expected.add("sun.util.resources.LocaleData$SupplementaryResourceBundleProvider"); + } else { + expected.add("sun.util.resources.LocaleData$LocaleDataResourceBundleProvider"); + } expected.add("sun.util.spi.CalendarProvider"); assertEquals(expected, Arrays.asList(usedClassNames)); } else if (urlPath.contains("/jdk.management.agent/module-info.class") && javaClass.getMajor() < Const.MAJOR_21) { @@ -261,8 +265,12 @@ public void visitModule(final Module obj) { assertEquals(expected, Arrays.asList(usedClassNames)); } else if (urlPath.contains("/jdk.jpackage/module-info.class")) { final List expected = new ArrayList<>(); - expected.add("jdk.jpackage.internal.Bundler"); - expected.add("jdk.jpackage.internal.Bundlers"); + if (javaClass.getMajor() <= Const.MAJOR_25) { + expected.add("jdk.jpackage.internal.Bundler"); + expected.add("jdk.jpackage.internal.Bundlers"); + } else { + expected.add("jdk.jpackage.internal.cli.CliBundlingEnvironment"); + } assertEquals(expected, Arrays.asList(usedClassNames)); } else if (urlPath.contains("/jdk.naming.ldap/module-info.class")) { final List expected = new ArrayList<>(); From b7993f9214b2882c77ad4140bb8c48badb0ed8a9 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sun, 1 Feb 2026 10:43:43 -0500 Subject: [PATCH 13/83] ix constant pool module access test on Java 26 and above #492. --- src/changes/changes.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index f136652dbe..30e4256623 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -61,6 +61,7 @@ The type attribute can be add,update,fix,remove. + Fix constant pool module access test on Java 26 and above #492. Bump org.apache.commons:commons-parent from 95 to 96. From 066181c7beaf04d2b95f8cc8977370992c66f297 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sun, 1 Feb 2026 15:54:22 -0500 Subject: [PATCH 14/83] Sort members --- .../java/org/apache/bcel/ExceptionConst.java | 20 ++++----- src/main/java/org/apache/bcel/util/Args.java | 26 ++++++------ .../bcel/classfile/JavaClassCyclicTest.java | 42 +++++++++---------- 3 files changed, 44 insertions(+), 44 deletions(-) diff --git a/src/main/java/org/apache/bcel/ExceptionConst.java b/src/main/java/org/apache/bcel/ExceptionConst.java index b9b6232fe6..7451286ca2 100644 --- a/src/main/java/org/apache/bcel/ExceptionConst.java +++ b/src/main/java/org/apache/bcel/ExceptionConst.java @@ -49,10 +49,6 @@ public enum EXCS { EXCS_ARRAY_EXCEPTION, } - /** Private constructor - utility class. */ - public ExceptionConst() { - } - /** * The mother of all exceptions */ @@ -68,13 +64,13 @@ public ExceptionConst() { */ public static final Class LINKING_EXCEPTION = LinkageError.class; + /** Exception class: ClassCircularityError. */ + public static final Class CLASS_CIRCULARITY_ERROR = ClassCircularityError.class; + /** * Linking Exceptions. */ - /** Exception class: ClassCircularityError. */ - public static final Class CLASS_CIRCULARITY_ERROR = ClassCircularityError.class; - /** Exception class: ClassFormatError. */ public static final Class CLASS_FORMAT_ERROR = ClassFormatError.class; @@ -110,13 +106,13 @@ public ExceptionConst() { /* UnsupportedClassVersionError is new in JDK 1.2 */ // public static final Class UnsupportedClassVersionError = UnsupportedClassVersionError.class; + /** Exception class: NullPointerException. */ + public static final Class NULL_POINTER_EXCEPTION = NullPointerException.class; + /** * Run-Time Exceptions. */ - /** Exception class: NullPointerException. */ - public static final Class NULL_POINTER_EXCEPTION = NullPointerException.class; - /** Exception class: ArrayIndexOutOfBoundsException. */ public static final Class ARRAY_INDEX_OUT_OF_BOUNDS_EXCEPTION = ArrayIndexOutOfBoundsException.class; @@ -182,4 +178,8 @@ private static Class[] mergeExceptions(final Class[] input, final Class return ArrayUtils.addAll(input, extraClasses); } + /** Private constructor - utility class. */ + public ExceptionConst() { + } + } diff --git a/src/main/java/org/apache/bcel/util/Args.java b/src/main/java/org/apache/bcel/util/Args.java index f0647baa07..aa47024416 100644 --- a/src/main/java/org/apache/bcel/util/Args.java +++ b/src/main/java/org/apache/bcel/util/Args.java @@ -114,19 +114,6 @@ public static int requireU2(final int value, final String message) { return requireU2(value, 0, message); } - /** - * Requires a u4 value of at least {@code min}. - * - * @param value The value to test. - * @param min The minimum required value. - * @param message The message prefix. - * @return The value to test. - */ - public static int requireU4(final int value, final int min, final String message) { - // Should really be 2^32-1, instead 2^21-1. - return requireU4(value, min, Integer.MAX_VALUE, message); - } - /** * Requires a u4 value of at least {@code min} and not above {@code max}. * @@ -150,6 +137,19 @@ public static int requireU4(final int value, final int min, final int max, final return value; } + /** + * Requires a u4 value of at least {@code min}. + * + * @param value The value to test. + * @param min The minimum required value. + * @param message The message prefix. + * @return The value to test. + */ + public static int requireU4(final int value, final int min, final String message) { + // Should really be 2^32-1, instead 2^21-1. + return requireU4(value, min, Integer.MAX_VALUE, message); + } + /** * Requires a u4 value. * diff --git a/src/test/java/org/apache/bcel/classfile/JavaClassCyclicTest.java b/src/test/java/org/apache/bcel/classfile/JavaClassCyclicTest.java index ac9e554d2f..93b2ac11f2 100644 --- a/src/test/java/org/apache/bcel/classfile/JavaClassCyclicTest.java +++ b/src/test/java/org/apache/bcel/classfile/JavaClassCyclicTest.java @@ -103,6 +103,27 @@ void tearDown() { } } + void test(final Callable callable) throws Exception { + final ExecutorService executor = Executors.newSingleThreadExecutor(); + try { + final Future future = executor.submit(callable); + // Without fix: will timeout (infinite loop) + // With fix: throws ClassCircularityError immediately + future.get(3, TimeUnit.SECONDS); + fail("Should have thrown ClassCircularityError for cyclic hierarchy"); + } catch (final TimeoutException e) { + fail("Timeout: infinite loop vulnerability detected"); + } catch (final ExecutionException e) { + if (e.getCause() instanceof ClassFormatException) { + // Expected with fix - test passes + return; + } + throw e; + } finally { + executor.shutdownNow(); + } + } + /** * Tests that getAllInterfaces() handles cyclic interface hierarchies gracefully. BUG: Without fix, getAllInterfaces() has no visited-node check before * enqueueing, causing infinite queue growth and eventual heap exhaustion (OutOfMemoryError). FIXED: With the fix, already-visited nodes are skipped, @@ -141,25 +162,4 @@ void testGetAllInterfacesCyclic() throws Exception { void testGetSuperClassesCyclic() throws Exception { test(cyclicClassA::getSuperClasses); } - - void test(final Callable callable) throws Exception { - final ExecutorService executor = Executors.newSingleThreadExecutor(); - try { - final Future future = executor.submit(callable); - // Without fix: will timeout (infinite loop) - // With fix: throws ClassCircularityError immediately - future.get(3, TimeUnit.SECONDS); - fail("Should have thrown ClassCircularityError for cyclic hierarchy"); - } catch (final TimeoutException e) { - fail("Timeout: infinite loop vulnerability detected"); - } catch (final ExecutionException e) { - if (e.getCause() instanceof ClassFormatException) { - // Expected with fix - test passes - return; - } - throw e; - } finally { - executor.shutdownNow(); - } - } } From dd744dd8e313318d0a97aaf02af8efb1104f5fcb Mon Sep 17 00:00:00 2001 From: nbauma109 Date: Sun, 1 Feb 2026 21:54:37 +0100 Subject: [PATCH 15/83] Add support for permitted subclasses (#493) * Add support for permitted subclasses * fix checkstyle issues * fix checksyle issues * Added javadoc descriptions * added javadoc * Javadoc Updated documentation for ATTR_PERMITTED_SUBCLASSES constant. --------- Co-authored-by: nbauma109 Co-authored-by: Gary Gregory --- src/main/java/org/apache/bcel/Const.java | 12 +- .../org/apache/bcel/classfile/Attribute.java | 2 + .../bcel/classfile/DescendingVisitor.java | 8 + .../apache/bcel/classfile/EmptyVisitor.java | 5 + .../bcel/classfile/PermittedSubclasses.java | 177 ++++++++++++++++++ .../org/apache/bcel/classfile/Visitor.java | 10 + .../statics/StringRepresentation.java | 11 ++ .../classfile/PermittedSubclassesTest.java | 72 +++++++ src/test/resources/sealed/SealedDemo.java | 43 +++++ .../sealed/sealed-demo-jdk21.0.8.jar | Bin 0 -> 2788 bytes 10 files changed, 338 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/apache/bcel/classfile/PermittedSubclasses.java create mode 100644 src/test/java/org/apache/bcel/classfile/PermittedSubclassesTest.java create mode 100644 src/test/resources/sealed/SealedDemo.java create mode 100644 src/test/resources/sealed/sealed-demo-jdk21.0.8.jar diff --git a/src/main/java/org/apache/bcel/Const.java b/src/main/java/org/apache/bcel/Const.java index 24445b2e39..60336ef0e5 100644 --- a/src/main/java/org/apache/bcel/Const.java +++ b/src/main/java/org/apache/bcel/Const.java @@ -3168,13 +3168,21 @@ public final class Const { /** Attribute constant for Record. */ public static final byte ATTR_RECORD = 27; + /** + * Attribute constant for PermittedSubclasses. + * + * @since 6.13.0 + */ + public static final byte ATTR_PERMITTED_SUBCLASSES = 28; + /** Count of known attributes. */ - public static final short KNOWN_ATTRIBUTES = 28; // count of attributes + public static final short KNOWN_ATTRIBUTES = 29; // count of attributes private static final String[] ATTRIBUTE_NAMES = { "SourceFile", "ConstantValue", "Code", "Exceptions", "LineNumberTable", "LocalVariableTable", "InnerClasses", "Synthetic", "Deprecated", "PMGClass", "Signature", "StackMap", "RuntimeVisibleAnnotations", "RuntimeInvisibleAnnotations", "RuntimeVisibleParameterAnnotations", "RuntimeInvisibleParameterAnnotations", "AnnotationDefault", "LocalVariableTypeTable", "EnclosingMethod", - "StackMapTable", "BootstrapMethods", "MethodParameters", "Module", "ModulePackages", "ModuleMainClass", "NestHost", "NestMembers", "Record" }; + "StackMapTable", "BootstrapMethods", "MethodParameters", "Module", "ModulePackages", "ModuleMainClass", "NestHost", "NestMembers", "Record", + "PermittedSubclasses" }; /** * Constants used in the StackMap attribute. diff --git a/src/main/java/org/apache/bcel/classfile/Attribute.java b/src/main/java/org/apache/bcel/classfile/Attribute.java index d78c5f562b..90246fa422 100644 --- a/src/main/java/org/apache/bcel/classfile/Attribute.java +++ b/src/main/java/org/apache/bcel/classfile/Attribute.java @@ -199,6 +199,8 @@ public static Attribute readAttribute(final DataInput dataInput, final ConstantP return new NestMembers(nameIndex, length, dataInput, constantPool); case Const.ATTR_RECORD: return new Record(nameIndex, length, dataInput, constantPool); + case Const.ATTR_PERMITTED_SUBCLASSES: + return new PermittedSubclasses(nameIndex, length, dataInput, constantPool); default: // Never reached throw new IllegalStateException("Unrecognized attribute type tag parsed: " + tag); diff --git a/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java b/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java index 45180804d9..37f72df782 100644 --- a/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java +++ b/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java @@ -496,6 +496,14 @@ public void visitNestMembers(final NestMembers obj) { stack.pop(); } + /** @since 6.13.0 */ + @Override + public void visitPermittedSubclasses(final PermittedSubclasses obj) { + stack.push(obj); + obj.accept(visitor); + stack.pop(); + } + /** * @since 6.0 */ diff --git a/src/main/java/org/apache/bcel/classfile/EmptyVisitor.java b/src/main/java/org/apache/bcel/classfile/EmptyVisitor.java index 7a16e9ba1e..7a5165bdaf 100644 --- a/src/main/java/org/apache/bcel/classfile/EmptyVisitor.java +++ b/src/main/java/org/apache/bcel/classfile/EmptyVisitor.java @@ -284,6 +284,11 @@ public void visitNestHost(final NestHost obj) { public void visitNestMembers(final NestMembers obj) { } + /** @since 6.13.0 */ + @Override + public void visitPermittedSubclasses(final PermittedSubclasses obj) { + } + /** * @since 6.0 */ diff --git a/src/main/java/org/apache/bcel/classfile/PermittedSubclasses.java b/src/main/java/org/apache/bcel/classfile/PermittedSubclasses.java new file mode 100644 index 0000000000..b5e48f8c65 --- /dev/null +++ b/src/main/java/org/apache/bcel/classfile/PermittedSubclasses.java @@ -0,0 +1,177 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.bcel.classfile; + +import java.io.DataInput; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.Arrays; + +import org.apache.bcel.Const; +import org.apache.bcel.util.Args; +import org.apache.commons.lang3.ArrayUtils; + +/** + * This class is derived from Attribute and records the classes and interfaces that are permitted to extend or + * implement the current class or interface. There may be at most one PermittedSubclasses attribute in a ClassFile + * structure. + * + * @see Attribute + * @since 6.13.0 + */ +public final class PermittedSubclasses extends Attribute { + + private int[] classes; + + /** + * Constructs object from input stream. + * + * @param nameIndex Index in constant pool. + * @param length Content length in bytes. + * @param dataInput Input stream. + * @param constantPool Array of constants. + * @throws IOException if an I/O error occurs. + */ + PermittedSubclasses(final int nameIndex, final int length, final DataInput dataInput, final ConstantPool constantPool) throws IOException { + this(nameIndex, length, (int[]) null, constantPool); + classes = ClassParser.readU2U2Table(dataInput); + } + + /** + * Constructs object from table of class indices in constant pool. + * + * @param nameIndex Index in constant pool. + * @param length Content length in bytes. + * @param classes Table of indices in constant pool. + * @param constantPool Array of constants. + */ + public PermittedSubclasses(final int nameIndex, final int length, final int[] classes, final ConstantPool constantPool) { + super(Const.ATTR_PERMITTED_SUBCLASSES, nameIndex, length, constantPool); + this.classes = ArrayUtils.nullToEmpty(classes); + Args.requireU2(this.classes.length, "classes.length"); + } + + /** + * Initialize from another object. Note that both objects use the same references (shallow copy). Use copy() for a + * physical copy. + * + * @param c Source to copy. + */ + public PermittedSubclasses(final PermittedSubclasses c) { + this(c.getNameIndex(), c.getLength(), c.getClasses(), c.getConstantPool()); + } + + /** + * Called by objects that are traversing the nodes of the tree implicitly defined by the contents of a Java class. + * I.e., the hierarchy of methods, fields, attributes, etc. spawns a tree of objects. + * + * @param v Visitor object. + */ + @Override + public void accept(final Visitor v) { + v.visitPermittedSubclasses(this); + } + + /** + * Creates a deep clone of this object given constant pool. + * + * @return deep copy of this attribute. + */ + @Override + public Attribute copy(final ConstantPool constantPool) { + final PermittedSubclasses c = (PermittedSubclasses) clone(); + if (classes.length > 0) { + c.classes = classes.clone(); + } + c.setConstantPool(constantPool); + return c; + } + + /** + * Dumps PermittedSubclasses attribute to file stream in binary format. + * + * @param file Output file stream. + * @throws IOException if an I/O error occurs. + */ + @Override + public void dump(final DataOutputStream file) throws IOException { + super.dump(file); + file.writeShort(classes.length); + for (final int index : classes) { + file.writeShort(index); + } + } + + /** + * Gets the class indices in constant pool. + * + * @return array of indices into constant pool of class names. + */ + public int[] getClasses() { + return classes; + } + + /** + * Gets permitted class names. + * + * @return string array of class names. + */ + public String[] getClassNames() { + final String[] names = new String[classes.length]; + Arrays.setAll(names, i -> Utility.pathToPackage(super.getConstantPool().getConstantString(classes[i], Const.CONSTANT_Class))); + return names; + } + + /** + * Gets the number of classes. + * + * @return Length of classes table. + */ + public int getNumberClasses() { + return classes.length; + } + + /** + * Sets class indices. + * + * @param classes the list of class indexes Also redefines number_of_classes according to table length. + */ + public void setClasses(final int[] classes) { + this.classes = ArrayUtils.nullToEmpty(classes); + } + + /** + * String representation of PermittedSubclasses (for debugging purposes). + * + * @return String representation, that is, a list of permitted subclasses. + */ + @Override + public String toString() { + final StringBuilder buf = new StringBuilder(); + buf.append("PermittedSubclasses("); + buf.append(classes.length); + buf.append("):\n"); + for (final int index : classes) { + final String className = super.getConstantPool().getConstantString(index, Const.CONSTANT_Class); + buf.append(" ").append(Utility.compactClassName(className, false)).append("\n"); + } + return buf.substring(0, buf.length() - 1); // remove the last newline + } +} diff --git a/src/main/java/org/apache/bcel/classfile/Visitor.java b/src/main/java/org/apache/bcel/classfile/Visitor.java index 86fa8b572e..5df8e24332 100644 --- a/src/main/java/org/apache/bcel/classfile/Visitor.java +++ b/src/main/java/org/apache/bcel/classfile/Visitor.java @@ -411,6 +411,16 @@ default void visitNestMembers(final NestMembers obj) { // empty } + /** + * Visits a PermittedSubclasses attribute. + * + * @param obj the attribute. + * @since 6.13.0 + */ + default void visitPermittedSubclasses(final PermittedSubclasses obj) { + // empty + } + /** * Visits a ParameterAnnotations attribute. * diff --git a/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java b/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java index 88b0d53cda..e9329f909c 100644 --- a/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java +++ b/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java @@ -61,6 +61,7 @@ import org.apache.bcel.classfile.Node; import org.apache.bcel.classfile.ParameterAnnotationEntry; import org.apache.bcel.classfile.ParameterAnnotations; +import org.apache.bcel.classfile.PermittedSubclasses; import org.apache.bcel.classfile.Record; import org.apache.bcel.classfile.RecordComponentInfo; import org.apache.bcel.classfile.Signature; @@ -385,6 +386,16 @@ public void visitNestMembers(final NestMembers obj) { tostring = toString(obj); } + /** + * Visits PermittedSubclasses attribute. + * + * @since 6.13.0 + */ + @Override + public void visitPermittedSubclasses(final PermittedSubclasses obj) { + tostring = toString(obj); + } + /** * @since 6.0 */ diff --git a/src/test/java/org/apache/bcel/classfile/PermittedSubclassesTest.java b/src/test/java/org/apache/bcel/classfile/PermittedSubclassesTest.java new file mode 100644 index 0000000000..503349caf1 --- /dev/null +++ b/src/test/java/org/apache/bcel/classfile/PermittedSubclassesTest.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.bcel.classfile; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.List; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + +import org.apache.bcel.AbstractTest; +import org.apache.bcel.verifier.statics.StringRepresentation; +import org.junit.jupiter.api.Test; + +class PermittedSubclassesTest extends AbstractTest { + + private static final String SEALED_JAR_PATH = "src/test/resources/sealed/sealed-demo-jdk21.0.8.jar"; + + private static final String SHAPE_CLASS_ENTRY = "org/jd/core/v1/SealedDemo$Shape.class"; + + private JavaClass parseJarClass(final String entryName) throws IOException { + try (JarFile jar = new JarFile(SEALED_JAR_PATH)) { + final JarEntry entry = jar.getJarEntry(entryName); + assertNotNull(entry, "Missing jar entry: " + entryName); + try (InputStream inputStream = jar.getInputStream(entry)) { + return new ClassParser(inputStream, entryName).parse(); + } + } + } + + @Test + void readsPermittedSubclassesAttribute() throws IOException { + final JavaClass clazz = parseJarClass(SHAPE_CLASS_ENTRY); + final Attribute[] attributes = findAttribute("PermittedSubclasses", clazz); + assertEquals(1, attributes.length, "Expected one PermittedSubclasses attribute"); + final PermittedSubclasses permittedSubclasses = (PermittedSubclasses) attributes[0]; + final List classNames = Arrays.asList(permittedSubclasses.getClassNames()); + assertEquals(2, classNames.size(), "Expected two permitted subclasses"); + assertTrue(classNames.contains("org.jd.core.v1.SealedDemo$Circle"), "Missing permitted subclass Circle"); + assertTrue(classNames.contains("org.jd.core.v1.SealedDemo$Rectangle"), "Missing permitted subclass Rectangle"); + } + + @Test + void stringRepresentationHandlesPermittedSubclasses() throws IOException { + final JavaClass clazz = parseJarClass(SHAPE_CLASS_ENTRY); + final Attribute[] attributes = findAttribute("PermittedSubclasses", clazz); + final PermittedSubclasses permittedSubclasses = (PermittedSubclasses) attributes[0]; + assertEquals(permittedSubclasses.toString(), new StringRepresentation(permittedSubclasses).toString()); + } +} diff --git a/src/test/resources/sealed/SealedDemo.java b/src/test/resources/sealed/SealedDemo.java new file mode 100644 index 0000000000..cda1f71b9f --- /dev/null +++ b/src/test/resources/sealed/SealedDemo.java @@ -0,0 +1,43 @@ +package org.jd.core.v1; + +public class SealedDemo { + + sealed interface Shape permits Circle, Rectangle { + double area(); + } + + static final class Circle implements Shape { + private final double radius; + + Circle(double radius) { + this.radius = radius; + } + + @Override + public double area() { + return Math.PI * radius * radius; + } + } + + static non-sealed class Rectangle implements Shape { + private final double width; + private final double height; + + Rectangle(double width, double height) { + this.width = width; + this.height = height; + } + + @Override + public double area() { + return width * height; + } + } + + double sealedSwitch(Shape shape) { + return switch (shape) { + case Circle circle -> circle.area(); + case Rectangle rectangle -> rectangle.area(); + }; + } +} diff --git a/src/test/resources/sealed/sealed-demo-jdk21.0.8.jar b/src/test/resources/sealed/sealed-demo-jdk21.0.8.jar new file mode 100644 index 0000000000000000000000000000000000000000..46d49ef985cb38e3a989d3c1665d65c81e90cd59 GIT binary patch literal 2788 zcma)82{e>#8y@>Mbqu4XKfW(M`!X|V8j3P@#)u*NU}Eg+)Qo&tz6L|~B~zwBLks;W zV@)ZBvXn?fiIT`t$&js-Z|3j+;`E=K|9a1R&hwu4dG7l@_jT^;x$Mvag5m&xC;;GX zjPd|%f*3#$fH8AKX<6Bt!@fNL0PMJ1!2nTF(f`>B<{ta86@#+1GBY!MhQ|sRjbVX8&33x1^L2!!ifYJSsUg+z=sfgO$njl ziY9?XpAZ7nCj@`&SW*rS-3kX&U%f9K2^tw@ESx;=U?<{sM;dJJWQw1;-!@wfz1clv zJ+xYHY9|O=<}MrPPmX_hGa=Kg?X*oXyFW)KhuQ{5j7JU6-;5{V zmZ&YKAvFSnQKcr-@isqX8n9|VP+A(kE9g{X6*cyu*u~0Oaz))}(bS7EWtZSvPdI`} z=$BCz@&eVQaR{*q##jirAV+Y1d0=UPk*Q#^818wpIb7`QP$lxVFCA6f81r!P{{5-T zD!$3fW0R>B&96PrqLEAO$>jl~SmDKi`03d^8k&8CwJ)J}yZIB4N|;UO`h)s63J{&0 z3hA~9@F(_!bL)BC-bJf-voTr8%nLR(A7?Kfaec}i+_`)I8N5Bewl8-`?m2am;p0g82*iT!e3}jTbE&~cVvv%YTF;5 zf@_D@BM>BaM}q~l{#zwhnIqc8sg6R&Dwk!7J6SsHaUawv=JCof5gSY70{{Z~x8hZ8 zOJ1=ApX2y2|9_~>uzz9QY9wjcR};9q^y!~X{ePOh5J?z4uaJTQr&97MSue<&JPOd*p#z`q80ugvrZ3$ujNk_?F{;U4 zWGtm&GCA(nVfen_3I%c1xA^A}3dSX4tf=qf{z6q+_efpe8HH?|v!_MyB+!p;Bt=|~ zLoSMrtFNSF&6V5uy1iKvGV0gJLC2+^r+gW5-2;!ygt(6x7F0LPYKVkJ3!)BbgZ&U6L-2O zc70Pbsyy6c*Oq+BQmV5R9Dks+zE$c)F5m4Q)-}dNyn_>zQ}7zrE`w)OqahxAmp)6B z-Q}dm+*wM0Z84(9#Jgr5lby7`$8T=OR(z$YosB=&viE|nlF5DtW8q2Nb8;Q;;huL~ z7gd~2w9Gwit*4ZG(Gc%;CLp{KF3zM!)z|lHl+B#hY4kLM=|7mPa$OPRQ4BU}^GfGZ z9KR*SN?TIw5P*;P@8puQF}AHnz@%a{-O7ZSL=g-zq6mdRA_e=!*}{_g?BhrCP5XfK zi-xii+nbq^wi;}8&vdQz#?|*9i+f;zWj&`UPAN}@L^e0kjC0g&p zS`IvVqEeGiT?j$cclRR(#lIw`g>?mju1R-mzplFd4pWxYBqV$Ah)nXdQ{m%R@2yhm zjT6~k;lPg6fQ)fqtR+9_OrxP9BqS!4x#Ch{m>#i*Q_$669|2LxMQgK9J7Q(!SA}?e zgob}@Smbsoj@!#$OW^NY_3^v*WjH>^N~6Gr7@EBNwID@Js*<-p6|rWM z@s-$hpN6sm3et|WdP6X8*VE}%UqfdUj6*>+r3v!y?_NzAE1C@=P^S*fNt6o- z;eaD5Dnhm|vpj=J#%5@{%vGQd(72<|^dV zirlNNb#_rIPfJFrsuTAz^E+nh{8Hd0DQ1roJcSR{3oYO4RGadL9NgV#+@;36w=93z z`!9L&Wu#fRn-cqR(IAH9GV)w<>8fw%zv&wjbp`;kV%HX-Bv?g35iamW@A zlym)0s-zM;<*kU0eDtVbDpPnCK~S~mICx9B)l#6D^{+%RJ)K>xqYW_-w>0QrokZgp z&Vx;&uIQ_(mz5l;MQ~isUK={xt>U{2UZW}At|eNo9r#Q;-1YjKp+>A^*mHIL4=9`D z$lX!k;e46>CRj#)77l@nwJ1Xz$zp-07N=YK9^r!B%WAU^-*nYU%<{v4}aQAg4Ge0k0X6_<(?ytBP@hm5JPsAmb z#>7>9AIZod#C$M+-Xm%oYN&j#E?r<+pmO;oM=}G|Gt~;u$e{~JK{)*BV?lCjGI8^Q zwDy5RM$t}lk202jFOfO%PXCFniD9`ZJ56^HRQN7kZnR~R154>%@%a{eya~1Y!)HH! zR`bE@jSEEdZ@4q4qgT}Yw_9oUx)H7OVrg`|l$x8N5;-uv*U}?18tNlEs5&WFaZ+*x zdf>_fs&U03RH!q`Bd2~D6!+v!v;Z~dFZzqg}JFVtqm{rCRj%sU{=eLA>eDJ;hO`WuH> BQsDpq literal 0 HcmV?d00001 From 952c64b594d8bb03622383bc7340f2b2f9a84c2e Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sun, 1 Feb 2026 15:56:34 -0500 Subject: [PATCH 16/83] Add support for permitted subclasses #493 Sort members --- src/changes/changes.xml | 1 + .../bcel/classfile/DescendingVisitor.java | 16 +++++++-------- .../apache/bcel/classfile/EmptyVisitor.java | 10 +++++----- .../org/apache/bcel/classfile/Visitor.java | 20 +++++++++---------- .../statics/StringRepresentation.java | 14 ++++++------- 5 files changed, 31 insertions(+), 30 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 30e4256623..b6a69423b5 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -62,6 +62,7 @@ The type attribute can be add,update,fix,remove. Fix constant pool module access test on Java 26 and above #492. + Add support for permitted subclasses #493. Bump org.apache.commons:commons-parent from 95 to 96. diff --git a/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java b/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java index 37f72df782..816bf091d2 100644 --- a/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java +++ b/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java @@ -496,14 +496,6 @@ public void visitNestMembers(final NestMembers obj) { stack.pop(); } - /** @since 6.13.0 */ - @Override - public void visitPermittedSubclasses(final PermittedSubclasses obj) { - stack.push(obj); - obj.accept(visitor); - stack.pop(); - } - /** * @since 6.0 */ @@ -522,6 +514,14 @@ public void visitParameterAnnotationEntry(final ParameterAnnotationEntry obj) { stack.pop(); } + /** @since 6.13.0 */ + @Override + public void visitPermittedSubclasses(final PermittedSubclasses obj) { + stack.push(obj); + obj.accept(visitor); + stack.pop(); + } + @Override public void visitRecord(final Record record) { stack.push(record); diff --git a/src/main/java/org/apache/bcel/classfile/EmptyVisitor.java b/src/main/java/org/apache/bcel/classfile/EmptyVisitor.java index 7a5165bdaf..d8f315cfaf 100644 --- a/src/main/java/org/apache/bcel/classfile/EmptyVisitor.java +++ b/src/main/java/org/apache/bcel/classfile/EmptyVisitor.java @@ -284,11 +284,6 @@ public void visitNestHost(final NestHost obj) { public void visitNestMembers(final NestMembers obj) { } - /** @since 6.13.0 */ - @Override - public void visitPermittedSubclasses(final PermittedSubclasses obj) { - } - /** * @since 6.0 */ @@ -303,6 +298,11 @@ public void visitParameterAnnotation(final ParameterAnnotations obj) { public void visitParameterAnnotationEntry(final ParameterAnnotationEntry parameterAnnotationEntry) { } + /** @since 6.13.0 */ + @Override + public void visitPermittedSubclasses(final PermittedSubclasses obj) { + } + @Override public void visitSignature(final Signature obj) { } diff --git a/src/main/java/org/apache/bcel/classfile/Visitor.java b/src/main/java/org/apache/bcel/classfile/Visitor.java index 5df8e24332..7ea0fa6569 100644 --- a/src/main/java/org/apache/bcel/classfile/Visitor.java +++ b/src/main/java/org/apache/bcel/classfile/Visitor.java @@ -411,16 +411,6 @@ default void visitNestMembers(final NestMembers obj) { // empty } - /** - * Visits a PermittedSubclasses attribute. - * - * @param obj the attribute. - * @since 6.13.0 - */ - default void visitPermittedSubclasses(final PermittedSubclasses obj) { - // empty - } - /** * Visits a ParameterAnnotations attribute. * @@ -437,6 +427,16 @@ default void visitPermittedSubclasses(final PermittedSubclasses obj) { */ void visitParameterAnnotationEntry(ParameterAnnotationEntry obj); + /** + * Visits a PermittedSubclasses attribute. + * + * @param obj the attribute. + * @since 6.13.0 + */ + default void visitPermittedSubclasses(final PermittedSubclasses obj) { + // empty + } + /** * Visits a {@link Record} object. * diff --git a/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java b/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java index e9329f909c..0ba7801d66 100644 --- a/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java +++ b/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java @@ -387,12 +387,10 @@ public void visitNestMembers(final NestMembers obj) { } /** - * Visits PermittedSubclasses attribute. - * - * @since 6.13.0 + * @since 6.0 */ @Override - public void visitPermittedSubclasses(final PermittedSubclasses obj) { + public void visitParameterAnnotation(final ParameterAnnotations obj) { tostring = toString(obj); } @@ -400,15 +398,17 @@ public void visitPermittedSubclasses(final PermittedSubclasses obj) { * @since 6.0 */ @Override - public void visitParameterAnnotation(final ParameterAnnotations obj) { + public void visitParameterAnnotationEntry(final ParameterAnnotationEntry obj) { tostring = toString(obj); } /** - * @since 6.0 + * Visits PermittedSubclasses attribute. + * + * @since 6.13.0 */ @Override - public void visitParameterAnnotationEntry(final ParameterAnnotationEntry obj) { + public void visitPermittedSubclasses(final PermittedSubclasses obj) { tostring = toString(obj); } From a67d64ae04ebbdc11418f1a052d024dec97528e1 Mon Sep 17 00:00:00 2001 From: nbauma109 Date: Sun, 1 Feb 2026 21:57:10 +0100 Subject: [PATCH 17/83] Add getAttribute(final byte tag) to RecordComponentInfo (#494) * Add getAttribute(final byte tag) to RecordComponentInfo * fix checkstyle issues * Make a separate record test testRecordComponentGetAttribute * Javadoc --------- Co-authored-by: nbauma109 Co-authored-by: Gary Gregory --- .../bcel/classfile/RecordComponentInfo.java | 19 +++++++++++++++++++ .../org/apache/bcel/classfile/RecordTest.java | 12 ++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/main/java/org/apache/bcel/classfile/RecordComponentInfo.java b/src/main/java/org/apache/bcel/classfile/RecordComponentInfo.java index 2aabce87e2..4a1c349aa0 100644 --- a/src/main/java/org/apache/bcel/classfile/RecordComponentInfo.java +++ b/src/main/java/org/apache/bcel/classfile/RecordComponentInfo.java @@ -77,6 +77,25 @@ public void dump(final DataOutputStream file) throws IOException { } } + /** + * Gets the attribute for the given tag if present, or null if absent. + * + * @param the attribute type. + * @param tag the attribute tag. + * @return Attribute for given tag, null if not found. + * Refer to {@link org.apache.bcel.Const#ATTR_UNKNOWN} constants named ATTR_* for possible values. + * @since 6.13.0 + */ + @SuppressWarnings("unchecked") + public final T getAttribute(final byte tag) { + for (final Attribute attribute : getAttributes()) { + if (attribute.getTag() == tag) { + return (T) attribute; + } + } + return null; + } + /** * Gets all attributes. * diff --git a/src/test/java/org/apache/bcel/classfile/RecordTest.java b/src/test/java/org/apache/bcel/classfile/RecordTest.java index 9588e4e761..afdd7fe32e 100644 --- a/src/test/java/org/apache/bcel/classfile/RecordTest.java +++ b/src/test/java/org/apache/bcel/classfile/RecordTest.java @@ -21,12 +21,14 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.File; import java.io.IOException; import org.apache.bcel.AbstractTest; +import org.apache.bcel.Const; import org.apache.bcel.util.SyntheticRepository; import org.apache.bcel.visitors.CountingVisitor; import org.junit.jupiter.api.Test; @@ -118,4 +120,14 @@ void testRecordToString() throws ClassNotFoundException, ClassFormatException, I assertEquals("RecordComponentInfo(aNumber,I,0):", firstComponent.toString()); } + @Test + void testRecordComponentGetAttribute() throws ClassFormatException, IOException { + final JavaClass clazz = new ClassParser("src/test/resources/record/SimpleRecord.class").parse(); + final Record recordAttribute = (Record) findAttribute("Record", clazz)[0]; + final RecordComponentInfo secondComponent = recordAttribute.getComponents()[1]; + final RuntimeVisibleAnnotations ann = secondComponent.getAttribute(Const.ATTR_RUNTIME_VISIBLE_ANNOTATIONS); + assertEquals("RuntimeVisibleAnnotations:\n" + + " @Ljavax/annotation/Nonnull;", ann.toString()); + assertNull(secondComponent.getAttribute(Const.ATTR_RUNTIME_INVISIBLE_ANNOTATIONS)); + } } From b06de6e36ea76f550d34083ccb280a5ad7b8f2d5 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sun, 1 Feb 2026 15:58:54 -0500 Subject: [PATCH 18/83] Add RecordComponentInfo.getAttribute(byte tag)#494. --- src/changes/changes.xml | 1 + .../org/apache/bcel/classfile/RecordTest.java | 22 +++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index b6a69423b5..e6c15c9ded 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -63,6 +63,7 @@ The type attribute can be add,update,fix,remove. Fix constant pool module access test on Java 26 and above #492. Add support for permitted subclasses #493. + Add RecordComponentInfo.getAttribute(byte tag)#494. Bump org.apache.commons:commons-parent from 95 to 96. diff --git a/src/test/java/org/apache/bcel/classfile/RecordTest.java b/src/test/java/org/apache/bcel/classfile/RecordTest.java index afdd7fe32e..aa4c30aec5 100644 --- a/src/test/java/org/apache/bcel/classfile/RecordTest.java +++ b/src/test/java/org/apache/bcel/classfile/RecordTest.java @@ -92,6 +92,17 @@ void testRecordClassSaysItIs() throws ClassNotFoundException, ClassFormatExcepti assertFalse(simpleClazz.isRecord(), "Expected SimpleClass class to say it was not a record - but it didn't !"); } + @Test + void testRecordComponentGetAttribute() throws ClassFormatException, IOException { + final JavaClass clazz = new ClassParser("src/test/resources/record/SimpleRecord.class").parse(); + final Record recordAttribute = (Record) findAttribute("Record", clazz)[0]; + final RecordComponentInfo secondComponent = recordAttribute.getComponents()[1]; + final RuntimeVisibleAnnotations ann = secondComponent.getAttribute(Const.ATTR_RUNTIME_VISIBLE_ANNOTATIONS); + assertEquals("RuntimeVisibleAnnotations:\n" + + " @Ljavax/annotation/Nonnull;", ann.toString()); + assertNull(secondComponent.getAttribute(Const.ATTR_RUNTIME_INVISIBLE_ANNOTATIONS)); + } + /** * A simple record with two simple fields, an integer and a String field, should * show its content in its string representation. @@ -119,15 +130,4 @@ void testRecordToString() throws ClassNotFoundException, ClassFormatException, I assertEquals(recordAttribute.getConstantPool(), firstComponent.getConstantPool()); assertEquals("RecordComponentInfo(aNumber,I,0):", firstComponent.toString()); } - - @Test - void testRecordComponentGetAttribute() throws ClassFormatException, IOException { - final JavaClass clazz = new ClassParser("src/test/resources/record/SimpleRecord.class").parse(); - final Record recordAttribute = (Record) findAttribute("Record", clazz)[0]; - final RecordComponentInfo secondComponent = recordAttribute.getComponents()[1]; - final RuntimeVisibleAnnotations ann = secondComponent.getAttribute(Const.ATTR_RUNTIME_VISIBLE_ANNOTATIONS); - assertEquals("RuntimeVisibleAnnotations:\n" - + " @Ljavax/annotation/Nonnull;", ann.toString()); - assertNull(secondComponent.getAttribute(Const.ATTR_RUNTIME_INVISIBLE_ANNOTATIONS)); - } } From 7c273073beff91b2d1d15a27324b620bdd5f2b80 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sun, 1 Feb 2026 16:17:46 -0500 Subject: [PATCH 19/83] Bump next release to 6.13.0. --- pom.xml | 6 +++--- src/changes/changes.xml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index a402106350..3c97d8b0be 100644 --- a/pom.xml +++ b/pom.xml @@ -30,7 +30,7 @@ org.apache.bcel bcel jar - 6.12.1-SNAPSHOT + 6.13.0-SNAPSHOT Apache Commons BCEL The Commons Byte Code Engineering Library (BCEL) is designed to provide users with a convenient way to analyze, create, and manipulate compiled .class files. https://commons.apache.org/proper/commons-bcel @@ -44,8 +44,8 @@ 1.8 bcel org.apache.bcel - 6.12.1 - 6.12.2 + 6.13.0 + 6.13.1 true RC1 6.12.0 diff --git a/src/changes/changes.xml b/src/changes/changes.xml index e6c15c9ded..b01907563f 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -59,7 +59,7 @@ The type attribute can be add,update,fix,remove. Defining changes.version allows one to create the RN without first removing the SNAPSHOT suffix. --> - + Fix constant pool module access test on Java 26 and above #492. Add support for permitted subclasses #493. From 95da538d6d7e1493c9f68b354db061a95c93b246 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Fri, 6 Feb 2026 12:34:41 +0000 Subject: [PATCH 20/83] Bump github/codeql-action from 4.32.0 to 4.32.2 --- .github/workflows/codeql-analysis.yml | 6 +++--- .github/workflows/scorecards-analysis.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 658b44aef9..3fb81ad790 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -57,7 +57,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0 + uses: github/codeql-action/init@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -68,7 +68,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0 + uses: github/codeql-action/autobuild@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2 # â„šī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -82,4 +82,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0 + uses: github/codeql-action/analyze@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2 diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 98e267bc0d..818c876ece 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -64,6 +64,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0 + uses: github/codeql-action/upload-sarif@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2 with: sarif_file: results.sarif From b7abe875ed9c9c12920bb685f8c026b9274d5ada Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Fri, 6 Feb 2026 09:18:17 -0500 Subject: [PATCH 21/83] Use max-parallel: 20 as asked by Apache Infra --- .github/workflows/codeql-analysis.yml | 1 + .github/workflows/maven.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 3fb81ad790..858b59d146 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -37,6 +37,7 @@ jobs: security-events: write strategy: + max-parallel: 20 fail-fast: false matrix: language: [ 'java' ] diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index b34da06f30..13a4862e17 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -26,6 +26,7 @@ jobs: runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.experimental }} strategy: + max-parallel: 20 matrix: os: [ubuntu-latest, windows-latest, macos-latest] java: [ 8, 11, 17, 21, 25 ] From 38f194f69678dc94ff8c7a59b14b7ed4f42da734 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Mon, 9 Feb 2026 13:11:22 +0000 Subject: [PATCH 22/83] Bump actions/cache from 5.0.2 to 5.0.3 --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/maven.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 858b59d146..9ccfb03278 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -49,7 +49,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1 + - uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 #v5.0.3 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 13a4862e17..647479cfcb 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -42,7 +42,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1 + - uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 #v5.0.3 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} From 23d980a7742308e4da3c862a3e31f91bd242cefe Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Fri, 13 Feb 2026 17:32:51 -0500 Subject: [PATCH 23/83] Javadoc --- .../org/apache/bcel/classfile/LineNumber.java | 12 +++++++ .../bcel/classfile/LineNumberTable.java | 11 ++++++ .../bcel/classfile/LocalVariableTable.java | 17 ++++++++++ .../classfile/LocalVariableTypeTable.java | 34 +++++++++++++++++++ .../bcel/classfile/MethodParameters.java | 10 ++++++ .../org/apache/bcel/classfile/Module.java | 8 +++++ .../apache/bcel/classfile/ModuleExports.java | 5 +++ .../bcel/classfile/ModuleMainClass.java | 6 ++++ .../apache/bcel/classfile/ModuleOpens.java | 5 +++ .../apache/bcel/classfile/ModulePackages.java | 10 ++++++ .../apache/bcel/classfile/ModuleProvides.java | 5 +++ .../apache/bcel/classfile/ModuleRequires.java | 5 +++ .../apache/bcel/generic/INVOKEDYNAMIC.java | 5 +++ .../apache/bcel/generic/INVOKEINTERFACE.java | 8 +++++ .../apache/bcel/generic/INVOKESPECIAL.java | 5 +++ .../org/apache/bcel/generic/INVOKESTATIC.java | 5 +++ .../apache/bcel/generic/INVOKEVIRTUAL.java | 5 +++ .../java/org/apache/bcel/generic/IOR.java | 3 ++ .../java/org/apache/bcel/generic/ISHL.java | 3 ++ .../java/org/apache/bcel/generic/ISHR.java | 3 ++ .../java/org/apache/bcel/generic/IUSHR.java | 3 ++ .../java/org/apache/bcel/generic/IXOR.java | 3 ++ .../bcel/generic/InstructionFactory.java | 3 +- .../apache/bcel/generic/InstructionList.java | 2 ++ .../java/org/apache/bcel/generic/JSR.java | 5 +++ .../java/org/apache/bcel/generic/JSR_W.java | 5 +++ .../java/org/apache/bcel/generic/L2D.java | 3 ++ .../java/org/apache/bcel/generic/L2F.java | 3 ++ .../java/org/apache/bcel/generic/L2I.java | 3 ++ .../java/org/apache/bcel/generic/LADD.java | 3 ++ .../java/org/apache/bcel/generic/LAND.java | 3 ++ .../java/org/apache/bcel/generic/LCMP.java | 3 ++ .../java/org/apache/bcel/generic/LCONST.java | 5 +++ .../java/org/apache/bcel/generic/LDC.java | 15 +++++++- .../java/org/apache/bcel/generic/LDC2_W.java | 11 ++++++ .../java/org/apache/bcel/generic/LDC_W.java | 5 +++ .../java/org/apache/bcel/generic/LDIV.java | 3 ++ .../java/org/apache/bcel/generic/LLOAD.java | 5 +++ .../java/org/apache/bcel/generic/LMUL.java | 3 ++ .../java/org/apache/bcel/generic/LNEG.java | 3 ++ .../org/apache/bcel/generic/LOOKUPSWITCH.java | 7 ++++ .../java/org/apache/bcel/generic/LOR.java | 3 ++ .../java/org/apache/bcel/generic/LREM.java | 3 ++ .../java/org/apache/bcel/generic/LRETURN.java | 3 ++ .../java/org/apache/bcel/generic/LSHL.java | 3 ++ .../java/org/apache/bcel/generic/LSHR.java | 3 ++ .../java/org/apache/bcel/generic/LSTORE.java | 5 +++ .../java/org/apache/bcel/generic/LSUB.java | 3 ++ .../java/org/apache/bcel/generic/LUSHR.java | 3 ++ .../java/org/apache/bcel/generic/LXOR.java | 3 ++ .../apache/bcel/generic/LineNumberGen.java | 23 +++++++++++++ .../org/apache/bcel/generic/MONITORENTER.java | 3 ++ .../org/apache/bcel/generic/MONITOREXIT.java | 3 ++ .../apache/bcel/generic/MethodObserver.java | 5 +++ .../java/org/apache/bcel/generic/Select.java | 11 +++++- .../org/apache/bcel/util/JavaWrapper.java | 11 ++++++ .../util/LruCacheClassPathRepository.java | 6 ++++ .../MemorySensitiveClassPathRepository.java | 5 +++ .../apache/bcel/util/ModularRuntimeImage.java | 5 +++ .../verifier/exc/InvalidMethodException.java | 6 +++- .../exc/LinkingConstraintException.java | 6 ++++ .../bcel/verifier/exc/LoadingException.java | 2 ++ ...ocalVariableInfoInconsistentException.java | 2 ++ .../StructuralCodeConstraintException.java | 2 ++ .../verifier/statics/LocalVariableInfo.java | 6 ++++ 65 files changed, 382 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/apache/bcel/classfile/LineNumber.java b/src/main/java/org/apache/bcel/classfile/LineNumber.java index dfb7b501fa..a367b8390a 100644 --- a/src/main/java/org/apache/bcel/classfile/LineNumber.java +++ b/src/main/java/org/apache/bcel/classfile/LineNumber.java @@ -51,6 +51,8 @@ public final class LineNumber implements Cloneable, Node { } /** + * Constructs a LineNumber. + * * @param startPc Program Counter (PC) corresponds to. * @param lineNumber line number in source file. */ @@ -80,6 +82,8 @@ public void accept(final Visitor v) { } /** + * Creates a deep copy of this object. + * * @return deep copy of this object. */ public LineNumber copy() { @@ -103,6 +107,8 @@ public void dump(final DataOutputStream file) throws IOException { } /** + * Gets the line number. + * * @return Corresponding source line. */ public int getLineNumber() { @@ -110,6 +116,8 @@ public int getLineNumber() { } /** + * Gets the program counter. + * * @return PC in code. */ public int getStartPC() { @@ -117,6 +125,8 @@ public int getStartPC() { } /** + * Sets the line number. + * * @param lineNumber the source line number. */ public void setLineNumber(final int lineNumber) { @@ -124,6 +134,8 @@ public void setLineNumber(final int lineNumber) { } /** + * Sets the program counter. + * * @param startPc the pc for this line number. */ public void setStartPC(final int startPc) { diff --git a/src/main/java/org/apache/bcel/classfile/LineNumberTable.java b/src/main/java/org/apache/bcel/classfile/LineNumberTable.java index a4c33343a9..77e550be50 100644 --- a/src/main/java/org/apache/bcel/classfile/LineNumberTable.java +++ b/src/main/java/org/apache/bcel/classfile/LineNumberTable.java @@ -78,6 +78,8 @@ public LineNumberTable(final int nameIndex, final int length, final LineNumber[] *

* Note that both objects use the same references (shallow copy). Use copy() for a physical copy. *

+ * + * @param c the instance to copy. */ public LineNumberTable(final LineNumberTable c) { this(c.getNameIndex(), c.getLength(), c.getLineNumberTable(), c.getConstantPool()); @@ -124,6 +126,8 @@ public void dump(final DataOutputStream file) throws IOException { } /** + * Gets the line number table. + * * @return Array of (pc offset, line number) pairs. */ public LineNumber[] getLineNumberTable() { @@ -176,6 +180,11 @@ public int getSourceLine(final int pos) { return lineNumberTable[minIndex].getLineNumber(); } + /** + * Gets the length of the line number table. + * + * @return the length of the line number table. + */ public int getTableLength() { return lineNumberTable.length; } @@ -186,6 +195,8 @@ public Iterator iterator() { } /** + * Sets the line number table. + * * @param lineNumberTable the line number entries for this table. */ public void setLineNumberTable(final LineNumber[] lineNumberTable) { diff --git a/src/main/java/org/apache/bcel/classfile/LocalVariableTable.java b/src/main/java/org/apache/bcel/classfile/LocalVariableTable.java index 4254fa170a..2fec2a8a16 100644 --- a/src/main/java/org/apache/bcel/classfile/LocalVariableTable.java +++ b/src/main/java/org/apache/bcel/classfile/LocalVariableTable.java @@ -60,6 +60,8 @@ public class LocalVariableTable extends Attribute implements Iterable iterator() { return Stream.of(localVariableTable).iterator(); } + /** + * Sets the local variable table. + * + * @param localVariableTable the local variable table to set. + */ public final void setLocalVariableTable(final LocalVariable[] localVariableTable) { this.localVariableTable = localVariableTable != null ? localVariableTable : EMPTY_ARRAY; } diff --git a/src/main/java/org/apache/bcel/classfile/LocalVariableTypeTable.java b/src/main/java/org/apache/bcel/classfile/LocalVariableTypeTable.java index 87bf9edb1a..5365051713 100644 --- a/src/main/java/org/apache/bcel/classfile/LocalVariableTypeTable.java +++ b/src/main/java/org/apache/bcel/classfile/LocalVariableTypeTable.java @@ -77,12 +77,25 @@ public class LocalVariableTypeTable extends Attribute implements Iterable iterator() { return Stream.of(localVariableTypeTable).iterator(); } + /** + * Sets the local variable table. + * + * @param localVariableTable the local variable table to set. + */ public final void setLocalVariableTable(final LocalVariable[] localVariableTable) { this.localVariableTypeTable = localVariableTable != null ? localVariableTable : EMPTY_ARRAY; } diff --git a/src/main/java/org/apache/bcel/classfile/MethodParameters.java b/src/main/java/org/apache/bcel/classfile/MethodParameters.java index fee2644e8c..607e13cb41 100644 --- a/src/main/java/org/apache/bcel/classfile/MethodParameters.java +++ b/src/main/java/org/apache/bcel/classfile/MethodParameters.java @@ -82,6 +82,11 @@ public void dump(final DataOutputStream file) throws IOException { } } + /** + * Gets the method parameters. + * + * @return the method parameters. + */ public MethodParameter[] getParameters() { return parameters; } @@ -91,6 +96,11 @@ public Iterator iterator() { return Stream.of(parameters).iterator(); } + /** + * Sets the method parameters. + * + * @param parameters the method parameters to set. + */ public void setParameters(final MethodParameter[] parameters) { this.parameters = parameters != null ? parameters : EMPTY_ARRAY; } diff --git a/src/main/java/org/apache/bcel/classfile/Module.java b/src/main/java/org/apache/bcel/classfile/Module.java index 0527850de5..bf4f76a1d0 100644 --- a/src/main/java/org/apache/bcel/classfile/Module.java +++ b/src/main/java/org/apache/bcel/classfile/Module.java @@ -180,6 +180,8 @@ public void dump(final DataOutputStream file) throws IOException { } /** + * Gets the table of exported interfaces. + * * @return table of exported interfaces. * @see ModuleExports */ @@ -209,6 +211,8 @@ public String getModuleName(final ConstantPool cp) { } /** + * Gets the table of open interfaces. + * * @return table of provided interfaces. * @see ModuleOpens */ @@ -217,6 +221,8 @@ public ModuleOpens[] getOpensTable() { } /** + * Gets the table of provided interfaces. + * * @return table of provided interfaces. * @see ModuleProvides */ @@ -225,6 +231,8 @@ public ModuleProvides[] getProvidesTable() { } /** + * Gets the table of required modules. + * * @return table of required modules. * @see ModuleRequires */ diff --git a/src/main/java/org/apache/bcel/classfile/ModuleExports.java b/src/main/java/org/apache/bcel/classfile/ModuleExports.java index 4b6173c3b7..5dcde7c524 100644 --- a/src/main/java/org/apache/bcel/classfile/ModuleExports.java +++ b/src/main/java/org/apache/bcel/classfile/ModuleExports.java @@ -68,6 +68,8 @@ public void accept(final Visitor v) { } /** + * Creates a deep copy of this object. + * * @return deep copy of this object. */ public ModuleExports copy() { @@ -139,6 +141,9 @@ public String toString() { } /** + * Gets the resolved string representation. + * + * @param constantPool the constant pool. * @return Resolved string representation. */ public String toString(final ConstantPool constantPool) { diff --git a/src/main/java/org/apache/bcel/classfile/ModuleMainClass.java b/src/main/java/org/apache/bcel/classfile/ModuleMainClass.java index fba24f16b2..91177a6930 100644 --- a/src/main/java/org/apache/bcel/classfile/ModuleMainClass.java +++ b/src/main/java/org/apache/bcel/classfile/ModuleMainClass.java @@ -51,6 +51,8 @@ public final class ModuleMainClass extends Attribute { } /** + * Constructs a new ModuleMainClass. + * * @param nameIndex Index in constant pool. * @param length Content length in bytes. * @param mainClassIndex Host class index. @@ -105,6 +107,8 @@ public void dump(final DataOutputStream file) throws IOException { } /** + * Gets the host class index. + * * @return index into constant pool of host class name. */ public int getHostClassIndex() { @@ -112,6 +116,8 @@ public int getHostClassIndex() { } /** + * Sets the host class index. + * * @param mainClassIndex the host class index. */ public void setHostClassIndex(final int mainClassIndex) { diff --git a/src/main/java/org/apache/bcel/classfile/ModuleOpens.java b/src/main/java/org/apache/bcel/classfile/ModuleOpens.java index 24e4c77f18..57ce8b8aaa 100644 --- a/src/main/java/org/apache/bcel/classfile/ModuleOpens.java +++ b/src/main/java/org/apache/bcel/classfile/ModuleOpens.java @@ -68,6 +68,8 @@ public void accept(final Visitor v) { } /** + * Creates a deep copy of this object. + * * @return deep copy of this object. */ public ModuleOpens copy() { @@ -139,6 +141,9 @@ public String toString() { } /** + * Gets the resolved string representation. + * + * @param constantPool the constant pool. * @return Resolved string representation. */ public String toString(final ConstantPool constantPool) { diff --git a/src/main/java/org/apache/bcel/classfile/ModulePackages.java b/src/main/java/org/apache/bcel/classfile/ModulePackages.java index 46ac6e75a9..1fea7f2596 100644 --- a/src/main/java/org/apache/bcel/classfile/ModulePackages.java +++ b/src/main/java/org/apache/bcel/classfile/ModulePackages.java @@ -53,6 +53,8 @@ public final class ModulePackages extends Attribute { } /** + * Constructs a new ModulePackages. + * * @param nameIndex Index in constant pool. * @param length Content length in bytes. * @param packageIndexTable Table of indices in constant pool. @@ -114,6 +116,8 @@ public void dump(final DataOutputStream file) throws IOException { } /** + * Gets the number of packages. + * * @return Length of package table. */ public int getNumberOfPackages() { @@ -121,6 +125,8 @@ public int getNumberOfPackages() { } /** + * Gets the package index table. + * * @return array of indices into constant pool of package names. */ public int[] getPackageIndexTable() { @@ -128,6 +134,8 @@ public int[] getPackageIndexTable() { } /** + * Gets the package names. + * * @return string array of package names. */ public String[] getPackageNames() { @@ -137,6 +145,8 @@ public String[] getPackageNames() { } /** + * Sets the package index table. + * * @param packageIndexTable the list of package indexes Also redefines number_of_packages according to table length. */ public void setPackageIndexTable(final int[] packageIndexTable) { diff --git a/src/main/java/org/apache/bcel/classfile/ModuleProvides.java b/src/main/java/org/apache/bcel/classfile/ModuleProvides.java index 1fa1f5b88b..deb7793ee0 100644 --- a/src/main/java/org/apache/bcel/classfile/ModuleProvides.java +++ b/src/main/java/org/apache/bcel/classfile/ModuleProvides.java @@ -70,6 +70,8 @@ public void accept(final Visitor v) { } /** + * Creates a deep copy of this object. + * * @return deep copy of this object. */ public ModuleProvides copy() { @@ -131,6 +133,9 @@ public String toString() { } /** + * Gets the resolved string representation. + * + * @param constantPool the constant pool. * @return Resolved string representation. */ public String toString(final ConstantPool constantPool) { diff --git a/src/main/java/org/apache/bcel/classfile/ModuleRequires.java b/src/main/java/org/apache/bcel/classfile/ModuleRequires.java index f512186acd..8a091c63f5 100644 --- a/src/main/java/org/apache/bcel/classfile/ModuleRequires.java +++ b/src/main/java/org/apache/bcel/classfile/ModuleRequires.java @@ -62,6 +62,8 @@ public void accept(final Visitor v) { } /** + * Creates a deep copy of this object. + * * @return deep copy of this object. */ public ModuleRequires copy() { @@ -126,6 +128,9 @@ public String toString() { } /** + * Gets the resolved string representation. + * + * @param constantPool the constant pool. * @return Resolved string representation. */ public String toString(final ConstantPool constantPool) { diff --git a/src/main/java/org/apache/bcel/generic/INVOKEDYNAMIC.java b/src/main/java/org/apache/bcel/generic/INVOKEDYNAMIC.java index 685215797b..3028ccc6a0 100644 --- a/src/main/java/org/apache/bcel/generic/INVOKEDYNAMIC.java +++ b/src/main/java/org/apache/bcel/generic/INVOKEDYNAMIC.java @@ -44,6 +44,11 @@ public class INVOKEDYNAMIC extends InvokeInstruction { INVOKEDYNAMIC() { } + /** + * Constructs an INVOKEDYNAMIC instruction. + * + * @param index index into constant pool. + */ public INVOKEDYNAMIC(final int index) { super(Const.INVOKEDYNAMIC, index); } diff --git a/src/main/java/org/apache/bcel/generic/INVOKEINTERFACE.java b/src/main/java/org/apache/bcel/generic/INVOKEINTERFACE.java index b52e5ae7eb..650af62796 100644 --- a/src/main/java/org/apache/bcel/generic/INVOKEINTERFACE.java +++ b/src/main/java/org/apache/bcel/generic/INVOKEINTERFACE.java @@ -46,6 +46,12 @@ public final class INVOKEINTERFACE extends InvokeInstruction { INVOKEINTERFACE() { } + /** + * Constructs an INVOKEINTERFACE instruction. + * + * @param index index into constant pool. + * @param nargs number of arguments. + */ public INVOKEINTERFACE(final int index, final int nargs) { super(Const.INVOKEINTERFACE, index); super.setLength(5); @@ -94,6 +100,8 @@ public void dump(final DataOutputStream out) throws IOException { /** * The count argument according to the Java Language Specification, Second Edition. + * + * @return the count argument. */ public int getCount() { return nargs; diff --git a/src/main/java/org/apache/bcel/generic/INVOKESPECIAL.java b/src/main/java/org/apache/bcel/generic/INVOKESPECIAL.java index dc5ac11610..d1b5e91959 100644 --- a/src/main/java/org/apache/bcel/generic/INVOKESPECIAL.java +++ b/src/main/java/org/apache/bcel/generic/INVOKESPECIAL.java @@ -43,6 +43,11 @@ public class INVOKESPECIAL extends InvokeInstruction { INVOKESPECIAL() { } + /** + * Constructs an INVOKESPECIAL instruction. + * + * @param index index into constant pool. + */ public INVOKESPECIAL(final int index) { super(Const.INVOKESPECIAL, index); } diff --git a/src/main/java/org/apache/bcel/generic/INVOKESTATIC.java b/src/main/java/org/apache/bcel/generic/INVOKESTATIC.java index 1a80307506..11522741ec 100644 --- a/src/main/java/org/apache/bcel/generic/INVOKESTATIC.java +++ b/src/main/java/org/apache/bcel/generic/INVOKESTATIC.java @@ -42,6 +42,11 @@ public class INVOKESTATIC extends InvokeInstruction { INVOKESTATIC() { } + /** + * Constructs an INVOKESTATIC instruction. + * + * @param index index into constant pool. + */ public INVOKESTATIC(final int index) { super(Const.INVOKESTATIC, index); } diff --git a/src/main/java/org/apache/bcel/generic/INVOKEVIRTUAL.java b/src/main/java/org/apache/bcel/generic/INVOKEVIRTUAL.java index 2cfb392518..95e23aadd5 100644 --- a/src/main/java/org/apache/bcel/generic/INVOKEVIRTUAL.java +++ b/src/main/java/org/apache/bcel/generic/INVOKEVIRTUAL.java @@ -42,6 +42,11 @@ public class INVOKEVIRTUAL extends InvokeInstruction { INVOKEVIRTUAL() { } + /** + * Constructs an INVOKEVIRTUAL instruction. + * + * @param index index into constant pool. + */ public INVOKEVIRTUAL(final int index) { super(Const.INVOKEVIRTUAL, index); } diff --git a/src/main/java/org/apache/bcel/generic/IOR.java b/src/main/java/org/apache/bcel/generic/IOR.java index 8ab7c818af..f9897b9a94 100644 --- a/src/main/java/org/apache/bcel/generic/IOR.java +++ b/src/main/java/org/apache/bcel/generic/IOR.java @@ -27,6 +27,9 @@ */ public class IOR extends ArithmeticInstruction { + /** + * Constructs an IOR instruction. + */ public IOR() { super(org.apache.bcel.Const.IOR); } diff --git a/src/main/java/org/apache/bcel/generic/ISHL.java b/src/main/java/org/apache/bcel/generic/ISHL.java index 6fd07eddea..b051b7e2a7 100644 --- a/src/main/java/org/apache/bcel/generic/ISHL.java +++ b/src/main/java/org/apache/bcel/generic/ISHL.java @@ -27,6 +27,9 @@ */ public class ISHL extends ArithmeticInstruction { + /** + * Constructs an ISHL instruction. + */ public ISHL() { super(org.apache.bcel.Const.ISHL); } diff --git a/src/main/java/org/apache/bcel/generic/ISHR.java b/src/main/java/org/apache/bcel/generic/ISHR.java index 5134b88588..102448a16c 100644 --- a/src/main/java/org/apache/bcel/generic/ISHR.java +++ b/src/main/java/org/apache/bcel/generic/ISHR.java @@ -27,6 +27,9 @@ */ public class ISHR extends ArithmeticInstruction { + /** + * Constructs an ISHR instruction. + */ public ISHR() { super(org.apache.bcel.Const.ISHR); } diff --git a/src/main/java/org/apache/bcel/generic/IUSHR.java b/src/main/java/org/apache/bcel/generic/IUSHR.java index 8645cd23ec..04ab9528b5 100644 --- a/src/main/java/org/apache/bcel/generic/IUSHR.java +++ b/src/main/java/org/apache/bcel/generic/IUSHR.java @@ -27,6 +27,9 @@ */ public class IUSHR extends ArithmeticInstruction { + /** + * Constructs an IUSHR instruction. + */ public IUSHR() { super(org.apache.bcel.Const.IUSHR); } diff --git a/src/main/java/org/apache/bcel/generic/IXOR.java b/src/main/java/org/apache/bcel/generic/IXOR.java index 5cdcd9ba2e..0b64b22652 100644 --- a/src/main/java/org/apache/bcel/generic/IXOR.java +++ b/src/main/java/org/apache/bcel/generic/IXOR.java @@ -27,6 +27,9 @@ */ public class IXOR extends ArithmeticInstruction { + /** + * Constructs an IXOR instruction. + */ public IXOR() { super(org.apache.bcel.Const.IXOR); } diff --git a/src/main/java/org/apache/bcel/generic/InstructionFactory.java b/src/main/java/org/apache/bcel/generic/InstructionFactory.java index a5ed959830..37fc677cd6 100644 --- a/src/main/java/org/apache/bcel/generic/InstructionFactory.java +++ b/src/main/java/org/apache/bcel/generic/InstructionFactory.java @@ -631,10 +631,11 @@ public Instruction createConstant(final Object value) { /** * Create a field instruction. * - * @param className name of the accessed class. + * @param className class name containing the field. * @param name name of the referenced field. * @param type type of field. * @param kind how to access, that is, GETFIELD, PUTFIELD, GETSTATIC, PUTSTATIC. + * @return a field instruction. * @see Const */ public FieldInstruction createFieldAccess(final String className, final String name, final Type type, final short kind) { diff --git a/src/main/java/org/apache/bcel/generic/InstructionList.java b/src/main/java/org/apache/bcel/generic/InstructionList.java index 96aef77a2b..2e3b23a1cc 100644 --- a/src/main/java/org/apache/bcel/generic/InstructionList.java +++ b/src/main/java/org/apache/bcel/generic/InstructionList.java @@ -846,6 +846,8 @@ public InstructionHandle insert(final InstructionList il) { /** * Tests for empty list. + * + * @return true if list is empty, false otherwise. */ public boolean isEmpty() { return start == null; diff --git a/src/main/java/org/apache/bcel/generic/JSR.java b/src/main/java/org/apache/bcel/generic/JSR.java index ba8d946d5f..b49b4cf1ab 100644 --- a/src/main/java/org/apache/bcel/generic/JSR.java +++ b/src/main/java/org/apache/bcel/generic/JSR.java @@ -32,6 +32,11 @@ public class JSR extends JsrInstruction implements VariableLengthInstruction { JSR() { } + /** + * Constructs a JSR instruction. + * + * @param target branch target. + */ public JSR(final InstructionHandle target) { super(org.apache.bcel.Const.JSR, target); } diff --git a/src/main/java/org/apache/bcel/generic/JSR_W.java b/src/main/java/org/apache/bcel/generic/JSR_W.java index 3acd78655a..fa2193a657 100644 --- a/src/main/java/org/apache/bcel/generic/JSR_W.java +++ b/src/main/java/org/apache/bcel/generic/JSR_W.java @@ -34,6 +34,11 @@ public class JSR_W extends JsrInstruction { JSR_W() { } + /** + * Constructs a JSR_W instruction. + * + * @param target branch target. + */ public JSR_W(final InstructionHandle target) { super(org.apache.bcel.Const.JSR_W, target); super.setLength(5); diff --git a/src/main/java/org/apache/bcel/generic/L2D.java b/src/main/java/org/apache/bcel/generic/L2D.java index 93ec038de3..0a8ba3f8f6 100644 --- a/src/main/java/org/apache/bcel/generic/L2D.java +++ b/src/main/java/org/apache/bcel/generic/L2D.java @@ -27,6 +27,9 @@ */ public class L2D extends ConversionInstruction { + /** + * Constructs an L2D instruction. + */ public L2D() { super(org.apache.bcel.Const.L2D); } diff --git a/src/main/java/org/apache/bcel/generic/L2F.java b/src/main/java/org/apache/bcel/generic/L2F.java index 95beb64021..7608d3d1e7 100644 --- a/src/main/java/org/apache/bcel/generic/L2F.java +++ b/src/main/java/org/apache/bcel/generic/L2F.java @@ -27,6 +27,9 @@ */ public class L2F extends ConversionInstruction { + /** + * Constructs an L2F instruction. + */ public L2F() { super(org.apache.bcel.Const.L2F); } diff --git a/src/main/java/org/apache/bcel/generic/L2I.java b/src/main/java/org/apache/bcel/generic/L2I.java index fa14c8e43c..95fcc88241 100644 --- a/src/main/java/org/apache/bcel/generic/L2I.java +++ b/src/main/java/org/apache/bcel/generic/L2I.java @@ -27,6 +27,9 @@ */ public class L2I extends ConversionInstruction { + /** + * Constructs an L2I instruction. + */ public L2I() { super(org.apache.bcel.Const.L2I); } diff --git a/src/main/java/org/apache/bcel/generic/LADD.java b/src/main/java/org/apache/bcel/generic/LADD.java index 251587ba1d..3d0c6b8c5a 100644 --- a/src/main/java/org/apache/bcel/generic/LADD.java +++ b/src/main/java/org/apache/bcel/generic/LADD.java @@ -29,6 +29,9 @@ */ public class LADD extends ArithmeticInstruction { + /** + * Constructs an LADD instruction. + */ public LADD() { super(org.apache.bcel.Const.LADD); } diff --git a/src/main/java/org/apache/bcel/generic/LAND.java b/src/main/java/org/apache/bcel/generic/LAND.java index dfa54e4a37..375e6bcb4f 100644 --- a/src/main/java/org/apache/bcel/generic/LAND.java +++ b/src/main/java/org/apache/bcel/generic/LAND.java @@ -29,6 +29,9 @@ */ public class LAND extends ArithmeticInstruction { + /** + * Constructs an LAND instruction. + */ public LAND() { super(org.apache.bcel.Const.LAND); } diff --git a/src/main/java/org/apache/bcel/generic/LCMP.java b/src/main/java/org/apache/bcel/generic/LCMP.java index faecd83fb5..1768d2ae40 100644 --- a/src/main/java/org/apache/bcel/generic/LCMP.java +++ b/src/main/java/org/apache/bcel/generic/LCMP.java @@ -27,6 +27,9 @@ */ public class LCMP extends Instruction implements TypedInstruction, StackProducer, StackConsumer { + /** + * Constructs an LCMP instruction. + */ public LCMP() { super(org.apache.bcel.Const.LCMP, (short) 1); } diff --git a/src/main/java/org/apache/bcel/generic/LCONST.java b/src/main/java/org/apache/bcel/generic/LCONST.java index 4ed4b21fca..875379038e 100644 --- a/src/main/java/org/apache/bcel/generic/LCONST.java +++ b/src/main/java/org/apache/bcel/generic/LCONST.java @@ -36,6 +36,11 @@ public class LCONST extends Instruction implements ConstantPushInstruction { this(0); } + /** + * Constructs an LCONST instruction. + * + * @param l long constant value. + */ public LCONST(final long l) { super(org.apache.bcel.Const.LCONST_0, (short) 1); if (l == 0) { diff --git a/src/main/java/org/apache/bcel/generic/LDC.java b/src/main/java/org/apache/bcel/generic/LDC.java index a46c6dc0b5..d84b480870 100644 --- a/src/main/java/org/apache/bcel/generic/LDC.java +++ b/src/main/java/org/apache/bcel/generic/LDC.java @@ -39,6 +39,11 @@ public class LDC extends CPInstruction implements PushInstruction, ExceptionThro LDC() { } + /** + * Constructs an LDC instruction. + * + * @param index index into constant pool. + */ public LDC(final int index) { super(org.apache.bcel.Const.LDC_W, index); setSize(); @@ -98,6 +103,12 @@ public Type getType(final ConstantPoolGen cpg) { } } + /** + * Gets the constant value from the constant pool. + * + * @param cpg constant pool generator. + * @return the constant value. + */ public Object getValue(final ConstantPoolGen cpg) { org.apache.bcel.classfile.Constant c = cpg.getConstantPool().getConstant(super.getIndex()); switch (c.getTag()) { @@ -139,7 +150,9 @@ public final void setIndex(final int index) { setSize(); } - // Adjust to proper size + /** + * Adjusts to proper size. + */ protected final void setSize() { if (super.getIndex() <= org.apache.bcel.Const.MAX_BYTE) { // Fits in one byte? super.setOpcode(org.apache.bcel.Const.LDC); diff --git a/src/main/java/org/apache/bcel/generic/LDC2_W.java b/src/main/java/org/apache/bcel/generic/LDC2_W.java index 61cba67542..ec7193d938 100644 --- a/src/main/java/org/apache/bcel/generic/LDC2_W.java +++ b/src/main/java/org/apache/bcel/generic/LDC2_W.java @@ -33,6 +33,11 @@ public class LDC2_W extends CPInstruction implements PushInstruction { LDC2_W() { } + /** + * Constructs an LDC2_W instruction. + * + * @param index index into constant pool. + */ public LDC2_W(final int index) { super(org.apache.bcel.Const.LDC2_W, index); } @@ -64,6 +69,12 @@ public Type getType(final ConstantPoolGen cpg) { } } + /** + * Gets the constant value from the constant pool. + * + * @param cpg constant pool generator. + * @return the constant value as a Number. + */ public Number getValue(final ConstantPoolGen cpg) { final org.apache.bcel.classfile.Constant c = cpg.getConstantPool().getConstant(super.getIndex()); switch (c.getTag()) { diff --git a/src/main/java/org/apache/bcel/generic/LDC_W.java b/src/main/java/org/apache/bcel/generic/LDC_W.java index 3be17d25b3..52600ae79f 100644 --- a/src/main/java/org/apache/bcel/generic/LDC_W.java +++ b/src/main/java/org/apache/bcel/generic/LDC_W.java @@ -37,6 +37,11 @@ public class LDC_W extends LDC { LDC_W() { } + /** + * Constructs an LDC_W instruction. + * + * @param index index into constant pool. + */ public LDC_W(final int index) { super(index); } diff --git a/src/main/java/org/apache/bcel/generic/LDIV.java b/src/main/java/org/apache/bcel/generic/LDIV.java index 8bbb6b69cd..0f2653877e 100644 --- a/src/main/java/org/apache/bcel/generic/LDIV.java +++ b/src/main/java/org/apache/bcel/generic/LDIV.java @@ -31,6 +31,9 @@ */ public class LDIV extends ArithmeticInstruction implements ExceptionThrower { + /** + * Constructs an LDIV instruction. + */ public LDIV() { super(org.apache.bcel.Const.LDIV); } diff --git a/src/main/java/org/apache/bcel/generic/LLOAD.java b/src/main/java/org/apache/bcel/generic/LLOAD.java index d6f7b05b91..7ca761b546 100644 --- a/src/main/java/org/apache/bcel/generic/LLOAD.java +++ b/src/main/java/org/apache/bcel/generic/LLOAD.java @@ -34,6 +34,11 @@ public class LLOAD extends LoadInstruction { super(org.apache.bcel.Const.LLOAD, org.apache.bcel.Const.LLOAD_0); } + /** + * Load long from local variable. + * + * @param n index of local variable. + */ public LLOAD(final int n) { super(org.apache.bcel.Const.LLOAD, org.apache.bcel.Const.LLOAD_0, n); } diff --git a/src/main/java/org/apache/bcel/generic/LMUL.java b/src/main/java/org/apache/bcel/generic/LMUL.java index 64c8e91ed0..d2245144a5 100644 --- a/src/main/java/org/apache/bcel/generic/LMUL.java +++ b/src/main/java/org/apache/bcel/generic/LMUL.java @@ -29,6 +29,9 @@ */ public class LMUL extends ArithmeticInstruction { + /** + * Constructs an LMUL instruction. + */ public LMUL() { super(org.apache.bcel.Const.LMUL); } diff --git a/src/main/java/org/apache/bcel/generic/LNEG.java b/src/main/java/org/apache/bcel/generic/LNEG.java index 3073a1e0c7..5db072d9fe 100644 --- a/src/main/java/org/apache/bcel/generic/LNEG.java +++ b/src/main/java/org/apache/bcel/generic/LNEG.java @@ -27,6 +27,9 @@ */ public class LNEG extends ArithmeticInstruction { + /** + * Constructs an LNEG instruction. + */ public LNEG() { super(org.apache.bcel.Const.LNEG); } diff --git a/src/main/java/org/apache/bcel/generic/LOOKUPSWITCH.java b/src/main/java/org/apache/bcel/generic/LOOKUPSWITCH.java index c9cffa6e25..dc1c831703 100644 --- a/src/main/java/org/apache/bcel/generic/LOOKUPSWITCH.java +++ b/src/main/java/org/apache/bcel/generic/LOOKUPSWITCH.java @@ -36,6 +36,13 @@ public class LOOKUPSWITCH extends Select { LOOKUPSWITCH() { } + /** + * Constructs a LOOKUPSWITCH instruction. + * + * @param match array of match values. + * @param targets array of branch targets. + * @param defaultTarget default branch target. + */ public LOOKUPSWITCH(final int[] match, final InstructionHandle[] targets, final InstructionHandle defaultTarget) { super(org.apache.bcel.Const.LOOKUPSWITCH, match, targets, defaultTarget); /* alignment remainder assumed 0 here, until dump time. */ diff --git a/src/main/java/org/apache/bcel/generic/LOR.java b/src/main/java/org/apache/bcel/generic/LOR.java index d6d7ceb70a..a8cdfedde0 100644 --- a/src/main/java/org/apache/bcel/generic/LOR.java +++ b/src/main/java/org/apache/bcel/generic/LOR.java @@ -27,6 +27,9 @@ */ public class LOR extends ArithmeticInstruction { + /** + * Constructs an LOR instruction. + */ public LOR() { super(org.apache.bcel.Const.LOR); } diff --git a/src/main/java/org/apache/bcel/generic/LREM.java b/src/main/java/org/apache/bcel/generic/LREM.java index f494358278..5ae87dcdff 100644 --- a/src/main/java/org/apache/bcel/generic/LREM.java +++ b/src/main/java/org/apache/bcel/generic/LREM.java @@ -29,6 +29,9 @@ */ public class LREM extends ArithmeticInstruction implements ExceptionThrower { + /** + * Constructs an LREM instruction. + */ public LREM() { super(org.apache.bcel.Const.LREM); } diff --git a/src/main/java/org/apache/bcel/generic/LRETURN.java b/src/main/java/org/apache/bcel/generic/LRETURN.java index 51812db0bb..9a447e9f83 100644 --- a/src/main/java/org/apache/bcel/generic/LRETURN.java +++ b/src/main/java/org/apache/bcel/generic/LRETURN.java @@ -27,6 +27,9 @@ */ public class LRETURN extends ReturnInstruction { + /** + * Constructs an LRETURN instruction. + */ public LRETURN() { super(org.apache.bcel.Const.LRETURN); } diff --git a/src/main/java/org/apache/bcel/generic/LSHL.java b/src/main/java/org/apache/bcel/generic/LSHL.java index 70437fedce..b7eb217771 100644 --- a/src/main/java/org/apache/bcel/generic/LSHL.java +++ b/src/main/java/org/apache/bcel/generic/LSHL.java @@ -27,6 +27,9 @@ */ public class LSHL extends ArithmeticInstruction { + /** + * Constructs an LSHL instruction. + */ public LSHL() { super(org.apache.bcel.Const.LSHL); } diff --git a/src/main/java/org/apache/bcel/generic/LSHR.java b/src/main/java/org/apache/bcel/generic/LSHR.java index 61556b4594..00ee22f7fb 100644 --- a/src/main/java/org/apache/bcel/generic/LSHR.java +++ b/src/main/java/org/apache/bcel/generic/LSHR.java @@ -27,6 +27,9 @@ */ public class LSHR extends ArithmeticInstruction { + /** + * Constructs an LSHR instruction. + */ public LSHR() { super(org.apache.bcel.Const.LSHR); } diff --git a/src/main/java/org/apache/bcel/generic/LSTORE.java b/src/main/java/org/apache/bcel/generic/LSTORE.java index 6a24784110..3fa4583a70 100644 --- a/src/main/java/org/apache/bcel/generic/LSTORE.java +++ b/src/main/java/org/apache/bcel/generic/LSTORE.java @@ -34,6 +34,11 @@ public class LSTORE extends StoreInstruction { super(org.apache.bcel.Const.LSTORE, org.apache.bcel.Const.LSTORE_0); } + /** + * Store long into local variable. + * + * @param n index of local variable. + */ public LSTORE(final int n) { super(org.apache.bcel.Const.LSTORE, org.apache.bcel.Const.LSTORE_0, n); } diff --git a/src/main/java/org/apache/bcel/generic/LSUB.java b/src/main/java/org/apache/bcel/generic/LSUB.java index a108d5b8d7..8edecde170 100644 --- a/src/main/java/org/apache/bcel/generic/LSUB.java +++ b/src/main/java/org/apache/bcel/generic/LSUB.java @@ -29,6 +29,9 @@ */ public class LSUB extends ArithmeticInstruction { + /** + * Constructs an LSUB instruction. + */ public LSUB() { super(org.apache.bcel.Const.LSUB); } diff --git a/src/main/java/org/apache/bcel/generic/LUSHR.java b/src/main/java/org/apache/bcel/generic/LUSHR.java index 8574cc5bde..daa56d70a3 100644 --- a/src/main/java/org/apache/bcel/generic/LUSHR.java +++ b/src/main/java/org/apache/bcel/generic/LUSHR.java @@ -27,6 +27,9 @@ */ public class LUSHR extends ArithmeticInstruction { + /** + * Constructs an LUSHR instruction. + */ public LUSHR() { super(org.apache.bcel.Const.LUSHR); } diff --git a/src/main/java/org/apache/bcel/generic/LXOR.java b/src/main/java/org/apache/bcel/generic/LXOR.java index 820e01a213..928ac48fca 100644 --- a/src/main/java/org/apache/bcel/generic/LXOR.java +++ b/src/main/java/org/apache/bcel/generic/LXOR.java @@ -27,6 +27,9 @@ */ public class LXOR extends ArithmeticInstruction { + /** + * Constructs an LXOR instruction. + */ public LXOR() { super(org.apache.bcel.Const.LXOR); } diff --git a/src/main/java/org/apache/bcel/generic/LineNumberGen.java b/src/main/java/org/apache/bcel/generic/LineNumberGen.java index c644d42459..76e6e3eda5 100644 --- a/src/main/java/org/apache/bcel/generic/LineNumberGen.java +++ b/src/main/java/org/apache/bcel/generic/LineNumberGen.java @@ -40,6 +40,7 @@ public class LineNumberGen implements InstructionTargeter, Cloneable { * Create a line number. * * @param ih instruction handle to reference. + * @param srcLine source line number. */ public LineNumberGen(final InstructionHandle ih, final int srcLine) { setInstruction(ih); @@ -63,6 +64,11 @@ public boolean containsTarget(final InstructionHandle ih) { return this.ih == ih; } + /** + * Gets the instruction handle. + * + * @return the instruction handle. + */ public InstructionHandle getInstruction() { return ih; } @@ -72,21 +78,38 @@ public InstructionHandle getInstruction() { * * This relies on that the instruction list has already been dumped to byte code or that the 'setPositions' methods * has been called for the instruction list. + * + * @return the line number attribute. */ public LineNumber getLineNumber() { return new LineNumber(ih.getPosition(), srcLine); } + /** + * Gets the source line number. + * + * @return the source line number. + */ public int getSourceLine() { return srcLine; } + /** + * Sets the instruction handle. + * + * @param instructionHandle the instruction handle to set. + */ public void setInstruction(final InstructionHandle instructionHandle) { // TODO could be package-protected? Objects.requireNonNull(instructionHandle, "instructionHandle"); BranchInstruction.notifyTarget(this.ih, instructionHandle, this); this.ih = instructionHandle; } + /** + * Sets the source line number. + * + * @param srcLine the source line number to set. + */ public void setSourceLine(final int srcLine) { // TODO could be package-protected? this.srcLine = srcLine; } diff --git a/src/main/java/org/apache/bcel/generic/MONITORENTER.java b/src/main/java/org/apache/bcel/generic/MONITORENTER.java index 9df98a61c7..78ab9453b4 100644 --- a/src/main/java/org/apache/bcel/generic/MONITORENTER.java +++ b/src/main/java/org/apache/bcel/generic/MONITORENTER.java @@ -29,6 +29,9 @@ */ public class MONITORENTER extends Instruction implements ExceptionThrower, StackConsumer { + /** + * Constructs a MONITORENTER instruction. + */ public MONITORENTER() { super(org.apache.bcel.Const.MONITORENTER, (short) 1); } diff --git a/src/main/java/org/apache/bcel/generic/MONITOREXIT.java b/src/main/java/org/apache/bcel/generic/MONITOREXIT.java index fe92e8030c..232cd57a70 100644 --- a/src/main/java/org/apache/bcel/generic/MONITOREXIT.java +++ b/src/main/java/org/apache/bcel/generic/MONITOREXIT.java @@ -29,6 +29,9 @@ */ public class MONITOREXIT extends Instruction implements ExceptionThrower, StackConsumer { + /** + * Constructs a MONITOREXIT instruction. + */ public MONITOREXIT() { super(org.apache.bcel.Const.MONITOREXIT, (short) 1); } diff --git a/src/main/java/org/apache/bcel/generic/MethodObserver.java b/src/main/java/org/apache/bcel/generic/MethodObserver.java index edd2a52039..c339bbae8e 100644 --- a/src/main/java/org/apache/bcel/generic/MethodObserver.java +++ b/src/main/java/org/apache/bcel/generic/MethodObserver.java @@ -24,5 +24,10 @@ */ public interface MethodObserver { + /** + * Notifies this observer of a change to the method. + * + * @param method the method that changed. + */ void notify(MethodGen method); } diff --git a/src/main/java/org/apache/bcel/generic/Select.java b/src/main/java/org/apache/bcel/generic/Select.java index 8b0dc3e101..5aaf7bb39b 100644 --- a/src/main/java/org/apache/bcel/generic/Select.java +++ b/src/main/java/org/apache/bcel/generic/Select.java @@ -160,6 +160,8 @@ final int getFixedLength() { } /** + * Gets the match target offsets. + * * @return array of match target offsets. */ public int[] getIndices() { @@ -191,6 +193,8 @@ final int getMatchLength() { } /** + * Gets the match indices. + * * @return array of match indices. */ public int[] getMatchs() { @@ -215,6 +219,8 @@ final InstructionHandle getTarget(final int index) { } /** + * Gets the match targets. + * * @return array of match targets. */ public InstructionHandle[] getTargets() { @@ -286,7 +292,10 @@ final int setMatchLength(final int matchLength) { } /** - * Sets branch target for 'i'th case + * Sets branch target for 'i'th case. + * + * @param i the case index. + * @param target the branch target. */ public void setTarget(final int i, final InstructionHandle target) { // TODO could be package-protected? notifyTarget(targets[i], target, this); diff --git a/src/main/java/org/apache/bcel/util/JavaWrapper.java b/src/main/java/org/apache/bcel/util/JavaWrapper.java index 2e7cbb2b19..ad56ecf1b1 100644 --- a/src/main/java/org/apache/bcel/util/JavaWrapper.java +++ b/src/main/java/org/apache/bcel/util/JavaWrapper.java @@ -59,6 +59,9 @@ private static java.lang.ClassLoader getClassLoader() { /** * Default main method used as wrapper, expects the fully qualified class name of the real class as the first argument. + * + * @param argv command line arguments where first argument is the class name. + * @throws Exception if an error occurs during execution. */ public static void main(final String[] argv) throws Exception { /* @@ -76,10 +79,18 @@ public static void main(final String[] argv) throws Exception { private final java.lang.ClassLoader loader; + /** + * Constructs a JavaWrapper with the default class loader. + */ public JavaWrapper() { this(getClassLoader()); } + /** + * Constructs a JavaWrapper with the specified class loader. + * + * @param loader the class loader to use. + */ public JavaWrapper(final java.lang.ClassLoader loader) { this.loader = loader; } diff --git a/src/main/java/org/apache/bcel/util/LruCacheClassPathRepository.java b/src/main/java/org/apache/bcel/util/LruCacheClassPathRepository.java index 9074925b3f..beb3ce0629 100644 --- a/src/main/java/org/apache/bcel/util/LruCacheClassPathRepository.java +++ b/src/main/java/org/apache/bcel/util/LruCacheClassPathRepository.java @@ -37,6 +37,12 @@ public class LruCacheClassPathRepository extends AbstractClassPathRepository { private final LinkedHashMap loadedClasses; + /** + * Constructs a new LruCacheClassPathRepository. + * + * @param path the class path. + * @param cacheSize the cache size. + */ public LruCacheClassPathRepository(final ClassPath path, final int cacheSize) { super(path); diff --git a/src/main/java/org/apache/bcel/util/MemorySensitiveClassPathRepository.java b/src/main/java/org/apache/bcel/util/MemorySensitiveClassPathRepository.java index 56f3539c25..1c830b00dc 100644 --- a/src/main/java/org/apache/bcel/util/MemorySensitiveClassPathRepository.java +++ b/src/main/java/org/apache/bcel/util/MemorySensitiveClassPathRepository.java @@ -36,6 +36,11 @@ public class MemorySensitiveClassPathRepository extends AbstractClassPathReposit private final Map> loadedClasses = new HashMap<>(); // CLASSNAME X JAVACLASS + /** + * Constructs a new MemorySensitiveClassPathRepository. + * + * @param path the class path. + */ public MemorySensitiveClassPathRepository(final ClassPath path) { super(path); } diff --git a/src/main/java/org/apache/bcel/util/ModularRuntimeImage.java b/src/main/java/org/apache/bcel/util/ModularRuntimeImage.java index 0dd666e9e8..612c3fa640 100644 --- a/src/main/java/org/apache/bcel/util/ModularRuntimeImage.java +++ b/src/main/java/org/apache/bcel/util/ModularRuntimeImage.java @@ -89,6 +89,11 @@ public void close() throws IOException { } } + /** + * Gets the file system. + * + * @return the file system. + */ public FileSystem getFileSystem() { return fileSystem; } diff --git a/src/main/java/org/apache/bcel/verifier/exc/InvalidMethodException.java b/src/main/java/org/apache/bcel/verifier/exc/InvalidMethodException.java index 1bd91126de..917de76d40 100644 --- a/src/main/java/org/apache/bcel/verifier/exc/InvalidMethodException.java +++ b/src/main/java/org/apache/bcel/verifier/exc/InvalidMethodException.java @@ -26,7 +26,11 @@ public class InvalidMethodException extends RuntimeException { private static final long serialVersionUID = -7060302743724808051L; - /** Constructs an InvalidMethodException with the specified detail message. */ + /** + * Constructs an InvalidMethodException with the specified detail message. + * + * @param message the detail message. + */ public InvalidMethodException(final String message) { super(message); } diff --git a/src/main/java/org/apache/bcel/verifier/exc/LinkingConstraintException.java b/src/main/java/org/apache/bcel/verifier/exc/LinkingConstraintException.java index 66fecdf2ab..8818e97103 100644 --- a/src/main/java/org/apache/bcel/verifier/exc/LinkingConstraintException.java +++ b/src/main/java/org/apache/bcel/verifier/exc/LinkingConstraintException.java @@ -31,4 +31,10 @@ public class LinkingConstraintException extends StructuralCodeConstraintException { private static final long serialVersionUID = -5239226345026321126L; + + /** + * Constructs a new LinkingConstraintException. + */ + public LinkingConstraintException() { + } } diff --git a/src/main/java/org/apache/bcel/verifier/exc/LoadingException.java b/src/main/java/org/apache/bcel/verifier/exc/LoadingException.java index 1647df309f..0fd435c03d 100644 --- a/src/main/java/org/apache/bcel/verifier/exc/LoadingException.java +++ b/src/main/java/org/apache/bcel/verifier/exc/LoadingException.java @@ -35,6 +35,8 @@ public LoadingException() { /** * Constructs a new LoadingException with the specified error message. + * + * @param message the error message. */ public LoadingException(final String message) { super(message); diff --git a/src/main/java/org/apache/bcel/verifier/exc/LocalVariableInfoInconsistentException.java b/src/main/java/org/apache/bcel/verifier/exc/LocalVariableInfoInconsistentException.java index 2e1c38a1cc..6567b01b86 100644 --- a/src/main/java/org/apache/bcel/verifier/exc/LocalVariableInfoInconsistentException.java +++ b/src/main/java/org/apache/bcel/verifier/exc/LocalVariableInfoInconsistentException.java @@ -34,6 +34,8 @@ public LocalVariableInfoInconsistentException() { /** * Constructs a new LocalVariableInfoInconsistentException with the specified error message. + * + * @param message the error message. */ public LocalVariableInfoInconsistentException(final String message) { super(message); diff --git a/src/main/java/org/apache/bcel/verifier/exc/StructuralCodeConstraintException.java b/src/main/java/org/apache/bcel/verifier/exc/StructuralCodeConstraintException.java index b508ecba7a..8f5e089a85 100644 --- a/src/main/java/org/apache/bcel/verifier/exc/StructuralCodeConstraintException.java +++ b/src/main/java/org/apache/bcel/verifier/exc/StructuralCodeConstraintException.java @@ -37,6 +37,8 @@ public StructuralCodeConstraintException() { /** * Constructs a new StructuralCodeConstraintException with the specified error message. + * + * @param message the error message. */ public StructuralCodeConstraintException(final String message) { super(message); diff --git a/src/main/java/org/apache/bcel/verifier/statics/LocalVariableInfo.java b/src/main/java/org/apache/bcel/verifier/statics/LocalVariableInfo.java index 6c02093627..b9cf33a1bf 100644 --- a/src/main/java/org/apache/bcel/verifier/statics/LocalVariableInfo.java +++ b/src/main/java/org/apache/bcel/verifier/statics/LocalVariableInfo.java @@ -35,6 +35,12 @@ public class LocalVariableInfo { /** The names database. KEY: String representing the offset integer. */ private final Hashtable names = new Hashtable<>(); + /** + * Constructs a new LocalVariableInfo. + */ + public LocalVariableInfo() { + } + /** * Adds information about name and type for a given offset. * From 725f7f3dc10829b0c046a074b5d60f979823af33 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Fri, 13 Feb 2026 17:41:19 -0500 Subject: [PATCH 24/83] Javadoc --- src/main/java/org/apache/bcel/Repository.java | 98 +++++++++++++++---- .../org/apache/bcel/classfile/NestHost.java | 6 ++ .../apache/bcel/classfile/NestMembers.java | 10 ++ .../apache/bcel/generic/MULTIANEWARRAY.java | 8 ++ .../java/org/apache/bcel/generic/NEW.java | 5 + .../org/apache/bcel/generic/NEWARRAY.java | 14 +++ .../java/org/apache/bcel/generic/NOP.java | 3 + .../generic/NameSignatureInstruction.java | 21 ++++ .../java/org/apache/bcel/generic/POP.java | 3 + .../java/org/apache/bcel/generic/POP2.java | 3 + .../org/apache/bcel/generic/PUTFIELD.java | 5 + .../org/apache/bcel/generic/PUTSTATIC.java | 5 + .../java/org/apache/bcel/generic/RET.java | 5 + .../java/org/apache/bcel/generic/RETURN.java | 3 + .../java/org/apache/bcel/generic/SALOAD.java | 3 + .../java/org/apache/bcel/generic/SASTORE.java | 3 + .../apache/bcel/verifier/NativeVerifier.java | 2 + 17 files changed, 179 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/apache/bcel/Repository.java b/src/main/java/org/apache/bcel/Repository.java index 7ef8af7c11..21a7ef1151 100644 --- a/src/main/java/org/apache/bcel/Repository.java +++ b/src/main/java/org/apache/bcel/Repository.java @@ -35,9 +35,16 @@ public abstract class Repository { private static org.apache.bcel.util.Repository repository = SyntheticRepository.getInstance(); + /** + * Constructs a new Repository. + */ + public Repository() { + } + /** * Adds clazz to repository if there isn't an equally named class already in there. * + * @param clazz the class to add. * @return old entry in repository. */ public static JavaClass addClass(final JavaClass clazz) { @@ -54,25 +61,33 @@ public static void clearCache() { } /** + * Gets all interfaces implemented by the class. + * + * @param clazz the class. * @return all interfaces implemented by class and its super classes and the interfaces that those interfaces extend, * and so on. (Some people call this a transitive hull). - * @throws ClassNotFoundException if any of the class's superclasses or superinterfaces can't be found + * @throws ClassNotFoundException if any of the class's superclasses or superinterfaces can't be found. */ public static JavaClass[] getInterfaces(final JavaClass clazz) throws ClassNotFoundException { return clazz.getAllInterfaces(); } /** + * Gets all interfaces implemented by the class. + * + * @param className the class name. * @return all interfaces implemented by class and its super classes and the interfaces that extend those interfaces, - * and so on + * and so on. * @throws ClassNotFoundException if the named class can't be found, or if any of its superclasses or superinterfaces - * can't be found + * can't be found. */ public static JavaClass[] getInterfaces(final String className) throws ClassNotFoundException { return getInterfaces(lookupClass(className)); } /** + * Gets the currently used repository instance. + * * @return currently used repository instance. */ public static org.apache.bcel.util.Repository getRepository() { @@ -80,48 +95,70 @@ public static org.apache.bcel.util.Repository getRepository() { } /** + * Gets the list of super classes. + * + * @param clazz the class. * @return list of super classes of clazz in ascending order, that is, Object is always the last element. - * @throws ClassNotFoundException if any of the superclasses can't be found + * @throws ClassNotFoundException if any of the superclasses can't be found. */ public static JavaClass[] getSuperClasses(final JavaClass clazz) throws ClassNotFoundException { return clazz.getSuperClasses(); } /** + * Gets the list of super classes. + * + * @param className the class name. * @return list of super classes of clazz in ascending order, that is, Object is always the last element. - * @throws ClassNotFoundException if the named class or any of its superclasses can't be found + * @throws ClassNotFoundException if the named class or any of its superclasses can't be found. */ public static JavaClass[] getSuperClasses(final String className) throws ClassNotFoundException { return getSuperClasses(lookupClass(className)); } /** + * Tests if clazz is an implementation of interface inter. + * + * @param clazz the class to test. + * @param inter the interface. * @return true, if clazz is an implementation of interface inter. - * @throws ClassNotFoundException if any superclasses or superinterfaces of clazz can't be found + * @throws ClassNotFoundException if any superclasses or superinterfaces of clazz can't be found. */ public static boolean implementationOf(final JavaClass clazz, final JavaClass inter) throws ClassNotFoundException { return clazz.implementationOf(inter); } /** + * Tests if clazz is an implementation of interface inter. + * + * @param clazz the class to test. + * @param inter the interface name. * @return true, if clazz is an implementation of interface inter. - * @throws ClassNotFoundException if inter or any superclasses or superinterfaces of clazz can't be found + * @throws ClassNotFoundException if inter or any superclasses or superinterfaces of clazz can't be found. */ public static boolean implementationOf(final JavaClass clazz, final String inter) throws ClassNotFoundException { return implementationOf(clazz, lookupClass(inter)); } /** + * Tests if clazz is an implementation of interface inter. + * + * @param clazz the class name to test. + * @param inter the interface. * @return true, if clazz is an implementation of interface inter. - * @throws ClassNotFoundException if clazz or any superclasses or superinterfaces of clazz can't be found + * @throws ClassNotFoundException if clazz or any superclasses or superinterfaces of clazz can't be found. */ public static boolean implementationOf(final String clazz, final JavaClass inter) throws ClassNotFoundException { return implementationOf(lookupClass(clazz), inter); } /** + * Tests if clazz is an implementation of interface inter. + * + * @param clazz the class name to test. + * @param inter the interface name. * @return true, if clazz is an implementation of interface inter. - * @throws ClassNotFoundException if clazz, inter, or any superclasses or superinterfaces of clazz can't be found + * @throws ClassNotFoundException if clazz, inter, or any superclasses or superinterfaces of clazz can't be found. */ public static boolean implementationOf(final String clazz, final String inter) throws ClassNotFoundException { return implementationOf(lookupClass(clazz), lookupClass(inter)); @@ -130,32 +167,46 @@ public static boolean implementationOf(final String clazz, final String inter) t /** * Equivalent to runtime "instanceof" operator. * + * @param clazz the class to test. + * @param superclass the superclass. * @return true, if clazz is an instance of superclass. - * @throws ClassNotFoundException if any superclasses or superinterfaces of clazz can't be found + * @throws ClassNotFoundException if any superclasses or superinterfaces of clazz can't be found. */ public static boolean instanceOf(final JavaClass clazz, final JavaClass superclass) throws ClassNotFoundException { return clazz.instanceOf(superclass); } /** + * Tests if clazz is an instance of superclass. + * + * @param clazz the class to test. + * @param superclass the superclass name. * @return true, if clazz is an instance of superclass. - * @throws ClassNotFoundException if superclass can't be found + * @throws ClassNotFoundException if superclass can't be found. */ public static boolean instanceOf(final JavaClass clazz, final String superclass) throws ClassNotFoundException { return instanceOf(clazz, lookupClass(superclass)); } /** + * Tests if clazz is an instance of superclass. + * + * @param clazz the class name to test. + * @param superclass the superclass. * @return true, if clazz is an instance of superclass. - * @throws ClassNotFoundException if clazz can't be found + * @throws ClassNotFoundException if clazz can't be found. */ public static boolean instanceOf(final String clazz, final JavaClass superclass) throws ClassNotFoundException { return instanceOf(lookupClass(clazz), superclass); } /** + * Tests if clazz is an instance of superclass. + * + * @param clazz the class name to test. + * @param superclass the superclass name. * @return true, if clazz is an instance of superclass. - * @throws ClassNotFoundException if either clazz or superclass can't be found + * @throws ClassNotFoundException if either clazz or superclass can't be found. */ public static boolean instanceOf(final String clazz, final String superclass) throws ClassNotFoundException { return instanceOf(lookupClass(clazz), lookupClass(superclass)); @@ -164,27 +215,32 @@ public static boolean instanceOf(final String clazz, final String superclass) th /** * Tries to find class source using the internal repository instance. * + * @param clazz the class. * @see Class * @return JavaClass object for given runtime class. - * @throws ClassNotFoundException if the class could not be found or parsed correctly + * @throws ClassNotFoundException if the class could not be found or parsed correctly. */ public static JavaClass lookupClass(final Class clazz) throws ClassNotFoundException { return repository.loadClass(clazz); } /** - * Lookups class somewhere found on your CLASSPATH, or whereever the repository instance looks for it. + * Lookups class somewhere found on your CLASSPATH, or wherever the repository instance looks for it. * + * @param className the class name. * @return class object for given fully qualified class name. - * @throws ClassNotFoundException if the class could not be found or parsed correctly + * @throws ClassNotFoundException if the class could not be found or parsed correctly. */ public static JavaClass lookupClass(final String className) throws ClassNotFoundException { return repository.loadClass(className); } /** + * Looks up the class file. + * + * @param className the class name. * @return class file object for given Java class by looking on the system class path; returns null if the class file - * can't be found + * can't be found. */ public static ClassPath.ClassFile lookupClassFile(final String className) { try (ClassPath path = repository.getClassPath()) { @@ -196,6 +252,8 @@ public static ClassPath.ClassFile lookupClassFile(final String className) { /** * Removes given class from repository. + * + * @param clazz the class to remove. */ public static void removeClass(final JavaClass clazz) { repository.removeClass(clazz); @@ -203,13 +261,17 @@ public static void removeClass(final JavaClass clazz) { /** * Removes class with given (fully qualified) name from repository. + * + * @param clazz the class name to remove. */ public static void removeClass(final String clazz) { repository.removeClass(repository.findClass(clazz)); } /** - * Sets repository instance to be used for class loading + * Sets repository instance to be used for class loading. + * + * @param rep the repository instance. */ public static void setRepository(final org.apache.bcel.util.Repository rep) { repository = rep; diff --git a/src/main/java/org/apache/bcel/classfile/NestHost.java b/src/main/java/org/apache/bcel/classfile/NestHost.java index b32ecc6dd7..9c2ffb7120 100644 --- a/src/main/java/org/apache/bcel/classfile/NestHost.java +++ b/src/main/java/org/apache/bcel/classfile/NestHost.java @@ -51,6 +51,8 @@ public final class NestHost extends Attribute { } /** + * Constructs a new NestHost. + * * @param nameIndex Index in constant pool. * @param length Content length in bytes. * @param hostClassIndex Host class index. @@ -105,6 +107,8 @@ public void dump(final DataOutputStream file) throws IOException { } /** + * Gets the host class index. + * * @return index into constant pool of host class name. */ public int getHostClassIndex() { @@ -112,6 +116,8 @@ public int getHostClassIndex() { } /** + * Sets the host class index. + * * @param hostClassIndex the host class index. */ public void setHostClassIndex(final int hostClassIndex) { diff --git a/src/main/java/org/apache/bcel/classfile/NestMembers.java b/src/main/java/org/apache/bcel/classfile/NestMembers.java index 4545d8a592..8571894347 100644 --- a/src/main/java/org/apache/bcel/classfile/NestMembers.java +++ b/src/main/java/org/apache/bcel/classfile/NestMembers.java @@ -54,6 +54,8 @@ public final class NestMembers extends Attribute { } /** + * Constructs a new NestMembers. + * * @param nameIndex Index in constant pool. * @param length Content length in bytes. * @param classes Table of indices in constant pool. @@ -115,6 +117,8 @@ public void dump(final DataOutputStream file) throws IOException { } /** + * Gets the classes. + * * @return array of indices into constant pool of class names. */ public int[] getClasses() { @@ -122,6 +126,8 @@ public int[] getClasses() { } /** + * Gets the class names. + * * @return string array of class names. */ public String[] getClassNames() { @@ -131,6 +137,8 @@ public String[] getClassNames() { } /** + * Gets the number of classes. + * * @return Length of classes table. */ public int getNumberClasses() { @@ -138,6 +146,8 @@ public int getNumberClasses() { } /** + * Sets the classes. + * * @param classes the list of class indexes Also redefines number_of_classes according to table length. */ public void setClasses(final int[] classes) { diff --git a/src/main/java/org/apache/bcel/generic/MULTIANEWARRAY.java b/src/main/java/org/apache/bcel/generic/MULTIANEWARRAY.java index b332a2e1fc..510d004489 100644 --- a/src/main/java/org/apache/bcel/generic/MULTIANEWARRAY.java +++ b/src/main/java/org/apache/bcel/generic/MULTIANEWARRAY.java @@ -42,6 +42,12 @@ public class MULTIANEWARRAY extends CPInstruction implements LoadClass, Allocati MULTIANEWARRAY() { } + /** + * Constructs a MULTIANEWARRAY instruction. + * + * @param index index into constant pool. + * @param dimensions number of dimensions. + */ public MULTIANEWARRAY(final int index, final short dimensions) { super(org.apache.bcel.Const.MULTIANEWARRAY, index); if (dimensions < 1) { @@ -90,6 +96,8 @@ public void dump(final DataOutputStream out) throws IOException { } /** + * Gets the number of dimensions. + * * @return number of dimensions to be created. */ public final short getDimensions() { diff --git a/src/main/java/org/apache/bcel/generic/NEW.java b/src/main/java/org/apache/bcel/generic/NEW.java index fcdd7202a8..fecee5ce6d 100644 --- a/src/main/java/org/apache/bcel/generic/NEW.java +++ b/src/main/java/org/apache/bcel/generic/NEW.java @@ -35,6 +35,11 @@ public class NEW extends CPInstruction implements LoadClass, AllocationInstructi NEW() { } + /** + * Constructs a NEW instruction. + * + * @param index index into constant pool. + */ public NEW(final int index) { super(org.apache.bcel.Const.NEW, index); } diff --git a/src/main/java/org/apache/bcel/generic/NEWARRAY.java b/src/main/java/org/apache/bcel/generic/NEWARRAY.java index fd355fd19c..8ac94470f1 100644 --- a/src/main/java/org/apache/bcel/generic/NEWARRAY.java +++ b/src/main/java/org/apache/bcel/generic/NEWARRAY.java @@ -43,10 +43,20 @@ public class NEWARRAY extends Instruction implements AllocationInstruction, Exce NEWARRAY() { } + /** + * Constructs a NEWARRAY instruction. + * + * @param type element type of array. + */ public NEWARRAY(final BasicType type) { this(type.getType()); } + /** + * Constructs a NEWARRAY instruction. + * + * @param type element type code. + */ public NEWARRAY(final byte type) { super(org.apache.bcel.Const.NEWARRAY, (short) 2); this.type = type; @@ -83,6 +93,8 @@ public Class[] getExceptions() { } /** + * Gets the type of the constructed array. + * * @return type of constructed array. */ public final Type getType() { @@ -90,6 +102,8 @@ public final Type getType() { } /** + * Gets the type code. + * * @return numeric code for basic element type. */ public final byte getTypecode() { diff --git a/src/main/java/org/apache/bcel/generic/NOP.java b/src/main/java/org/apache/bcel/generic/NOP.java index 452197f792..7d80bfa45d 100644 --- a/src/main/java/org/apache/bcel/generic/NOP.java +++ b/src/main/java/org/apache/bcel/generic/NOP.java @@ -23,6 +23,9 @@ */ public class NOP extends Instruction { + /** + * Constructs a NOP instruction. + */ public NOP() { super(org.apache.bcel.Const.NOP, (short) 1); } diff --git a/src/main/java/org/apache/bcel/generic/NameSignatureInstruction.java b/src/main/java/org/apache/bcel/generic/NameSignatureInstruction.java index bdb72d278c..f1a0349b30 100644 --- a/src/main/java/org/apache/bcel/generic/NameSignatureInstruction.java +++ b/src/main/java/org/apache/bcel/generic/NameSignatureInstruction.java @@ -31,14 +31,26 @@ */ public abstract class NameSignatureInstruction extends CPInstruction { + /** + * Constructs a NameSignatureInstruction. + */ public NameSignatureInstruction() { } + /** + * Constructs a NameSignatureInstruction. + * + * @param opcode the opcode. + * @param index index into constant pool. + */ public NameSignatureInstruction(final short opcode, final int index) { super(opcode, index); } /** + * Gets the name of the referenced method or field. + * + * @param cpg constant pool generator. * @return name of referenced method/field. */ public String getName(final ConstantPoolGen cpg) { @@ -47,6 +59,12 @@ public String getName(final ConstantPoolGen cpg) { return ((ConstantUtf8) cp.getConstant(cnat.getNameIndex())).getBytes(); } + /** + * Gets the name and type constant. + * + * @param cpg constant pool generator. + * @return the name and type constant. + */ public ConstantNameAndType getNameAndType(final ConstantPoolGen cpg) { final ConstantPool cp = cpg.getConstantPool(); final ConstantCP cmr = (ConstantCP) cp.getConstant(super.getIndex()); @@ -54,6 +72,9 @@ public ConstantNameAndType getNameAndType(final ConstantPoolGen cpg) { } /** + * Gets the signature of the referenced method or field. + * + * @param cpg constant pool generator. * @return signature of referenced method/field. */ public String getSignature(final ConstantPoolGen cpg) { diff --git a/src/main/java/org/apache/bcel/generic/POP.java b/src/main/java/org/apache/bcel/generic/POP.java index 96dbf0b7dd..fb18a9859d 100644 --- a/src/main/java/org/apache/bcel/generic/POP.java +++ b/src/main/java/org/apache/bcel/generic/POP.java @@ -27,6 +27,9 @@ */ public class POP extends StackInstruction implements PopInstruction { + /** + * Constructs a POP instruction. + */ public POP() { super(org.apache.bcel.Const.POP); } diff --git a/src/main/java/org/apache/bcel/generic/POP2.java b/src/main/java/org/apache/bcel/generic/POP2.java index 7189e5e2d9..c63390c803 100644 --- a/src/main/java/org/apache/bcel/generic/POP2.java +++ b/src/main/java/org/apache/bcel/generic/POP2.java @@ -27,6 +27,9 @@ */ public class POP2 extends StackInstruction implements PopInstruction { + /** + * Constructs a POP2 instruction. + */ public POP2() { super(org.apache.bcel.Const.POP2); } diff --git a/src/main/java/org/apache/bcel/generic/PUTFIELD.java b/src/main/java/org/apache/bcel/generic/PUTFIELD.java index 0125d03395..a42f61ab66 100644 --- a/src/main/java/org/apache/bcel/generic/PUTFIELD.java +++ b/src/main/java/org/apache/bcel/generic/PUTFIELD.java @@ -42,6 +42,11 @@ public class PUTFIELD extends FieldInstruction implements PopInstruction, Except PUTFIELD() { } + /** + * Constructs a PUTFIELD instruction. + * + * @param index index into constant pool. + */ public PUTFIELD(final int index) { super(Const.PUTFIELD, index); } diff --git a/src/main/java/org/apache/bcel/generic/PUTSTATIC.java b/src/main/java/org/apache/bcel/generic/PUTSTATIC.java index 1c9510cef6..03ee250a1b 100644 --- a/src/main/java/org/apache/bcel/generic/PUTSTATIC.java +++ b/src/main/java/org/apache/bcel/generic/PUTSTATIC.java @@ -42,6 +42,11 @@ public class PUTSTATIC extends FieldInstruction implements ExceptionThrower, Pop PUTSTATIC() { } + /** + * Constructs a PUTSTATIC instruction. + * + * @param index index into constant pool. + */ public PUTSTATIC(final int index) { super(Const.PUTSTATIC, index); } diff --git a/src/main/java/org/apache/bcel/generic/RET.java b/src/main/java/org/apache/bcel/generic/RET.java index 9f90066623..b2890970cd 100644 --- a/src/main/java/org/apache/bcel/generic/RET.java +++ b/src/main/java/org/apache/bcel/generic/RET.java @@ -41,6 +41,11 @@ public class RET extends Instruction implements IndexedInstruction, TypedInstruc RET() { } + /** + * Constructs a RET instruction. + * + * @param index index of local variable containing the return address. + */ public RET(final int index) { super(org.apache.bcel.Const.RET, (short) 2); setIndex(index); // May set wide as side effect diff --git a/src/main/java/org/apache/bcel/generic/RETURN.java b/src/main/java/org/apache/bcel/generic/RETURN.java index b508eba291..a97f1e4d71 100644 --- a/src/main/java/org/apache/bcel/generic/RETURN.java +++ b/src/main/java/org/apache/bcel/generic/RETURN.java @@ -27,6 +27,9 @@ */ public class RETURN extends ReturnInstruction { + /** + * Constructs a RETURN instruction. + */ public RETURN() { super(org.apache.bcel.Const.RETURN); } diff --git a/src/main/java/org/apache/bcel/generic/SALOAD.java b/src/main/java/org/apache/bcel/generic/SALOAD.java index 1a5c7253d6..7c156dfe89 100644 --- a/src/main/java/org/apache/bcel/generic/SALOAD.java +++ b/src/main/java/org/apache/bcel/generic/SALOAD.java @@ -27,6 +27,9 @@ */ public class SALOAD extends ArrayInstruction implements StackProducer { + /** + * Constructs a SALOAD instruction. + */ public SALOAD() { super(org.apache.bcel.Const.SALOAD); } diff --git a/src/main/java/org/apache/bcel/generic/SASTORE.java b/src/main/java/org/apache/bcel/generic/SASTORE.java index 0a24bbfaa3..d5581fc956 100644 --- a/src/main/java/org/apache/bcel/generic/SASTORE.java +++ b/src/main/java/org/apache/bcel/generic/SASTORE.java @@ -27,6 +27,9 @@ */ public class SASTORE extends ArrayInstruction implements StackConsumer { + /** + * Constructs a SASTORE instruction. + */ public SASTORE() { super(org.apache.bcel.Const.SASTORE); } diff --git a/src/main/java/org/apache/bcel/verifier/NativeVerifier.java b/src/main/java/org/apache/bcel/verifier/NativeVerifier.java index 6fe2f22b8e..5cb1ef9ea9 100644 --- a/src/main/java/org/apache/bcel/verifier/NativeVerifier.java +++ b/src/main/java/org/apache/bcel/verifier/NativeVerifier.java @@ -30,6 +30,8 @@ public abstract class NativeVerifier { /** * Works only on the first argument. + * + * @param args command line arguments. */ public static void main(final String[] args) { if (args.length != 1) { From 8d6d63f6122a6274b64b6de719f1534368ee6745 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Fri, 13 Feb 2026 18:03:17 -0500 Subject: [PATCH 25/83] Restore old comments --- .../apache/bcel/generic/EnumElementValueGen.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/apache/bcel/generic/EnumElementValueGen.java b/src/main/java/org/apache/bcel/generic/EnumElementValueGen.java index 70e710f100..0547db1296 100644 --- a/src/main/java/org/apache/bcel/generic/EnumElementValueGen.java +++ b/src/main/java/org/apache/bcel/generic/EnumElementValueGen.java @@ -108,9 +108,13 @@ public ElementValue getElementValue() { * @return the enum type string. */ public String getEnumTypeString() { - // ...existing code... + // Constant cc = getConstantPool().getConstant(typeIdx); + // ConstantClass cu8 = + // (ConstantClass) getConstantPool().getConstant(typeIdx); + // return + // ((ConstantUtf8) getConstantPool().getConstant(cu8.getNameIndex())).getBytes(); return ((ConstantUtf8) getConstantPool().getConstant(typeIdx)).getBytes(); - // ...existing code... + // return Utility.signatureToString(cu8.getBytes()); } /** @@ -120,7 +124,10 @@ public String getEnumTypeString() { */ public String getEnumValueString() { return ((ConstantUtf8) getConstantPool().getConstant(valueIdx)).getBytes(); - // ...existing code... + // ConstantString cu8 = + // (ConstantString) getConstantPool().getConstant(valueIdx); + // return + // ((ConstantUtf8) getConstantPool().getConstant(cu8.getStringIndex())).getBytes(); } /** From 867cd4d294b092f277524a4a142471b07feac1f1 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:56:55 -0500 Subject: [PATCH 26/83] Fix action types --- src/changes/changes.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index b01907563f..00942df241 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -61,10 +61,10 @@ The type attribute can be add,update,fix,remove. - Fix constant pool module access test on Java 26 and above #492. - Add support for permitted subclasses #493. - Add RecordComponentInfo.getAttribute(byte tag)#494. + Fix constant pool module access test on Java 26 and above #492. + Add support for permitted subclasses #493. + Add RecordComponentInfo.getAttribute(byte tag)#494. Bump org.apache.commons:commons-parent from 95 to 96. From 28fc315184895c896a717729f75ce79fd6f5956e Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:58:17 -0500 Subject: [PATCH 27/83] Deprecate org.apache.bcel.classfile.Utility.Utility(). Javadoc --- src/changes/changes.xml | 1 + .../org/apache/bcel/classfile/Utility.java | 84 ++++++++++++++++++- 2 files changed, 83 insertions(+), 2 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 00942df241..bc6820af41 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -62,6 +62,7 @@ The type attribute can be add,update,fix,remove. Fix constant pool module access test on Java 26 and above #492. + Deprecate org.apache.bcel.classfile.Utility.Utility(). Add support for permitted subclasses #493. Add RecordComponentInfo.getAttribute(byte tag)#494. diff --git a/src/main/java/org/apache/bcel/classfile/Utility.java b/src/main/java/org/apache/bcel/classfile/Utility.java index 4d3a547768..5c003b1577 100644 --- a/src/main/java/org/apache/bcel/classfile/Utility.java +++ b/src/main/java/org/apache/bcel/classfile/Utility.java @@ -48,6 +48,15 @@ // @since 6.0 methods are no longer final public abstract class Utility { + /** + * Constructs a Utility. + * + * @deprecated Will be private in the next major release. + */ + public Utility() { + // Default constructor for subclasses + } + /** * Decode characters into bytes. Used by decode() */ @@ -221,6 +230,8 @@ private static short byteToShort(final byte b) { } /** + * Gets the class or interface type name. + * * @param accessFlags the class flags. * @return "class" or "interface", depending on the ACC_INTERFACE flag. */ @@ -229,6 +240,10 @@ public static String classOrInterface(final int accessFlags) { } /** + * Clears a bit in a flag. + * + * @param flag the flag value. + * @param i the bit position. * @return 'flag' with bit 'i' set to 0. */ public static int clearBit(final int flag, final int i) { @@ -236,6 +251,15 @@ public static int clearBit(final int flag, final int i) { return (flag & bit) == 0 ? flag : flag ^ bit; } + /** + * Disassembles byte code. + * + * @param code byte code array. + * @param constantPool the constant pool. + * @param index offset in code array. + * @param length number of opcodes to decompile. + * @return disassembled string representation. + */ public static String codeToString(final byte[] code, final ConstantPool constantPool, final int index, final int length) { return codeToString(code, constantPool, index, length, true); } @@ -269,6 +293,14 @@ public static String codeToString(final byte[] code, final ConstantPool constant return buf.toString(); } + /** + * Disassembles byte code. + * + * @param bytes stream of bytes. + * @param constantPool the constant pool. + * @return disassembled string representation. + * @throws IOException if a failure from reading from the bytes argument occurs. + */ public static String codeToString(final ByteSequence bytes, final ConstantPool constantPool) throws IOException { return codeToString(bytes, constantPool, true); } @@ -580,6 +612,9 @@ public static String compactClassName(String str, final String prefix, final boo /** * Escape all occurrences of newline chars '\n', quotes \", etc. + * + * @param label the string to convert. + * @return the converted string. */ public static String convertString(final String label) { final char[] ch = label.toCharArray(); @@ -644,7 +679,8 @@ private static int countBrackets(final String brackets) { * * @param s the string to convert. * @param uncompress use gzip to uncompress the stream of bytes. - * @throws IOException if there's a gzip exception + * @return the decoded byte array. + * @throws IOException if there's a gzip exception. */ public static byte[] decode(final String s, final boolean uncompress) throws IOException { byte[] bytes; @@ -684,7 +720,8 @@ public static byte[] decode(final String s, final boolean uncompress) throws IOE * * @param bytes the byte array to convert. * @param compress use gzip to minimize string. - * @throws IOException if there's a gzip exception + * @return the encoded string. + * @throws IOException if there's a gzip exception. */ public static String encode(byte[] bytes, final boolean compress) throws IOException { if (compress) { @@ -819,6 +856,8 @@ public static String getSignature(String type) { } /** + * Tests if a character is part of a Java identifier. + * * @param ch the character to test if it's part of an identifier. * @return true, if character is one of (a, ... z, A, ... Z, 0, ... 9, _). */ @@ -827,6 +866,10 @@ public static boolean isJavaIdentifierPart(final char ch) { } /** + * Tests if a bit is set. + * + * @param flag the flag value. + * @param i the bit position. * @return true, if bit 'i' in 'flag' is set. */ public static boolean isSet(final int flag, final int i) { @@ -1039,14 +1082,35 @@ private static int pow2(final int n) { return 1 << n; } + /** + * Prints an array to a string. + * + * @param obj the array to print. + * @return the string representation. + */ public static String printArray(final Object[] obj) { return printArray(obj, true); } + /** + * Prints an array to a string. + * + * @param obj the array to print. + * @param braces whether to include braces. + * @return the string representation. + */ public static String printArray(final Object[] obj, final boolean braces) { return printArray(obj, braces, false); } + /** + * Prints an array to a string. + * + * @param obj the array to print. + * @param braces whether to include braces. + * @param quote whether to quote elements. + * @return the string representation. + */ public static String printArray(final Object[] obj, final boolean braces, final boolean quote) { if (obj == null) { return null; @@ -1071,10 +1135,22 @@ public static String printArray(final Object[] obj, final boolean braces, final return buf.toString(); } + /** + * Prints an array to a stream. + * + * @param out the output stream. + * @param obj the array to print. + */ public static void printArray(final PrintStream out, final Object[] obj) { out.println(printArray(obj, true)); } + /** + * Prints an array to a writer. + * + * @param out the output writer. + * @param obj the array to print. + */ public static void printArray(final PrintWriter out, final Object[] obj) { out.println(printArray(obj, true)); } @@ -1126,6 +1202,10 @@ public static short searchOpcode(final String name) { } /** + * Sets a bit in a flag. + * + * @param flag the flag value. + * @param i the bit position. * @return 'flag' with bit 'i' set to 1. */ public static int setBit(final int flag, final int i) { From 55fc4e857ff48457e1fcba1da1bef415e4b7f34c Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:53 -0500 Subject: [PATCH 28/83] Javadoc --- .../java/org/apache/bcel/classfile/PMGClass.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/org/apache/bcel/classfile/PMGClass.java b/src/main/java/org/apache/bcel/classfile/PMGClass.java index 7f4189ed2c..d1e72270c8 100644 --- a/src/main/java/org/apache/bcel/classfile/PMGClass.java +++ b/src/main/java/org/apache/bcel/classfile/PMGClass.java @@ -48,6 +48,8 @@ public final class PMGClass extends Attribute { } /** + * Constructs a PMGClass. + * * @param nameIndex Index in constant pool to CONSTANT_Utf8. * @param length Content length in bytes. * @param pmgIndex index in constant pool for source file name. @@ -103,6 +105,8 @@ public void dump(final DataOutputStream file) throws IOException { } /** + * Gets the PMG class index. + * * @return Index in constant pool of source file name. */ public int getPMGClassIndex() { @@ -110,6 +114,8 @@ public int getPMGClassIndex() { } /** + * Gets the PMG class name. + * * @return PMG class name. */ public String getPMGClassName() { @@ -117,6 +123,8 @@ public String getPMGClassName() { } /** + * Gets the PMG index. + * * @return Index in constant pool of source file name. */ public int getPMGIndex() { @@ -124,6 +132,8 @@ public int getPMGIndex() { } /** + * Gets the PMG name. + * * @return PMG name. */ public String getPMGName() { @@ -131,6 +141,8 @@ public String getPMGName() { } /** + * Sets the PMG class index. + * * @param pmgClassIndex The class index. */ public void setPMGClassIndex(final int pmgClassIndex) { @@ -138,6 +150,8 @@ public void setPMGClassIndex(final int pmgClassIndex) { } /** + * Sets the PMG index. + * * @param pmgIndex The index. */ public void setPMGIndex(final int pmgIndex) { From 92b5c5c41d5fc3c0763c067d2e5ffd3445802052 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:53 -0500 Subject: [PATCH 29/83] Javadoc --- .../classfile/ParameterAnnotationEntry.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/bcel/classfile/ParameterAnnotationEntry.java b/src/main/java/org/apache/bcel/classfile/ParameterAnnotationEntry.java index e05d99c119..fce2cc756e 100644 --- a/src/main/java/org/apache/bcel/classfile/ParameterAnnotationEntry.java +++ b/src/main/java/org/apache/bcel/classfile/ParameterAnnotationEntry.java @@ -34,6 +34,12 @@ public class ParameterAnnotationEntry implements Node { static final ParameterAnnotationEntry[] EMPTY_ARRAY = {}; + /** + * Creates parameter annotation entries from attributes. + * + * @param attributes the attributes. + * @return the parameter annotation entries. + */ public static ParameterAnnotationEntry[] createParameterAnnotationEntries(final Attribute[] attributes) { if (attributes == null) { return EMPTY_ARRAY; @@ -58,6 +64,7 @@ public static ParameterAnnotationEntry[] createParameterAnnotationEntries(final * Constructs object from input stream. * * @param input Input stream. + * @param constantPool the constant pool. * @throws IOException if an I/O error occurs. */ ParameterAnnotationEntry(final DataInput input, final ConstantPool constantPool) throws IOException { @@ -80,6 +87,12 @@ public void accept(final Visitor v) { v.visitParameterAnnotationEntry(this); } + /** + * Dumps parameter annotation entry to file stream. + * + * @param dos Output file stream. + * @throws IOException if an I/O error occurs. + */ public void dump(final DataOutputStream dos) throws IOException { dos.writeShort(annotationTable.length); for (final AnnotationEntry entry : annotationTable) { @@ -88,7 +101,9 @@ public void dump(final DataOutputStream dos) throws IOException { } /** - * returns the array of annotation entries in this annotation + * Gets the annotation entries. + * + * @return the array of annotation entries in this annotation. */ public AnnotationEntry[] getAnnotationEntries() { return annotationTable; From 14017b49001cf4fa5d92cc6cf1553b1907c0335a Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:53 -0500 Subject: [PATCH 30/83] Javadoc --- .../org/apache/bcel/classfile/ParameterAnnotations.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/bcel/classfile/ParameterAnnotations.java b/src/main/java/org/apache/bcel/classfile/ParameterAnnotations.java index 1001a34054..48cbd76450 100644 --- a/src/main/java/org/apache/bcel/classfile/ParameterAnnotations.java +++ b/src/main/java/org/apache/bcel/classfile/ParameterAnnotations.java @@ -101,13 +101,17 @@ public void dump(final DataOutputStream dos) throws IOException { } /** - * returns the array of parameter annotation entries in this parameter annotation. + * Gets the parameter annotation entries. + * + * @return the array of parameter annotation entries in this parameter annotation. */ public ParameterAnnotationEntry[] getParameterAnnotationEntries() { return parameterAnnotationTable; } /** + * Gets the parameter annotation table. + * * @return the parameter annotation entry table. */ public final ParameterAnnotationEntry[] getParameterAnnotationTable() { @@ -120,6 +124,8 @@ public Iterator iterator() { } /** + * Sets the parameter annotation table. + * * @param parameterAnnotationTable the entries to set in this parameter annotation. */ public final void setParameterAnnotationTable(final ParameterAnnotationEntry[] parameterAnnotationTable) { From 1ec663c3f57f9bd79077a02eb409eb5216f022b1 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:53 -0500 Subject: [PATCH 31/83] Javadoc --- .../org/apache/bcel/classfile/Signature.java | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/bcel/classfile/Signature.java b/src/main/java/org/apache/bcel/classfile/Signature.java index 67c1f29835..fdb8490c84 100644 --- a/src/main/java/org/apache/bcel/classfile/Signature.java +++ b/src/main/java/org/apache/bcel/classfile/Signature.java @@ -59,12 +59,24 @@ private static boolean identStart(final int ch) { return ch == 'T' || ch == 'L'; } - // @since 6.0 is no longer final + /** + * Tests if a string is an actual parameter list. + * + * @param s the string to test. + * @return true if the string is an actual parameter list. + * @since 6.0 is no longer final + */ public static boolean isActualParameterList(final String s) { return s.startsWith("L") && s.endsWith(">;"); } - // @since 6.0 is no longer final + /** + * Tests if a string is a formal parameter list. + * + * @param s the string to test. + * @return true if the string is a formal parameter list. + * @since 6.0 is no longer final + */ public static boolean isFormalParameterList(final String s) { return s.startsWith("<") && s.indexOf(':') > 0; } @@ -147,6 +159,12 @@ private static void matchIdent(final MyByteArrayInputStream in, final StringBuil } } + /** + * Translates a signature string. + * + * @param s the signature string. + * @return the translated signature. + */ public static String translate(final String s) { // System.out.println("Sig:" + s); final StringBuilder buf = new StringBuilder(); @@ -170,6 +188,8 @@ public static String translate(final String s) { } /** + * Constructs a Signature. + * * @param nameIndex Index in constant pool to CONSTANT_Utf8. * @param length Content length in bytes. * @param signatureIndex Index in constant pool to CONSTANT_Utf8. @@ -225,6 +245,8 @@ public void dump(final DataOutputStream file) throws IOException { } /** + * Gets the GJ signature. + * * @return GJ signature. */ public String getSignature() { @@ -232,6 +254,8 @@ public String getSignature() { } /** + * Gets the signature index. + * * @return Index in constant pool of source file name. */ public int getSignatureIndex() { @@ -239,6 +263,8 @@ public int getSignatureIndex() { } /** + * Sets the signature index. + * * @param signatureIndex the index info the constant pool of this signature. */ public void setSignatureIndex(final int signatureIndex) { From 6f737bc97cf5e8dc754e7fd03faae8c7eeb5f732 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:53 -0500 Subject: [PATCH 32/83] Javadoc --- .../bcel/classfile/SimpleElementValue.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/src/main/java/org/apache/bcel/classfile/SimpleElementValue.java b/src/main/java/org/apache/bcel/classfile/SimpleElementValue.java index 89c69cccc3..693274f3c1 100644 --- a/src/main/java/org/apache/bcel/classfile/SimpleElementValue.java +++ b/src/main/java/org/apache/bcel/classfile/SimpleElementValue.java @@ -31,6 +31,13 @@ public class SimpleElementValue extends ElementValue { private int index; + /** + * Constructs a SimpleElementValue. + * + * @param type the element value type. + * @param index the index into the constant pool. + * @param cpool the constant pool. + */ public SimpleElementValue(final int type, final int index, final ConstantPool cpool) { super(type, cpool); this.index = index; @@ -58,12 +65,19 @@ public void dump(final DataOutputStream dos) throws IOException { } /** + * Gets the value entry index in the constant pool. + * * @return Value entry index in the constant pool. */ public int getIndex() { return index; } + /** + * Gets the boolean value. + * + * @return the boolean value. + */ public boolean getValueBoolean() { if (super.getType() != PRIMITIVE_BOOLEAN) { throw new IllegalStateException("Don't call getValueBoolean() on a non BOOLEAN ElementValue"); @@ -72,6 +86,11 @@ public boolean getValueBoolean() { return bo.getBytes() != 0; } + /** + * Gets the byte value. + * + * @return the byte value. + */ public byte getValueByte() { if (super.getType() != PRIMITIVE_BYTE) { throw new IllegalStateException("Don't call getValueByte() on a non BYTE ElementValue"); @@ -79,6 +98,11 @@ public byte getValueByte() { return (byte) super.getConstantPool().getConstantInteger(getIndex()).getBytes(); } + /** + * Gets the char value. + * + * @return the char value. + */ public char getValueChar() { if (super.getType() != PRIMITIVE_CHAR) { throw new IllegalStateException("Don't call getValueChar() on a non CHAR ElementValue"); @@ -86,6 +110,11 @@ public char getValueChar() { return (char) super.getConstantPool().getConstantInteger(getIndex()).getBytes(); } + /** + * Gets the double value. + * + * @return the double value. + */ public double getValueDouble() { if (super.getType() != PRIMITIVE_DOUBLE) { throw new IllegalStateException("Don't call getValueDouble() on a non DOUBLE ElementValue"); @@ -94,6 +123,11 @@ public double getValueDouble() { return d.getBytes(); } + /** + * Gets the float value. + * + * @return the float value. + */ public float getValueFloat() { if (super.getType() != PRIMITIVE_FLOAT) { throw new IllegalStateException("Don't call getValueFloat() on a non FLOAT ElementValue"); @@ -102,6 +136,11 @@ public float getValueFloat() { return f.getBytes(); } + /** + * Gets the int value. + * + * @return the int value. + */ public int getValueInt() { if (super.getType() != PRIMITIVE_INT) { throw new IllegalStateException("Don't call getValueInt() on a non INT ElementValue"); @@ -109,6 +148,11 @@ public int getValueInt() { return super.getConstantPool().getConstantInteger(getIndex()).getBytes(); } + /** + * Gets the long value. + * + * @return the long value. + */ public long getValueLong() { if (super.getType() != PRIMITIVE_LONG) { throw new IllegalStateException("Don't call getValueLong() on a non LONG ElementValue"); @@ -117,6 +161,11 @@ public long getValueLong() { return j.getBytes(); } + /** + * Gets the short value. + * + * @return the short value. + */ public short getValueShort() { if (super.getType() != PRIMITIVE_SHORT) { throw new IllegalStateException("Don't call getValueShort() on a non SHORT ElementValue"); @@ -125,6 +174,11 @@ public short getValueShort() { return (short) s.getBytes(); } + /** + * Gets the string value. + * + * @return the string value. + */ public String getValueString() { if (super.getType() != STRING) { throw new IllegalStateException("Don't call getValueString() on a non STRING ElementValue"); @@ -132,6 +186,11 @@ public String getValueString() { return super.getConstantPool().getConstantUtf8(getIndex()).getBytes(); } + /** + * Sets the index into the constant pool. + * + * @param index the index. + */ public void setIndex(final int index) { this.index = index; } From 7e38ba90dfe4e79198db003efd4385776d7e01ca Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:54 -0500 Subject: [PATCH 33/83] Javadoc --- src/main/java/org/apache/bcel/classfile/SourceFile.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/org/apache/bcel/classfile/SourceFile.java b/src/main/java/org/apache/bcel/classfile/SourceFile.java index c6c1fbb268..55cbe049d3 100644 --- a/src/main/java/org/apache/bcel/classfile/SourceFile.java +++ b/src/main/java/org/apache/bcel/classfile/SourceFile.java @@ -50,6 +50,8 @@ public final class SourceFile extends Attribute { } /** + * Constructs a SourceFile. + * * @param nameIndex Index in constant pool to CONSTANT_Utf8, which should represent the string "SourceFile". * @param length Content length in bytes, the value should be 2. * @param constantPool The constant pool that this attribute is associated with. @@ -105,6 +107,8 @@ public void dump(final DataOutputStream file) throws IOException { } /** + * Gets the source file index. + * * @return Index in constant pool of source file name. */ public int getSourceFileIndex() { @@ -112,6 +116,8 @@ public int getSourceFileIndex() { } /** + * Gets the source file name. + * * @return Source file name. */ public String getSourceFileName() { @@ -119,6 +125,8 @@ public String getSourceFileName() { } /** + * Sets the source file index. + * * @param sourceFileIndex The source file index to set. */ public void setSourceFileIndex(final int sourceFileIndex) { From 17edf2dee1da78fcafbdc8bd6edff8fdcacee49a Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:54 -0500 Subject: [PATCH 34/83] Javadoc --- .../java/org/apache/bcel/classfile/StackMap.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/bcel/classfile/StackMap.java b/src/main/java/org/apache/bcel/classfile/StackMap.java index 6f1f959844..a070250cd2 100644 --- a/src/main/java/org/apache/bcel/classfile/StackMap.java +++ b/src/main/java/org/apache/bcel/classfile/StackMap.java @@ -67,10 +67,12 @@ public final class StackMap extends Attribute { } } - /* + /** + * Constructs a StackMap. + * * @param nameIndex Index of name. * @param length Content length in bytes. - * @param map Table of stack map entries. + * @param table Table of stack map entries. * @param constantPool Array of constants. */ public StackMap(final int nameIndex, final int length, final StackMapEntry[] table, final ConstantPool constantPool) { @@ -117,11 +119,18 @@ public void dump(final DataOutputStream file) throws IOException { } } + /** + * Gets the map length. + * + * @return the map length. + */ public int getMapLength() { return table.length; } /** + * Gets the stack map. + * * @return Array of stack map entries. */ public StackMapEntry[] getStackMap() { @@ -129,6 +138,8 @@ public StackMapEntry[] getStackMap() { } /** + * Sets the stack map. + * * @param table Array of stack map entries. */ public void setStackMap(final StackMapEntry[] table) { From 1ee240ff21612f5efdb71c7633daf4261f895c11 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:54 -0500 Subject: [PATCH 35/83] Javadoc --- .../apache/bcel/classfile/StackMapEntry.java | 62 ++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/bcel/classfile/StackMapEntry.java b/src/main/java/org/apache/bcel/classfile/StackMapEntry.java index 2dba4ec1be..5511b778cd 100644 --- a/src/main/java/org/apache/bcel/classfile/StackMapEntry.java +++ b/src/main/java/org/apache/bcel/classfile/StackMapEntry.java @@ -157,6 +157,8 @@ public void accept(final Visitor v) { } /** + * Creates a deep copy of this object. + * * @return deep copy of this object. */ public StackMapEntry copy() { @@ -210,17 +212,29 @@ public void dump(final DataOutputStream file) throws IOException { } } + /** + * Gets the byte code offset. + * + * @return the byte code offset. + */ public int getByteCodeOffset() { return byteCodeOffset; } /** + * Gets the constant pool. + * * @return Constant pool used by this object. */ public ConstantPool getConstantPool() { return constantPool; } + /** + * Gets the frame type. + * + * @return the frame type. + */ public int getFrameType() { return frameType; } @@ -261,18 +275,38 @@ int getMapEntrySize() { return len; } + /** + * Gets the number of locals. + * + * @return the number of locals. + */ public int getNumberOfLocals() { return typesOfLocals.length; } + /** + * Gets the number of stack items. + * + * @return the number of stack items. + */ public int getNumberOfStackItems() { return typesOfStackItems.length; } + /** + * Gets the types of locals. + * + * @return the types of locals. + */ public StackMapType[] getTypesOfLocals() { return typesOfLocals; } + /** + * Gets the types of stack items. + * + * @return the types of stack items. + */ public StackMapType[] getTypesOfStackItems() { return typesOfStackItems; } @@ -287,6 +321,11 @@ private boolean invalidFrameType(final int f) { // @formatter:on } + /** + * Sets the byte code offset. + * + * @param newOffset the new offset. + */ public void setByteCodeOffset(final int newOffset) { if (newOffset < 0 || newOffset > 32767) { throw new IllegalArgumentException("Invalid StackMap offset: " + newOffset); @@ -311,12 +350,19 @@ public void setByteCodeOffset(final int newOffset) { } /** + * Sets the constant pool. + * * @param constantPool Constant pool to be used for this object. */ public void setConstantPool(final ConstantPool constantPool) { this.constantPool = constantPool; } + /** + * Sets the frame type. + * + * @param ft the frame type. + */ public void setFrameType(final int ft) { if (ft >= Const.SAME_FRAME && ft <= Const.SAME_FRAME_MAX) { byteCodeOffset = ft - Const.SAME_FRAME; @@ -329,7 +375,9 @@ public void setFrameType(final int ft) { } /** + * Sets the number of locals (deprecated). * + * @param n the number of locals. * @deprecated Since 6.0 */ @java.lang.Deprecated @@ -337,17 +385,29 @@ public void setNumberOfLocals(final int n) { // TODO unused } /** + * Sets the number of stack items (deprecated). * + * @param n the number of stack items. * @deprecated Since 6.0 */ @java.lang.Deprecated public void setNumberOfStackItems(final int n) { // TODO unused } + /** + * Sets the types of locals. + * + * @param types the types of locals. + */ public void setTypesOfLocals(final StackMapType[] types) { typesOfLocals = types != null ? types : StackMapType.EMPTY_ARRAY; } + /** + * Sets the types of stack items. + * + * @param types the types of stack items. + */ public void setTypesOfStackItems(final StackMapType[] types) { typesOfStackItems = types != null ? types : StackMapType.EMPTY_ARRAY; } @@ -402,7 +462,7 @@ public String toString() { } /** - * Update the distance (as an offset delta) from this StackMap entry to the next. Note that this might cause the + * Updates the distance (as an offset delta) from this StackMap entry to the next. Note that this might cause the * frame type to change. Note also that delta may be negative. * * @param delta offset delta. From e0aa548441323dde19611de44e1e5bb207deff3e Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:54 -0500 Subject: [PATCH 36/83] Javadoc --- .../apache/bcel/classfile/StackMapType.java | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/bcel/classfile/StackMapType.java b/src/main/java/org/apache/bcel/classfile/StackMapType.java index 3c1f59bd52..59ee0f5a6e 100644 --- a/src/main/java/org/apache/bcel/classfile/StackMapType.java +++ b/src/main/java/org/apache/bcel/classfile/StackMapType.java @@ -33,6 +33,9 @@ */ public final class StackMapType implements Node, Cloneable { + /** + * Empty array constant. + */ public static final StackMapType[] EMPTY_ARRAY = {}; // BCELifier code generator writes calls to constructor translating null to EMPTY_ARRAY private byte type; @@ -40,8 +43,11 @@ public final class StackMapType implements Node, Cloneable { private ConstantPool constantPool; /** + * Constructs a StackMapType. + * * @param type type tag as defined in the Constants interface. * @param index index to constant pool, or byte code offset. + * @param constantPool the constant pool. */ public StackMapType(final byte type, final int index, final ConstantPool constantPool) { this.type = checkType(type); @@ -53,6 +59,7 @@ public StackMapType(final byte type, final int index, final ConstantPool constan * Constructs object from file stream. * * @param file Input stream. + * @param constantPool the constant pool. * @throws IOException if an I/O error occurs. */ StackMapType(final DataInput file, final ConstantPool constantPool) throws IOException { @@ -83,6 +90,8 @@ private byte checkType(final byte type) { } /** + * Creates a deep copy of this object. + * * @return deep copy of this object. */ public StackMapType copy() { @@ -118,6 +127,8 @@ public String getClassName() { } /** + * Gets the constant pool. + * * @return Constant pool used by this object. */ public ConstantPool getConstantPool() { @@ -125,18 +136,27 @@ public ConstantPool getConstantPool() { } /** + * Gets the index. + * * @return index to constant pool if type == ITEM_Object, or offset in byte code, if type == ITEM_NewObject, and -1 - * otherwise + * otherwise. */ public int getIndex() { return index; } + /** + * Gets the type. + * + * @return the type. + */ public byte getType() { return type; } /** + * Checks if this type has an index. + * * @return true, if type is either ITEM_Object or ITEM_NewObject. */ public boolean hasIndex() { @@ -157,16 +177,28 @@ private String printIndex() { } /** + * Sets the constant pool. + * * @param constantPool Constant pool to be used for this object. */ public void setConstantPool(final ConstantPool constantPool) { this.constantPool = constantPool; } + /** + * Sets the index. + * + * @param index the index. + */ public void setIndex(final int index) { this.index = index; } + /** + * Sets the type. + * + * @param type the type. + */ public void setType(final byte type) { this.type = checkType(type); } From d78e5f3e6aa167691ad2c3c757536876211051e1 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:54 -0500 Subject: [PATCH 37/83] Javadoc --- src/main/java/org/apache/bcel/classfile/Synthetic.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/apache/bcel/classfile/Synthetic.java b/src/main/java/org/apache/bcel/classfile/Synthetic.java index ac86f5b9c0..69c63f2381 100644 --- a/src/main/java/org/apache/bcel/classfile/Synthetic.java +++ b/src/main/java/org/apache/bcel/classfile/Synthetic.java @@ -45,6 +45,8 @@ public final class Synthetic extends Attribute { /** + * Constructs a Synthetic attribute. + * * @param nameIndex Index in constant pool to CONSTANT_Utf8, which should represent the string "Synthetic". * @param length JVM Specification: "The value of the attribute_length item must be zero.". * @param bytes Attribute contents. From 167f769d384ba5493d5e4f74723d175a32d1eeaf Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:54 -0500 Subject: [PATCH 38/83] Javadoc --- src/main/java/org/apache/bcel/classfile/Unknown.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/org/apache/bcel/classfile/Unknown.java b/src/main/java/org/apache/bcel/classfile/Unknown.java index fc4d1c3b43..9848302eb3 100644 --- a/src/main/java/org/apache/bcel/classfile/Unknown.java +++ b/src/main/java/org/apache/bcel/classfile/Unknown.java @@ -137,6 +137,8 @@ public void dump(final DataOutputStream file) throws IOException { } /** + * Gets the data bytes. + * * @return data bytes. */ public byte[] getBytes() { @@ -152,6 +154,8 @@ public String getName() { } /** + * Sets the data bytes. + * * @param bytes the bytes to set. */ public void setBytes(final byte[] bytes) { From 5ef2a47f58fbef63a806d9ad551eab71baf707d1 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:55 -0500 Subject: [PATCH 39/83] Javadoc --- .../java/org/apache/bcel/generic/ObjectType.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/apache/bcel/generic/ObjectType.java b/src/main/java/org/apache/bcel/generic/ObjectType.java index 2fd4c4ff7a..aff11edb28 100644 --- a/src/main/java/org/apache/bcel/generic/ObjectType.java +++ b/src/main/java/org/apache/bcel/generic/ObjectType.java @@ -52,9 +52,11 @@ public ObjectType(final String className) { } /** - * Java Virtual Machine Specification edition 2, īŋŊ 5.4.4 Access Control + * Java Virtual Machine Specification edition 2, 5.4.4 Access Control. * - * @throws ClassNotFoundException if the class referenced by this type can't be found + * @param accessor the accessing type. + * @return true if accessible. + * @throws ClassNotFoundException if the class referenced by this type can't be found. */ public boolean accessibleTo(final ObjectType accessor) throws ClassNotFoundException { final JavaClass jc = Repository.lookupClass(className); @@ -82,6 +84,8 @@ public String getClassName() { } /** + * Gets the hash code. + * * @return a hash code value for the object. */ @Override @@ -92,6 +96,7 @@ public int hashCode() { /** * If "this" doesn't reference a class, it references an interface or a non-existant entity. * + * @return true if it references a class, false otherwise. * @deprecated (since 6.0) this method returns an inaccurate result if the class or interface referenced cannot be * found: use referencesClassExact() instead */ @@ -119,6 +124,7 @@ public boolean referencesClassExact() throws ClassNotFoundException { /** * If "this" doesn't reference an interface, it references a class or a non-existant entity. * + * @return true if it references an interface, false otherwise. * @deprecated (since 6.0) this method returns an inaccurate result if the class or interface referenced cannot be * found: use referencesInterfaceExact() instead */ @@ -146,7 +152,9 @@ public boolean referencesInterfaceExact() throws ClassNotFoundException { /** * Return true if this type is a subclass of given ObjectType. * - * @throws ClassNotFoundException if any of this class's superclasses can't be found + * @param superclass the superclass to check against. + * @return true if this is a subclass. + * @throws ClassNotFoundException if any of this class's superclasses can't be found. */ public boolean subclassOf(final ObjectType superclass) throws ClassNotFoundException { if (referencesInterfaceExact() || superclass.referencesInterfaceExact()) { From 91287f6e343059e77b7258138022d510b0146585 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:55 -0500 Subject: [PATCH 40/83] Javadoc --- .../java/org/apache/bcel/generic/PUSH.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/main/java/org/apache/bcel/generic/PUSH.java b/src/main/java/org/apache/bcel/generic/PUSH.java index b0e5a42fd8..565a52fc19 100644 --- a/src/main/java/org/apache/bcel/generic/PUSH.java +++ b/src/main/java/org/apache/bcel/generic/PUSH.java @@ -45,6 +45,8 @@ public PUSH(final ConstantPoolGen cp, final ArrayType value) { } /** + * Constructs a PUSH for a boolean value. + * * @param cp Constant pool. * @param value to push. */ @@ -54,6 +56,8 @@ public PUSH(final ConstantPoolGen cp, final boolean value) { } /** + * Constructs a PUSH for a Boolean value. + * * @param cp Constant pool. * @param value to push. */ @@ -73,6 +77,8 @@ public PUSH(final ConstantPoolGen cp, final Character value) { } /** + * Constructs a PUSH for a double value. + * * @param cp Constant pool. * @param value to push. */ @@ -87,6 +93,8 @@ public PUSH(final ConstantPoolGen cp, final double value) { } /** + * Constructs a PUSH for a float value. + * * @param cp Constant pool. * @param value to push. */ @@ -121,6 +129,8 @@ public PUSH(final ConstantPoolGen cp, final int value) { } /** + * Constructs a PUSH for a long value. + * * @param cp Constant pool. * @param value to push. */ @@ -135,6 +145,8 @@ public PUSH(final ConstantPoolGen cp, final long value) { } /** + * Constructs a PUSH for a Number value. + * * @param cp Constant pool. * @param value to push. */ @@ -153,6 +165,7 @@ public PUSH(final ConstantPoolGen cp, final Number value) { } /** + * Constructs a PUSH for an ObjectType value. * * @param cp The constant pool. * @param value to push. @@ -167,6 +180,8 @@ public PUSH(final ConstantPoolGen cp, final ObjectType value) { } /** + * Constructs a PUSH for a String value. + * * @param cp Constant pool. * @param value to push. */ @@ -178,6 +193,11 @@ public PUSH(final ConstantPoolGen cp, final String value) { } } + /** + * Gets the instruction. + * + * @return the instruction. + */ public Instruction getInstruction() { return instruction; } From ed8f580ea8d16a1f839b654db384f9506a694b57 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:55 -0500 Subject: [PATCH 41/83] Javadoc --- src/main/java/org/apache/bcel/generic/ReferenceType.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/bcel/generic/ReferenceType.java b/src/main/java/org/apache/bcel/generic/ReferenceType.java index f78be865a8..d4a3f22bce 100644 --- a/src/main/java/org/apache/bcel/generic/ReferenceType.java +++ b/src/main/java/org/apache/bcel/generic/ReferenceType.java @@ -28,12 +28,18 @@ public abstract class ReferenceType extends Type { /** - * Class is non-abstract but not instantiable from the outside + * Class is non-abstract but not instantiable from the outside. */ ReferenceType() { super(Const.T_OBJECT, ""); } + /** + * Constructs a ReferenceType. + * + * @param t the type. + * @param s the signature. + */ protected ReferenceType(final byte t, final String s) { super(t, s); } From ffe0301d6c34a9aa19cad632a826299bc8ad0bd9 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:55 -0500 Subject: [PATCH 42/83] Javadoc --- src/main/java/org/apache/bcel/generic/ReturnInstruction.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/org/apache/bcel/generic/ReturnInstruction.java b/src/main/java/org/apache/bcel/generic/ReturnInstruction.java index b76e67dfa2..9f10336034 100644 --- a/src/main/java/org/apache/bcel/generic/ReturnInstruction.java +++ b/src/main/java/org/apache/bcel/generic/ReturnInstruction.java @@ -46,6 +46,11 @@ public Class[] getExceptions() { return new Class[] {ExceptionConst.ILLEGAL_MONITOR_STATE}; } + /** + * Gets the type of the returned value. + * + * @return the type. + */ public Type getType() { final short opcode = super.getOpcode(); switch (opcode) { From 4957bbf011b6cadd282bee3981a343541476c1a1 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:55 -0500 Subject: [PATCH 43/83] Javadoc --- .../java/org/apache/bcel/generic/ReturnaddressType.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/org/apache/bcel/generic/ReturnaddressType.java b/src/main/java/org/apache/bcel/generic/ReturnaddressType.java index 1c4818bf73..f59ae63e2b 100644 --- a/src/main/java/org/apache/bcel/generic/ReturnaddressType.java +++ b/src/main/java/org/apache/bcel/generic/ReturnaddressType.java @@ -27,6 +27,7 @@ */ public class ReturnaddressType extends Type { + /** Predefined constant for a returnaddress with no target. */ public static final ReturnaddressType NO_TARGET = new ReturnaddressType(); private InstructionHandle returnTarget; @@ -39,6 +40,8 @@ private ReturnaddressType() { /** * Creates a ReturnaddressType object with a target. + * + * @param returnTarget the target instruction. */ public ReturnaddressType(final InstructionHandle returnTarget) { super(Const.T_ADDRESS, ""); @@ -47,6 +50,9 @@ public ReturnaddressType(final InstructionHandle returnTarget) { /** * Returns if the two Returnaddresses refer to the same target. + * + * @param rat the object to compare. + * @return true if equal. */ @Override public boolean equals(final Object rat) { @@ -61,6 +67,8 @@ public boolean equals(final Object rat) { } /** + * Gets the target of this ReturnaddressType. + * * @return the target of this ReturnaddressType. */ public InstructionHandle getTarget() { From 17de723e847d5816ac7aa1b07235728c1ea7b285 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:55 -0500 Subject: [PATCH 44/83] Javadoc --- src/main/java/org/apache/bcel/generic/SIPUSH.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/org/apache/bcel/generic/SIPUSH.java b/src/main/java/org/apache/bcel/generic/SIPUSH.java index 519895326c..3cc7d5daa0 100644 --- a/src/main/java/org/apache/bcel/generic/SIPUSH.java +++ b/src/main/java/org/apache/bcel/generic/SIPUSH.java @@ -40,6 +40,11 @@ public class SIPUSH extends Instruction implements ConstantPushInstruction { SIPUSH() { } + /** + * Constructs a SIPUSH. + * + * @param b the value. + */ public SIPUSH(final short b) { super(org.apache.bcel.Const.SIPUSH, (short) 3); this.b = b; From 80d12c0d57ff70d11861066f9ae19993ba744791 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:56 -0500 Subject: [PATCH 45/83] Javadoc --- src/main/java/org/apache/bcel/generic/SWAP.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/org/apache/bcel/generic/SWAP.java b/src/main/java/org/apache/bcel/generic/SWAP.java index 11cc455098..6deaaa4ebc 100644 --- a/src/main/java/org/apache/bcel/generic/SWAP.java +++ b/src/main/java/org/apache/bcel/generic/SWAP.java @@ -27,6 +27,9 @@ */ public class SWAP extends StackInstruction implements StackConsumer, StackProducer { + /** + * Constructs a SWAP instruction. + */ public SWAP() { super(org.apache.bcel.Const.SWAP); } From 9e36f9794895e954d1da654c9356f98f8a69665d Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:56 -0500 Subject: [PATCH 46/83] Javadoc --- src/main/java/org/apache/bcel/generic/SWITCH.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/org/apache/bcel/generic/SWITCH.java b/src/main/java/org/apache/bcel/generic/SWITCH.java index 9f976bd50d..24d64b1fbc 100644 --- a/src/main/java/org/apache/bcel/generic/SWITCH.java +++ b/src/main/java/org/apache/bcel/generic/SWITCH.java @@ -75,6 +75,13 @@ private static void sort(final int l, final int r, final int[] match, final Inst private final Select instruction; + /** + * Constructs a SWITCH with default maxGap of 1. + * + * @param match array of match values. + * @param targets the instructions to be branched to for each case. + * @param target the default target. + */ public SWITCH(final int[] match, final InstructionHandle[] targets, final InstructionHandle target) { this(match, targets, target, 1); } @@ -125,6 +132,11 @@ public SWITCH(final int[] match, final InstructionHandle[] targets, final Instru } } + /** + * Gets the instruction. + * + * @return the instruction. + */ public Instruction getInstruction() { return instruction; } From f50caf3b8429a0ef67171867b3d88f50ca6bb81b Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:56 -0500 Subject: [PATCH 47/83] Javadoc --- .../bcel/generic/SimpleElementValueGen.java | 90 ++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/bcel/generic/SimpleElementValueGen.java b/src/main/java/org/apache/bcel/generic/SimpleElementValueGen.java index de1080245f..b48e290a0c 100644 --- a/src/main/java/org/apache/bcel/generic/SimpleElementValueGen.java +++ b/src/main/java/org/apache/bcel/generic/SimpleElementValueGen.java @@ -40,6 +40,13 @@ public class SimpleElementValueGen extends ElementValueGen { // For 'class' this points to the class entry in the cpGen private final int idx; + /** + * Constructs a SimpleElementValueGen for a boolean value. + * + * @param type the element value type. + * @param cpGen the constant pool generator. + * @param value the boolean value. + */ public SimpleElementValueGen(final int type, final ConstantPoolGen cpGen, final boolean value) { super(type, cpGen); if (value) { @@ -49,41 +56,97 @@ public SimpleElementValueGen(final int type, final ConstantPoolGen cpGen, final } } + /** + * Constructs a SimpleElementValueGen for a byte value. + * + * @param type the element value type. + * @param cpGen the constant pool generator. + * @param value the byte value. + */ public SimpleElementValueGen(final int type, final ConstantPoolGen cpGen, final byte value) { super(type, cpGen); idx = getConstantPool().addInteger(value); } + /** + * Constructs a SimpleElementValueGen for a char value. + * + * @param type the element value type. + * @param cpGen the constant pool generator. + * @param value the char value. + */ public SimpleElementValueGen(final int type, final ConstantPoolGen cpGen, final char value) { super(type, cpGen); idx = getConstantPool().addInteger(value); } + /** + * Constructs a SimpleElementValueGen for a double value. + * + * @param type the element value type. + * @param cpGen the constant pool generator. + * @param value the double value. + */ public SimpleElementValueGen(final int type, final ConstantPoolGen cpGen, final double value) { super(type, cpGen); idx = getConstantPool().addDouble(value); } + /** + * Constructs a SimpleElementValueGen for a float value. + * + * @param type the element value type. + * @param cpGen the constant pool generator. + * @param value the float value. + */ public SimpleElementValueGen(final int type, final ConstantPoolGen cpGen, final float value) { super(type, cpGen); idx = getConstantPool().addFloat(value); } + /** + * Constructs a SimpleElementValueGen for an int value. + * + * @param type the element value type. + * @param cpGen the constant pool generator. + * @param value the int value. + */ public SimpleElementValueGen(final int type, final ConstantPoolGen cpGen, final int value) { super(type, cpGen); idx = getConstantPool().addInteger(value); } + /** + * Constructs a SimpleElementValueGen for a long value. + * + * @param type the element value type. + * @param cpGen the constant pool generator. + * @param value the long value. + */ public SimpleElementValueGen(final int type, final ConstantPoolGen cpGen, final long value) { super(type, cpGen); idx = getConstantPool().addLong(value); } + /** + * Constructs a SimpleElementValueGen for a short value. + * + * @param type the element value type. + * @param cpGen the constant pool generator. + * @param value the short value. + */ public SimpleElementValueGen(final int type, final ConstantPoolGen cpGen, final short value) { super(type, cpGen); idx = getConstantPool().addInteger(value); } + /** + * Constructs a SimpleElementValueGen for a String value. + * + * @param type the element value type. + * @param cpGen the constant pool generator. + * @param value the string value. + */ public SimpleElementValueGen(final int type, final ConstantPoolGen cpGen, final String value) { super(type, cpGen); idx = getConstantPool().addUtf8(value); @@ -95,6 +158,10 @@ public SimpleElementValueGen(final int type, final ConstantPoolGen cpGen, final /** * Protected ctor used for deserialization, doesn't *put* an entry in the constant pool, assumes the one at the supplied * index is correct. + * + * @param type the element value type. + * @param idx the constant pool index. + * @param cpGen the constant pool generator. */ protected SimpleElementValueGen(final int type, final int idx, final ConstantPoolGen cpGen) { super(type, cpGen); @@ -104,6 +171,10 @@ protected SimpleElementValueGen(final int type, final int idx, final ConstantPoo /** * The boolean controls whether we copy info from the 'old' constant pool to the 'new'. You need to use this ctor if the * annotation is being copied from one file to another. + * + * @param value the simple element value to copy. + * @param cpool the constant pool generator. + * @param copyPoolEntries whether to copy pool entries. */ public SimpleElementValueGen(final SimpleElementValue value, final ConstantPoolGen cpool, final boolean copyPoolEntries) { super(value.getElementValueType(), cpool); @@ -171,17 +242,29 @@ public void dump(final DataOutputStream dos) throws IOException { } /** - * Return immutable variant + * Gets the immutable variant. + * + * @return the immutable variant. */ @Override public ElementValue getElementValue() { return new SimpleElementValue(super.getElementValueType(), idx, getConstantPool().getConstantPool()); } + /** + * Gets the constant pool index. + * + * @return the index. + */ public int getIndex() { return idx; } + /** + * Gets the int value. + * + * @return the int value. + */ public int getValueInt() { if (super.getElementValueType() != PRIMITIVE_INT) { throw new IllegalStateException("Don't call getValueString() on a non STRING ElementValue"); @@ -190,6 +273,11 @@ public int getValueInt() { return c.getBytes(); } + /** + * Gets the string value. + * + * @return the string value. + */ public String getValueString() { if (super.getElementValueType() != STRING) { throw new IllegalStateException("Don't call getValueString() on a non STRING ElementValue"); From 3cb7ff9eba563aca2ffc965744ef0b6344089c7f Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:56 -0500 Subject: [PATCH 48/83] Javadoc --- src/main/java/org/apache/bcel/generic/TABLESWITCH.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/apache/bcel/generic/TABLESWITCH.java b/src/main/java/org/apache/bcel/generic/TABLESWITCH.java index b9cb2c5c59..b43742f86b 100644 --- a/src/main/java/org/apache/bcel/generic/TABLESWITCH.java +++ b/src/main/java/org/apache/bcel/generic/TABLESWITCH.java @@ -37,6 +37,8 @@ public class TABLESWITCH extends Select { } /** + * Constructs a TABLESWITCH instruction. + * * @param match sorted array of match values, match[0] must be low value, match[match_length - 1] high value. * @param targets where to branch for matched values. * @param defaultTarget default branch. From 60f4e2a887eecec81348a78c62e13ad65979c218 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:56 -0500 Subject: [PATCH 49/83] Javadoc --- .../java/org/apache/bcel/generic/TargetLostException.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/org/apache/bcel/generic/TargetLostException.java b/src/main/java/org/apache/bcel/generic/TargetLostException.java index e662e6e0c2..fd3b38f00f 100644 --- a/src/main/java/org/apache/bcel/generic/TargetLostException.java +++ b/src/main/java/org/apache/bcel/generic/TargetLostException.java @@ -48,8 +48,16 @@ public final class TargetLostException extends Exception { private static final long serialVersionUID = -6857272667645328384L; + + /** The target instruction handles that were lost. */ private final InstructionHandle[] targets; + /** + * Constructs a TargetLostException. + * + * @param targets the instruction handles. + * @param message the exception message. + */ TargetLostException(final InstructionHandle[] targets, final String message) { super(message); this.targets = targets; From f56aa1063c615a5722204a18a0a6928ca9a9b7c5 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:56 -0500 Subject: [PATCH 50/83] Javadoc --- .../java/org/apache/bcel/generic/Type.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/main/java/org/apache/bcel/generic/Type.java b/src/main/java/org/apache/bcel/generic/Type.java index 406e52b064..c27886ec18 100644 --- a/src/main/java/org/apache/bcel/generic/Type.java +++ b/src/main/java/org/apache/bcel/generic/Type.java @@ -41,27 +41,54 @@ public abstract class Type { */ public static final BasicType VOID = new BasicType(Const.T_VOID); + /** Predefined constant for boolean type. */ public static final BasicType BOOLEAN = new BasicType(Const.T_BOOLEAN); + + /** Predefined constant for int type. */ public static final BasicType INT = new BasicType(Const.T_INT); + + /** Predefined constant for short type. */ public static final BasicType SHORT = new BasicType(Const.T_SHORT); + + /** Predefined constant for byte type. */ public static final BasicType BYTE = new BasicType(Const.T_BYTE); + + /** Predefined constant for long type. */ public static final BasicType LONG = new BasicType(Const.T_LONG); + + /** Predefined constant for double type. */ public static final BasicType DOUBLE = new BasicType(Const.T_DOUBLE); + + /** Predefined constant for float type. */ public static final BasicType FLOAT = new BasicType(Const.T_FLOAT); + + /** Predefined constant for char type. */ public static final BasicType CHAR = new BasicType(Const.T_CHAR); + + /** Predefined constant for Object type. */ public static final ObjectType OBJECT = new ObjectType("java.lang.Object"); + + /** Predefined constant for Class type. */ public static final ObjectType CLASS = new ObjectType("java.lang.Class"); + + /** Predefined constant for String type. */ public static final ObjectType STRING = new ObjectType("java.lang.String"); + + /** Predefined constant for StringBuffer type. */ public static final ObjectType STRINGBUFFER = new ObjectType("java.lang.StringBuffer"); + + /** Predefined constant for Throwable type. */ public static final ObjectType THROWABLE = new ObjectType("java.lang.Throwable"); /** * Empty array. */ public static final Type[] NO_ARGS = {}; + /** Predefined constant for null type. */ public static final ReferenceType NULL = new ReferenceType() { }; + /** Predefined constant for unknown type. */ public static final Type UNKNOWN = new Type(Const.T_UNKNOWN, "") { }; @@ -164,6 +191,12 @@ static int getReturnTypeSize(final String signature) { return size(getTypeSize(signature.substring(index))); } + /** + * Gets the signature for a method. + * + * @param meth the method. + * @return the method signature. + */ public static String getSignature(final java.lang.reflect.Method meth) { final StringBuilder sb = new StringBuilder("("); final Class[] params = meth.getParameterTypes(); // avoid clone @@ -329,6 +362,12 @@ private static void wrap(final ThreadLocal tl, final int value) { @Deprecated protected String signature; // signature for the type TODO should be private + /** + * Constructs a Type. + * + * @param type the type constant. + * @param signature the type signature. + */ protected Type(final byte type, final String signature) { this.type = type; this.signature = signature; From 911c7bfccbd6e218bc408c0e799f85ee680724f0 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:57 -0500 Subject: [PATCH 51/83] Javadoc --- src/main/java/org/apache/bcel/util/ClassVector.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/org/apache/bcel/util/ClassVector.java b/src/main/java/org/apache/bcel/util/ClassVector.java index 5e78ba454d..890c48f14f 100644 --- a/src/main/java/org/apache/bcel/util/ClassVector.java +++ b/src/main/java/org/apache/bcel/util/ClassVector.java @@ -68,6 +68,9 @@ public JavaClass elementAt(final int index) { return vec.get(index); } + /** + * Initializes the vector when deserializing without data. + */ @SuppressWarnings("unused") // SE_TRANSIENT_FIELD_NOT_RESTORED private void readObjectNoData() { vec = new ArrayList<>(); From ef860e13a635f3d298a17d54fce3a78366359586 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:57 -0500 Subject: [PATCH 52/83] Javadoc --- .../org/apache/bcel/util/SyntheticRepository.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/org/apache/bcel/util/SyntheticRepository.java b/src/main/java/org/apache/bcel/util/SyntheticRepository.java index 3f1e99a195..ecc3ab208a 100644 --- a/src/main/java/org/apache/bcel/util/SyntheticRepository.java +++ b/src/main/java/org/apache/bcel/util/SyntheticRepository.java @@ -36,10 +36,21 @@ public class SyntheticRepository extends MemorySensitiveClassPathRepository { private static final Map MAP = new ConcurrentHashMap<>(); // CLASSPATH X REPOSITORY + /** + * Gets the singleton instance for the system class path. + * + * @return the singleton instance. + */ public static SyntheticRepository getInstance() { return getInstance(ClassPath.SYSTEM_CLASS_PATH); } + /** + * Gets the singleton instance for the given class path. + * + * @param classPath the class path. + * @return the singleton instance. + */ public static SyntheticRepository getInstance(final ClassPath classPath) { return MAP.computeIfAbsent(classPath, SyntheticRepository::new); } From 9bcad74988f363f7401f4bfde5ed335eb54b1369 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:57 -0500 Subject: [PATCH 53/83] Javadoc --- src/main/java/org/apache/bcel/verifier/PassVerifier.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/org/apache/bcel/verifier/PassVerifier.java b/src/main/java/org/apache/bcel/verifier/PassVerifier.java index 6fa325f889..b714e40e2a 100644 --- a/src/main/java/org/apache/bcel/verifier/PassVerifier.java +++ b/src/main/java/org/apache/bcel/verifier/PassVerifier.java @@ -46,6 +46,13 @@ public abstract class PassVerifier { /** The VerificationResult cache. */ private VerificationResult verificationResult; + /** + * Constructs a PassVerifier. + */ + public PassVerifier() { + // Default constructor for subclasses + } + /** * This method adds a (warning) message to the message pool of this PassVerifier. This method is normally only * internally used by BCEL's class file verifier "JustIce" and should not be used from the outside. @@ -78,6 +85,7 @@ public String[] getMessages() { /** * Returns the (warning) messages that this PassVerifier accumulated during its do_verify()ing work. * + * @return the list of messages. * @see #addMessage(String) * @see #do_verify() */ From a1c0a394b4de18d3a3ba201aba7394906cd9e3bb Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:57 -0500 Subject: [PATCH 54/83] Javadoc --- src/main/java/org/apache/bcel/verifier/TransitiveHull.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/apache/bcel/verifier/TransitiveHull.java b/src/main/java/org/apache/bcel/verifier/TransitiveHull.java index 7b9aebc6ec..6d26bc6075 100644 --- a/src/main/java/org/apache/bcel/verifier/TransitiveHull.java +++ b/src/main/java/org/apache/bcel/verifier/TransitiveHull.java @@ -31,6 +31,8 @@ public class TransitiveHull implements VerifierFactoryObserver { /** * This method implements a demonstration program of how to use the VerifierFactoryObserver. It transitively verifies * all class files encountered; this may take up a lot of time and, more notably, memory. + * + * @param args command line arguments (expects one argument: the root class to verify). */ public static void main(final String[] args) { if (args.length != 1) { From d9868aa0cce9a69989d0f38f77eba1e68d5eb0eb Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:57 -0500 Subject: [PATCH 55/83] Javadoc --- .../bcel/verifier/VerificationResult.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/bcel/verifier/VerificationResult.java b/src/main/java/org/apache/bcel/verifier/VerificationResult.java index 17a58cef47..557ed8b2ce 100644 --- a/src/main/java/org/apache/bcel/verifier/VerificationResult.java +++ b/src/main/java/org/apache/bcel/verifier/VerificationResult.java @@ -59,7 +59,12 @@ public class VerificationResult { /** The detailed message. */ private final String detailMessage; - /** The usual constructor. */ + /** + * The usual constructor. + * + * @param status the verification status. + * @param message the detail message. + */ public VerificationResult(final int status, final String message) { numeric = status; detailMessage = message; @@ -67,6 +72,9 @@ public VerificationResult(final int status, final String message) { /** * Returns if two VerificationResult instances are equal. + * + * @param o the object to compare. + * @return true if equal. */ @Override public boolean equals(final Object o) { @@ -77,13 +85,19 @@ public boolean equals(final Object o) { return other.numeric == this.numeric && other.detailMessage.equals(this.detailMessage); } - /** Returns a detailed message. */ + /** + * Returns a detailed message. + * + * @return the detail message. + */ public String getMessage() { return detailMessage; } /** * Returns one of the {@link #VERIFIED_OK}, {@link #VERIFIED_NOTYET}, {@link #VERIFIED_REJECTED} constants. + * + * @return the verification status. */ public int getStatus() { return numeric; From b6fb9e7e08466cc9bf9131e547273c582460a110 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:57 -0500 Subject: [PATCH 56/83] Javadoc --- .../java/org/apache/bcel/verifier/Verifier.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/bcel/verifier/Verifier.java b/src/main/java/org/apache/bcel/verifier/Verifier.java index 79e22e728d..4fa7474f8d 100644 --- a/src/main/java/org/apache/bcel/verifier/Verifier.java +++ b/src/main/java/org/apache/bcel/verifier/Verifier.java @@ -55,6 +55,8 @@ public class Verifier { * used. You should supply command-line arguments which are fully qualified namea of the classes to verify. These class * files must be somewhere in your CLASSPATH (refer to Sun's documentation for questions about this) or you must have * put the classes into the BCEL Repository yourself (via 'addClass(JavaClass)'). + * + * @param args command line arguments (fully qualified class names). */ public static void main(final String[] args) { System.out.println(BANNER); @@ -132,7 +134,11 @@ static void verifyType(final String fullyQualifiedClassName) throws ClassNotFoun className = fullyQualifiedClassName; } - /** Returns the VerificationResult for the given pass. */ + /** + * Returns the VerificationResult for the given pass. + * + * @return the VerificationResult for pass 1. + */ public VerificationResult doPass1() { if (p1v == null) { p1v = new Pass1Verifier(this); @@ -140,7 +146,11 @@ public VerificationResult doPass1() { return p1v.verify(); } - /** Returns the VerificationResult for the given pass. */ + /** + * Returns the VerificationResult for the given pass. + * + * @return the VerificationResult for pass 2. + */ public VerificationResult doPass2() { if (p2v == null) { p2v = new Pass2Verifier(this); @@ -184,6 +194,7 @@ public void flush() { * created recursively by another Verifier and you got a reference to this Verifier by the getVerifiers() method of the * VerifierFactory. * + * @return the class name. * @see VerifierFactory */ public final String getClassName() { @@ -194,6 +205,7 @@ public final String getClassName() { * This returns all the (warning) messages collected during verification. A prefix shows from which verifying pass a * message originates. * + * @return the array of messages. * @throws ClassNotFoundException if this class can't be found. */ public String[] getMessages() throws ClassNotFoundException { From 557c287d3bcece82fc458b919d6b3c0d3cf1745e Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:58 -0500 Subject: [PATCH 57/83] Javadoc --- .../bcel/verifier/VerifierAppFrame.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/main/java/org/apache/bcel/verifier/VerifierAppFrame.java b/src/main/java/org/apache/bcel/verifier/VerifierAppFrame.java index 5b78c60397..ea9f3c4032 100644 --- a/src/main/java/org/apache/bcel/verifier/VerifierAppFrame.java +++ b/src/main/java/org/apache/bcel/verifier/VerifierAppFrame.java @@ -54,42 +54,80 @@ public class VerifierAppFrame extends JFrame { private static final long serialVersionUID = -542458133073307640L; + + /** Machine-generated GUI component. */ private JPanel contentPane; + /** Machine-generated GUI component. */ private final JSplitPane jSplitPane1 = new JSplitPane(); + /** Machine-generated GUI component. */ private final JPanel jPanel1 = new JPanel(); + /** Machine-generated GUI component. */ private final JPanel jPanel2 = new JPanel(); + /** Machine-generated GUI component. */ private final JSplitPane jSplitPane2 = new JSplitPane(); + /** Machine-generated GUI component. */ private final JPanel jPanel3 = new JPanel(); + /** Machine-generated GUI component. */ private final JList classNamesJList = new JList<>(); + /** Machine-generated GUI component. */ private final GridLayout gridLayout1 = new GridLayout(); + /** Machine-generated GUI component. */ private final JPanel messagesPanel = new JPanel(); + /** Machine-generated GUI component. */ private final GridLayout gridLayout2 = new GridLayout(); + /** Machine-generated GUI component. */ private final JMenuBar jMenuBar1 = new JMenuBar(); + /** Machine-generated GUI component. */ private final JMenu jMenu1 = new JMenu(); + /** Machine-generated GUI component. */ private final JScrollPane jScrollPane1 = new JScrollPane(); + /** Machine-generated GUI component. */ private final JScrollPane messagesScrollPane = new JScrollPane(); + /** Machine-generated GUI component. */ private final JScrollPane jScrollPane3 = new JScrollPane(); + /** Machine-generated GUI component. */ private final GridLayout gridLayout4 = new GridLayout(); + /** Machine-generated GUI component. */ private final JScrollPane jScrollPane4 = new JScrollPane(); + /** Machine-generated GUI component. */ private final CardLayout cardLayout1 = new CardLayout(); + /** The current class being verified. */ private String currentClass; + /** Machine-generated GUI component. */ private final GridLayout gridLayout3 = new GridLayout(); + /** Machine-generated GUI component. */ private final JTextPane pass1TextPane = new JTextPane(); + /** Machine-generated GUI component. */ private final JTextPane pass2TextPane = new JTextPane(); + /** Machine-generated GUI component. */ private final JTextPane messagesTextPane = new JTextPane(); + /** Machine-generated GUI component. */ private final JMenuItem newFileMenuItem = new JMenuItem(); + /** Machine-generated GUI component. */ private final JSplitPane jSplitPane3 = new JSplitPane(); + /** Machine-generated GUI component. */ private final JSplitPane jSplitPane4 = new JSplitPane(); + /** Machine-generated GUI component. */ private final JScrollPane jScrollPane2 = new JScrollPane(); + /** Machine-generated GUI component. */ private final JScrollPane jScrollPane5 = new JScrollPane(); + /** Machine-generated GUI component. */ private final JScrollPane jScrollPane6 = new JScrollPane(); + /** Machine-generated GUI component. */ private final JScrollPane jScrollPane7 = new JScrollPane(); + /** Machine-generated GUI component. */ private final JList pass3aJList = new JList<>(); + /** Machine-generated GUI component. */ private final JList pass3bJList = new JList<>(); + /** Machine-generated GUI component. */ private final JTextPane pass3aTextPane = new JTextPane(); + /** Machine-generated GUI component. */ private final JTextPane pass3bTextPane = new JTextPane(); + /** Machine-generated GUI component. */ private final JMenu jMenu2 = new JMenu(); + /** Machine-generated GUI component. */ private final JMenuItem whatisMenuItem = new JMenuItem(); + /** Machine-generated GUI component. */ private final JMenuItem aboutMenuItem = new JMenuItem(); /** Constructs a new instance. */ From e70c0f5026f987a5f8070e42d32f414868f40b69 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:58 -0500 Subject: [PATCH 58/83] Javadoc --- .../java/org/apache/bcel/verifier/VerifierFactory.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/org/apache/bcel/verifier/VerifierFactory.java b/src/main/java/org/apache/bcel/verifier/VerifierFactory.java index 15a72c0e18..9326d92efe 100644 --- a/src/main/java/org/apache/bcel/verifier/VerifierFactory.java +++ b/src/main/java/org/apache/bcel/verifier/VerifierFactory.java @@ -44,6 +44,8 @@ public class VerifierFactory { /** * Adds the VerifierFactoryObserver o to the list of observers. + * + * @param o the observer to add. */ public static void attach(final VerifierFactoryObserver o) { OBSVERVERS.add(o); @@ -61,6 +63,8 @@ public static void clear() { /** * Removes the VerifierFactoryObserver o from the list of observers. + * + * @param o the observer to remove. */ public static void detach(final VerifierFactoryObserver o) { OBSVERVERS.remove(o); @@ -70,6 +74,7 @@ public static void detach(final VerifierFactoryObserver o) { * Returns the (only) verifier responsible for the class with the given name. Possibly a new Verifier object is * transparently created. * + * @param fullyQualifiedClassName the fully qualified class name. * @return the (only) verifier responsible for the class with the given name. */ public static Verifier getVerifier(final String fullyQualifiedClassName) { @@ -83,6 +88,8 @@ public static Verifier getVerifier(final String fullyQualifiedClassName) { /** * Returns all Verifier instances created so far. This is useful when a Verifier recursively lets the VerifierFactory * create other Verifier instances and if you want to verify the transitive hull of referenced class files. + * + * @return array of all Verifier instances. */ public static Verifier[] getVerifiers() { return MAP.values().toArray(Verifier.EMPTY_ARRAY); From eb24e1f6fe6b453b00d58f0636d5871cec1c287e Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:58 -0500 Subject: [PATCH 59/83] Javadoc --- .../org/apache/bcel/verifier/VerifierFactoryListModel.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/org/apache/bcel/verifier/VerifierFactoryListModel.java b/src/main/java/org/apache/bcel/verifier/VerifierFactoryListModel.java index fda9a7767f..b2246860fd 100644 --- a/src/main/java/org/apache/bcel/verifier/VerifierFactoryListModel.java +++ b/src/main/java/org/apache/bcel/verifier/VerifierFactoryListModel.java @@ -37,6 +37,9 @@ public class VerifierFactoryListModel implements VerifierFactoryObserver, ListMo private final List listeners = new ArrayList<>(); private final Set cache = new TreeSet<>(); + /** + * Constructs a VerifierFactoryListModel. + */ public VerifierFactoryListModel() { VerifierFactory.attach(this); update(null); // fill cache. From fd04cdcb60867c2e27a0c820d9b9e9fde5a697cb Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:58 -0500 Subject: [PATCH 60/83] Javadoc --- .../java/org/apache/bcel/verifier/VerifierFactoryObserver.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/apache/bcel/verifier/VerifierFactoryObserver.java b/src/main/java/org/apache/bcel/verifier/VerifierFactoryObserver.java index 15f772447b..96aa67dc05 100644 --- a/src/main/java/org/apache/bcel/verifier/VerifierFactoryObserver.java +++ b/src/main/java/org/apache/bcel/verifier/VerifierFactoryObserver.java @@ -32,6 +32,8 @@ public interface VerifierFactoryObserver { /** * VerifierFactoryObserver instances are notified invoking this method. The String argument is the fully qualified class * name of a class a new Verifier instance created by the VerifierFactory operates on. + * + * @param s the fully qualified class name. */ void update(String s); } From 0a8517887fe5c0c1cbb260714afab714a7380b08 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:58 -0500 Subject: [PATCH 61/83] Javadoc --- .../apache/bcel/verifier/VerifyDialog.java | 80 ++++++++++++++++--- 1 file changed, 68 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/apache/bcel/verifier/VerifyDialog.java b/src/main/java/org/apache/bcel/verifier/VerifyDialog.java index e3c6c11ffa..32c111bd81 100644 --- a/src/main/java/org/apache/bcel/verifier/VerifyDialog.java +++ b/src/main/java/org/apache/bcel/verifier/VerifyDialog.java @@ -144,42 +144,82 @@ public VerifyDialog() { initialize(); } - /** Machine-generated. */ + /** + * Constructs a new instance. + * + * @param owner the parent Dialog. + */ public VerifyDialog(final Dialog owner) { super(owner); } - /** Machine-generated. */ + /** + * Constructs a new instance. + * + * @param owner the parent Dialog. + * @param modal whether the dialog is modal. + */ public VerifyDialog(final Dialog owner, final boolean modal) { super(owner, modal); } - /** Machine-generated. */ + /** + * Constructs a new instance. + * + * @param owner the parent Dialog. + * @param title the dialog title. + */ public VerifyDialog(final Dialog owner, final String title) { super(owner, title); } - /** Machine-generated. */ + /** + * Constructs a new instance. + * + * @param owner the parent Dialog. + * @param title the dialog title. + * @param modal whether the dialog is modal. + */ public VerifyDialog(final Dialog owner, final String title, final boolean modal) { super(owner, title, modal); } - /** Machine-generated. */ + /** + * Constructs a new instance. + * + * @param owner the parent Frame. + */ public VerifyDialog(final Frame owner) { super(owner); } - /** Machine-generated. */ + /** + * Constructs a new instance. + * + * @param owner the parent Frame. + * @param modal whether the dialog is modal. + */ public VerifyDialog(final Frame owner, final boolean modal) { super(owner, modal); } - /** Machine-generated. */ + /** + * Constructs a new instance. + * + * @param owner the parent Frame. + * @param title the dialog title. + */ public VerifyDialog(final Frame owner, final String title) { super(owner, title); } - /** Machine-generated. */ + /** + * Constructs a new instance. + * + * @param owner the parent Frame. + * @param title the dialog title. + * @param modal whether the dialog is modal. + */ public VerifyDialog(final Frame owner, final String title, final boolean modal) { super(owner, title, modal); } @@ -259,7 +299,11 @@ private void connEtoC4(final ActionEvent arg1) { } } - /** Machine-generated. */ + /** + * Called when an action is performed. + * + * @param actionEvent the action event. + */ public void flushButton_ActionPerformed(final ActionEvent actionEvent) { VerifierFactory.getVerifier(className).flush(); Repository.removeClass(className); // Make sure it will be reloaded. @@ -486,7 +530,11 @@ private void initialize() { // user code end } - /** Machine-generated. */ + /** + * Called when an action is performed. + * + * @param actionEvent the action event. + */ public void pass1Button_ActionPerformed(final ActionEvent actionEvent) { final Verifier v = VerifierFactory.getVerifier(className); final VerificationResult vr = v.doPass1(); @@ -500,7 +548,11 @@ public void pass1Button_ActionPerformed(final ActionEvent actionEvent) { } } - /** Machine-generated. */ + /** + * Called when an action is performed. + * + * @param actionEvent the action event. + */ public void pass2Button_ActionPerformed(final ActionEvent actionEvent) { pass1Button_ActionPerformed(actionEvent); final Verifier v = VerifierFactory.getVerifier(className); @@ -519,7 +571,11 @@ public void pass2Button_ActionPerformed(final ActionEvent actionEvent) { } } - /** Machine-generated. */ + /** + * Called when an action is performed. + * + * @param actionEvent the action event. + */ public void pass4Button_ActionPerformed(final ActionEvent actionEvent) { pass2Button_ActionPerformed(actionEvent); Color color = Color.green; From e189ff935ec79aee4677540e84c0d35309cad7b4 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:58 -0500 Subject: [PATCH 62/83] Javadoc --- .../bcel/verifier/exc/StaticCodeConstraintException.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/org/apache/bcel/verifier/exc/StaticCodeConstraintException.java b/src/main/java/org/apache/bcel/verifier/exc/StaticCodeConstraintException.java index 243296a719..2d9ae4c67d 100644 --- a/src/main/java/org/apache/bcel/verifier/exc/StaticCodeConstraintException.java +++ b/src/main/java/org/apache/bcel/verifier/exc/StaticCodeConstraintException.java @@ -27,6 +27,11 @@ public abstract class StaticCodeConstraintException extends CodeConstraintException { private static final long serialVersionUID = 3858523065007725128L; + /** + * Constructs a StaticCodeConstraintException. + * + * @param message the exception message. + */ public StaticCodeConstraintException(final String message) { super(message); } From 416b355ab451ca3658409b2a80b45a178ebcc90b Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:58 -0500 Subject: [PATCH 63/83] Javadoc --- .../exc/StaticCodeInstructionConstraintException.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/org/apache/bcel/verifier/exc/StaticCodeInstructionConstraintException.java b/src/main/java/org/apache/bcel/verifier/exc/StaticCodeInstructionConstraintException.java index 05d0e956ca..c798e066e6 100644 --- a/src/main/java/org/apache/bcel/verifier/exc/StaticCodeInstructionConstraintException.java +++ b/src/main/java/org/apache/bcel/verifier/exc/StaticCodeInstructionConstraintException.java @@ -28,6 +28,11 @@ public class StaticCodeInstructionConstraintException extends StaticCodeConstraintException { private static final long serialVersionUID = 4987255974346614794L; + /** + * Constructs a StaticCodeInstructionConstraintException. + * + * @param message the exception message. + */ public StaticCodeInstructionConstraintException(final String message) { super(message); } From 6e5095f4a57428cc6375aaa57498c0da4bb2e054 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:59 -0500 Subject: [PATCH 64/83] Javadoc --- .../exc/StaticCodeInstructionOperandConstraintException.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/org/apache/bcel/verifier/exc/StaticCodeInstructionOperandConstraintException.java b/src/main/java/org/apache/bcel/verifier/exc/StaticCodeInstructionOperandConstraintException.java index bfbda883f9..e0da7ef6da 100644 --- a/src/main/java/org/apache/bcel/verifier/exc/StaticCodeInstructionOperandConstraintException.java +++ b/src/main/java/org/apache/bcel/verifier/exc/StaticCodeInstructionOperandConstraintException.java @@ -28,6 +28,11 @@ public class StaticCodeInstructionOperandConstraintException extends StaticCodeConstraintException { private static final long serialVersionUID = 4780787099381933487L; + /** + * Constructs a StaticCodeInstructionOperandConstraintException. + * + * @param message the exception message. + */ public StaticCodeInstructionOperandConstraintException(final String message) { super(message); } From c7893fcb677da9362e669f5f65473cb23bc861c7 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:59 -0500 Subject: [PATCH 65/83] Javadoc --- src/main/java/org/apache/bcel/verifier/exc/Utility.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/bcel/verifier/exc/Utility.java b/src/main/java/org/apache/bcel/verifier/exc/Utility.java index 7d09e42709..b0d06c8c74 100644 --- a/src/main/java/org/apache/bcel/verifier/exc/Utility.java +++ b/src/main/java/org/apache/bcel/verifier/exc/Utility.java @@ -28,7 +28,12 @@ */ public final class Utility { - /** This method returns the stack trace of a Throwable instance as a String. */ + /** + * This method returns the stack trace of a Throwable instance as a String. + * + * @param t the Throwable instance. + * @return the stack trace as a String. + */ public static String getStackTrace(final Throwable t) { final StringWriter sw = new StringWriter(); final PrintWriter pw = new PrintWriter(sw); From e7f84c3d75e27005caac2ace2dc671fe9bf9b24d Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:59 -0500 Subject: [PATCH 66/83] Javadoc --- .../java/org/apache/bcel/verifier/statics/Pass1Verifier.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/apache/bcel/verifier/statics/Pass1Verifier.java b/src/main/java/org/apache/bcel/verifier/statics/Pass1Verifier.java index 154062bc3b..c73b0b8b22 100644 --- a/src/main/java/org/apache/bcel/verifier/statics/Pass1Verifier.java +++ b/src/main/java/org/apache/bcel/verifier/statics/Pass1Verifier.java @@ -50,6 +50,7 @@ public final class Pass1Verifier extends PassVerifier { /** * Should only be instantiated by a Verifier. * + * @param verifier the verifier. * @see Verifier */ public Pass1Verifier(final Verifier verifier) { From 9569541f41022ff4e4a13894c9034d48a6b7c362 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:59 -0500 Subject: [PATCH 67/83] Javadoc --- .../java/org/apache/bcel/verifier/statics/Pass2Verifier.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java b/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java index 7588cbd598..641df5349c 100644 --- a/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java +++ b/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java @@ -1254,6 +1254,7 @@ private static boolean validMethodName(final String name, final boolean allowSta /** * Should only be instantiated by a Verifier. * + * @param verifier the verifier. * @see Verifier */ public Pass2Verifier(final Verifier verifier) { @@ -1449,6 +1450,9 @@ private void finalMethodsAreNotOverridden() { * pass-2-verified correctly. The method number method_nr is the method you get using * {@code Repository.lookupClass(myOwner.getClassname()).getMethods()[method_nr];}. You should not add own information. * Leave that to JustIce. + * + * @param methodNr the method number. + * @return the LocalVariablesInfo object or null. */ public LocalVariablesInfo getLocalVariablesInfo(final int methodNr) { if (verify() != VerificationResult.VR_OK) { From 01565f8e1aa88345d28fe803d37c64cd9937e64f Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:59 -0500 Subject: [PATCH 68/83] Javadoc --- .../bcel/verifier/statics/Pass3aVerifier.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/bcel/verifier/statics/Pass3aVerifier.java b/src/main/java/org/apache/bcel/verifier/statics/Pass3aVerifier.java index 885d527767..a2e163229e 100644 --- a/src/main/java/org/apache/bcel/verifier/statics/Pass3aVerifier.java +++ b/src/main/java/org/apache/bcel/verifier/statics/Pass3aVerifier.java @@ -895,7 +895,12 @@ private static boolean contains(final int[] ints, final int i) { */ private Code code; - /** Should only be instantiated by a Verifier. */ + /** + * Should only be instantiated by a Verifier. + * + * @param verifier the verifier. + * @param methodNo the method number. + */ public Pass3aVerifier(final Verifier verifier, final int methodNo) { this.verifier = verifier; this.methodNo = methodNo; @@ -1069,7 +1074,11 @@ public VerificationResult do_verify() { } } - /** Returns the method number as supplied when instantiating. */ + /** + * Returns the method number as supplied when instantiating. + * + * @return the method number. + */ public int getMethodNo() { return methodNo; } @@ -1196,6 +1205,9 @@ private void pass3StaticInstructionOperandsChecks() { * * Returns the String representation of the Object obj; this is obj.toString() if it does not throw any * RuntimeException, or else it is a string derived only from obj's class name. + * + * @param obj the object to convert to string. + * @return the string representation. */ protected String tostring(final Object obj) { String ret; From 08f6a27815ea8399bb7926f42b0158cdd748d956 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 08:59:59 -0500 Subject: [PATCH 69/83] Javadoc --- .../verifier/structurals/OperandStack.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/main/java/org/apache/bcel/verifier/structurals/OperandStack.java b/src/main/java/org/apache/bcel/verifier/structurals/OperandStack.java index 9b54fc6fc3..cc8465ed3c 100644 --- a/src/main/java/org/apache/bcel/verifier/structurals/OperandStack.java +++ b/src/main/java/org/apache/bcel/verifier/structurals/OperandStack.java @@ -40,6 +40,8 @@ public class OperandStack implements Cloneable { /** * Creates an empty stack with a maximum of maxStack slots. + * + * @param maxStack the maximum stack size. */ public OperandStack(final int maxStack) { this.maxStack = maxStack; @@ -47,6 +49,9 @@ public OperandStack(final int maxStack) { /** * Creates an otherwise empty stack with a maximum of maxStack slots and the ObjectType 'obj' at the top. + * + * @param maxStack the maximum stack size. + * @param obj the object type to place at the top. */ public OperandStack(final int maxStack, final ObjectType obj) { this.maxStack = maxStack; @@ -88,6 +93,7 @@ public boolean equals(final Object o) { /** * Returns a (typed!) clone of this. * + * @return a clone of this operand stack. * @see #clone() */ public OperandStack getClone() { @@ -95,6 +101,8 @@ public OperandStack getClone() { } /** + * Gets the hash code. + * * @return a hash code value for the object. */ @Override @@ -104,6 +112,8 @@ public int hashCode() { /** * Replaces all occurrences of u in this OperandStack instance with an "initialized" ObjectType. + * + * @param u the uninitialized object type. */ public void initializeObject(final UninitializedObjectType u) { for (int i = 0; i < stack.size(); i++) { @@ -115,6 +125,8 @@ public void initializeObject(final UninitializedObjectType u) { /** * Returns true IFF this OperandStack is empty. + * + * @return true if empty, false otherwise. */ public boolean isEmpty() { return stack.isEmpty(); @@ -122,6 +134,8 @@ public boolean isEmpty() { /** * Returns the number of stack slots this stack can hold. + * + * @return the maximum stack size. */ public int maxStack() { return this.maxStack; @@ -130,6 +144,8 @@ public int maxStack() { /** * Merges another stack state into this instance's stack state. See the Java Virtual Machine Specification, Second * Edition, page 146: 4.9.2 for details. + * + * @param s the stack to merge. */ public void merge(final OperandStack s) { try { @@ -169,6 +185,8 @@ public void merge(final OperandStack s) { /** * Returns the element on top of the stack. The element is not popped off the stack! + * + * @return the top element. */ public Type peek() { return peek(0); @@ -177,6 +195,9 @@ public Type peek() { /** * Returns the element that's i elements below the top element; that means, iff i==0 the top element is returned. The * element is not popped off the stack! + * + * @param i the depth. + * @return the element at the specified depth. */ public Type peek(final int i) { return stack.get(size() - i - 1); @@ -184,6 +205,8 @@ public Type peek(final int i) { /** * Returns the element on top of the stack. The element is popped off the stack. + * + * @return the popped element. */ public Type pop() { return stack.remove(size() - 1); @@ -192,6 +215,7 @@ public Type pop() { /** * Pops i elements off the stack. Always returns null. * + * @param count the number of elements to pop. * @return Always returns null. */ public Type pop(final int count) { @@ -203,6 +227,8 @@ public Type pop(final int count) { /** * Pushes a Type object onto the stack. + * + * @param type the type to push. */ public void push(final Type type) { if (type == null) { @@ -219,6 +245,8 @@ public void push(final Type type) { /** * Returns the size of this OperandStack; that means, how many Type objects there are. + * + * @return the stack size. */ public int size() { return stack.size(); @@ -227,6 +255,7 @@ public int size() { /** * Returns the number of stack slots used. * + * @return the number of slots used. * @see #maxStack() */ public int slotsUsed() { @@ -243,6 +272,8 @@ public int slotsUsed() { /** * Returns a String representation of this OperandStack instance. + * + * @return string representation. */ @Override public String toString() { From 69eb1bf7967c15dc2878afc9b1bdfbc8ebead3ed Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 09:00:00 -0500 Subject: [PATCH 70/83] Javadoc --- .../apache/bcel/verifier/structurals/Pass3bVerifier.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/bcel/verifier/structurals/Pass3bVerifier.java b/src/main/java/org/apache/bcel/verifier/structurals/Pass3bVerifier.java index 0865362d78..850faca7fc 100644 --- a/src/main/java/org/apache/bcel/verifier/structurals/Pass3bVerifier.java +++ b/src/main/java/org/apache/bcel/verifier/structurals/Pass3bVerifier.java @@ -149,6 +149,8 @@ public int size() { /** * This class should only be instantiated by a Verifier. * + * @param myOwner the verifier that owns this Pass3bVerifier. + * @param methodNo the method number. * @see org.apache.bcel.verifier.Verifier */ public Pass3bVerifier(final Verifier myOwner, final int methodNo) { @@ -405,7 +407,11 @@ public VerificationResult do_verify() { return VerificationResult.VR_OK; } - /** Returns the method number as supplied when instantiating. */ + /** + * Returns the method number as supplied when instantiating. + * + * @return the method number. + */ public int getMethodNo() { return methodNo; } From ed6e196674eaf358c21f9d4d7fa1846cbd89653b Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 09:00:00 -0500 Subject: [PATCH 71/83] Javadoc --- .../org/apache/bcel/verifier/structurals/Subroutines.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/org/apache/bcel/verifier/structurals/Subroutines.java b/src/main/java/org/apache/bcel/verifier/structurals/Subroutines.java index 870456f33c..8a73bf6257 100644 --- a/src/main/java/org/apache/bcel/verifier/structurals/Subroutines.java +++ b/src/main/java/org/apache/bcel/verifier/structurals/Subroutines.java @@ -551,6 +551,8 @@ public Subroutines(final MethodGen mg, final boolean enableJustIceCheck) { * Returns the Subroutine object associated with the given leader (that is, the first instruction of the subroutine). * You must not use this to get the top-level instructions modeled as a Subroutine object. * + * @param leader the leader instruction handle. + * @return the Subroutine object. * @see #getTopLevel() */ public Subroutine getSubroutine(final InstructionHandle leader) { @@ -572,6 +574,7 @@ public Subroutine getSubroutine(final InstructionHandle leader) { * object. It is a special Subroutine object where you must not invoke getEnteringJsrInstructions() or * getLeavingRET(). * + * @return the top-level Subroutine. * @see Subroutine#getEnteringJsrInstructions() * @see Subroutine#getLeavingRET() */ @@ -611,6 +614,8 @@ private void noRecursiveCalls(final Subroutine sub, final Set set) { * using getSubroutine(InstructionHandle). Returns 'null' if the given InstructionHandle lies in so-called 'dead code', * for example code that can never be executed. * + * @param any the instruction handle. + * @return the Subroutine object or null. * @see #getSubroutine(InstructionHandle) * @see #getTopLevel() */ From 7151c5dff42d2ef265bcc9b2cd73c95b16779481 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 09:00:55 -0500 Subject: [PATCH 72/83] Enable Javadoc doclint in GH CI --- .github/workflows/maven.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 647479cfcb..9ed6a6b143 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -54,4 +54,4 @@ jobs: distribution: ${{ runner.os == 'macOS' && matrix.java == '8' && 'zulu' || 'temurin' }} java-version: ${{ matrix.java }} - name: Build with Maven - run: mvn --errors --show-version --batch-mode --no-transfer-progress -DtrimStackTrace=false -Ddoclint=none + run: mvn --errors --show-version --batch-mode --no-transfer-progress -DtrimStackTrace=false From a95cf90bb0bb5bd783d83312778dcb657398ca08 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 09:03:00 -0500 Subject: [PATCH 73/83] Use lower case Javadoc
 tags

---
 src/examples/HelloWorldBuilder.java                       | 4 ++--
 src/main/java/org/apache/bcel/generic/AALOAD.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/AASTORE.java        | 4 ++--
 src/main/java/org/apache/bcel/generic/ACONST_NULL.java    | 4 ++--
 src/main/java/org/apache/bcel/generic/ALOAD.java          | 4 ++--
 src/main/java/org/apache/bcel/generic/ANEWARRAY.java      | 4 ++--
 src/main/java/org/apache/bcel/generic/ARETURN.java        | 4 ++--
 src/main/java/org/apache/bcel/generic/ARRAYLENGTH.java    | 4 ++--
 src/main/java/org/apache/bcel/generic/ASTORE.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/ATHROW.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/BALOAD.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/BASTORE.java        | 4 ++--
 src/main/java/org/apache/bcel/generic/BIPUSH.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/CALOAD.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/CASTORE.java        | 4 ++--
 src/main/java/org/apache/bcel/generic/CHECKCAST.java      | 4 ++--
 src/main/java/org/apache/bcel/generic/D2F.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/D2I.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/D2L.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/DADD.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/DALOAD.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/DASTORE.java        | 4 ++--
 src/main/java/org/apache/bcel/generic/DCMPG.java          | 4 ++--
 src/main/java/org/apache/bcel/generic/DCMPL.java          | 4 ++--
 src/main/java/org/apache/bcel/generic/DCONST.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/DDIV.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/DLOAD.java          | 4 ++--
 src/main/java/org/apache/bcel/generic/DMUL.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/DNEG.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/DREM.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/DRETURN.java        | 4 ++--
 src/main/java/org/apache/bcel/generic/DSTORE.java         | 2 +-
 src/main/java/org/apache/bcel/generic/DSUB.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/DUP.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/DUP2.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/DUP2_X1.java        | 4 ++--
 src/main/java/org/apache/bcel/generic/DUP2_X2.java        | 4 ++--
 src/main/java/org/apache/bcel/generic/DUP_X1.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/DUP_X2.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/F2D.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/F2I.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/F2L.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/FADD.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/FALOAD.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/FASTORE.java        | 4 ++--
 src/main/java/org/apache/bcel/generic/FCMPG.java          | 4 ++--
 src/main/java/org/apache/bcel/generic/FCMPL.java          | 4 ++--
 src/main/java/org/apache/bcel/generic/FCONST.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/FDIV.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/FLOAD.java          | 4 ++--
 src/main/java/org/apache/bcel/generic/FMUL.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/FNEG.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/FREM.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/FRETURN.java        | 4 ++--
 src/main/java/org/apache/bcel/generic/FSTORE.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/FSUB.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/GETFIELD.java       | 8 ++++----
 src/main/java/org/apache/bcel/generic/GETSTATIC.java      | 8 ++++----
 src/main/java/org/apache/bcel/generic/I2B.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/I2C.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/I2D.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/I2F.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/I2L.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/I2S.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/IADD.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/IALOAD.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/IAND.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/IASTORE.java        | 4 ++--
 src/main/java/org/apache/bcel/generic/ICONST.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/IDIV.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/IFEQ.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/IFGE.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/IFGT.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/IFLE.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/IFLT.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/IFNE.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/IFNONNULL.java      | 4 ++--
 src/main/java/org/apache/bcel/generic/IFNULL.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/IF_ACMPEQ.java      | 4 ++--
 src/main/java/org/apache/bcel/generic/IF_ACMPNE.java      | 4 ++--
 src/main/java/org/apache/bcel/generic/IF_ICMPEQ.java      | 4 ++--
 src/main/java/org/apache/bcel/generic/IF_ICMPGE.java      | 4 ++--
 src/main/java/org/apache/bcel/generic/IF_ICMPGT.java      | 4 ++--
 src/main/java/org/apache/bcel/generic/IF_ICMPLE.java      | 4 ++--
 src/main/java/org/apache/bcel/generic/IF_ICMPLT.java      | 4 ++--
 src/main/java/org/apache/bcel/generic/IF_ICMPNE.java      | 4 ++--
 src/main/java/org/apache/bcel/generic/ILOAD.java          | 4 ++--
 src/main/java/org/apache/bcel/generic/IMUL.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/INEG.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/INSTANCEOF.java     | 4 ++--
 .../java/org/apache/bcel/generic/INVOKEINTERFACE.java     | 4 ++--
 src/main/java/org/apache/bcel/generic/INVOKESPECIAL.java  | 4 ++--
 src/main/java/org/apache/bcel/generic/INVOKESTATIC.java   | 4 ++--
 src/main/java/org/apache/bcel/generic/INVOKEVIRTUAL.java  | 4 ++--
 src/main/java/org/apache/bcel/generic/IOR.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/IREM.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/IRETURN.java        | 4 ++--
 src/main/java/org/apache/bcel/generic/ISHL.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/ISHR.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/ISTORE.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/ISUB.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/IUSHR.java          | 4 ++--
 src/main/java/org/apache/bcel/generic/IXOR.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/L2D.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/L2F.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/L2I.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/LADD.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/LALOAD.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/LAND.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/LASTORE.java        | 4 ++--
 src/main/java/org/apache/bcel/generic/LCMP.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/LCONST.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/LDC.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/LDC2_W.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/LDC_W.java          | 4 ++--
 src/main/java/org/apache/bcel/generic/LDIV.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/LLOAD.java          | 4 ++--
 src/main/java/org/apache/bcel/generic/LMUL.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/LNEG.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/LOR.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/LREM.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/LRETURN.java        | 4 ++--
 src/main/java/org/apache/bcel/generic/LSHL.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/LSHR.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/LSTORE.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/LSUB.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/LUSHR.java          | 4 ++--
 src/main/java/org/apache/bcel/generic/LXOR.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/MONITORENTER.java   | 4 ++--
 src/main/java/org/apache/bcel/generic/MONITOREXIT.java    | 4 ++--
 src/main/java/org/apache/bcel/generic/MULTIANEWARRAY.java | 4 ++--
 src/main/java/org/apache/bcel/generic/NEW.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/NEWARRAY.java       | 4 ++--
 src/main/java/org/apache/bcel/generic/POP.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/POP2.java           | 4 ++--
 src/main/java/org/apache/bcel/generic/PUTFIELD.java       | 8 ++++----
 src/main/java/org/apache/bcel/generic/PUTSTATIC.java      | 8 ++++----
 src/main/java/org/apache/bcel/generic/RET.java            | 4 ++--
 src/main/java/org/apache/bcel/generic/RETURN.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/SALOAD.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/SASTORE.java        | 4 ++--
 src/main/java/org/apache/bcel/generic/SIPUSH.java         | 4 ++--
 src/main/java/org/apache/bcel/generic/SWAP.java           | 4 ++--
 143 files changed, 293 insertions(+), 293 deletions(-)

diff --git a/src/examples/HelloWorldBuilder.java b/src/examples/HelloWorldBuilder.java
index e0e1d17830..e549529078 100644
--- a/src/examples/HelloWorldBuilder.java
+++ b/src/examples/HelloWorldBuilder.java
@@ -39,7 +39,7 @@
 /**
  * Create HelloWorld class:
  *
- * 
+ * 
  * import java.io.*;
  *
  * public class HelloWorld {
@@ -58,7 +58,7 @@
  *         System.out.println("Hello, " + name);
  *     }
  * }
- * 
+ *
*/ public class HelloWorldBuilder { public static void main(final String[] argv) { diff --git a/src/main/java/org/apache/bcel/generic/AALOAD.java b/src/main/java/org/apache/bcel/generic/AALOAD.java index 30e71e1c79..8a9c9fb8e6 100644 --- a/src/main/java/org/apache/bcel/generic/AALOAD.java +++ b/src/main/java/org/apache/bcel/generic/AALOAD.java @@ -21,9 +21,9 @@ /** * AALOAD - Load reference from array * - *
+ * 
  * Stack: ..., arrayref, index -> value
- * 
+ *
*/ public class AALOAD extends ArrayInstruction implements StackProducer { diff --git a/src/main/java/org/apache/bcel/generic/AASTORE.java b/src/main/java/org/apache/bcel/generic/AASTORE.java index 58e708a3e0..d2e0a82b25 100644 --- a/src/main/java/org/apache/bcel/generic/AASTORE.java +++ b/src/main/java/org/apache/bcel/generic/AASTORE.java @@ -21,9 +21,9 @@ /** * AASTORE - Store into reference array * - *
+ * 
  * Stack: ..., arrayref, index, value -> ...
- * 
+ *
*/ public class AASTORE extends ArrayInstruction implements StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/ACONST_NULL.java b/src/main/java/org/apache/bcel/generic/ACONST_NULL.java index 0b72e344d2..1f10ff19bf 100644 --- a/src/main/java/org/apache/bcel/generic/ACONST_NULL.java +++ b/src/main/java/org/apache/bcel/generic/ACONST_NULL.java @@ -21,9 +21,9 @@ /** * ACONST_NULL - Push null reference * - *
+ * 
  * Stack: ... -> ..., null
- * 
+ *
*/ public class ACONST_NULL extends Instruction implements PushInstruction, TypedInstruction { diff --git a/src/main/java/org/apache/bcel/generic/ALOAD.java b/src/main/java/org/apache/bcel/generic/ALOAD.java index 7e7c744274..07e863b60e 100644 --- a/src/main/java/org/apache/bcel/generic/ALOAD.java +++ b/src/main/java/org/apache/bcel/generic/ALOAD.java @@ -21,9 +21,9 @@ /** * ALOAD - Load reference from local variable * - *
+ * 
  * Stack: ... -> ..., objectref
- * 
+ *
*/ public class ALOAD extends LoadInstruction { diff --git a/src/main/java/org/apache/bcel/generic/ANEWARRAY.java b/src/main/java/org/apache/bcel/generic/ANEWARRAY.java index ae8059b96a..81ac3721d9 100644 --- a/src/main/java/org/apache/bcel/generic/ANEWARRAY.java +++ b/src/main/java/org/apache/bcel/generic/ANEWARRAY.java @@ -23,9 +23,9 @@ /** * ANEWARRAY - Create new array of references * - *
+ * 
  * Stack: ..., count -> ..., arrayref
- * 
+ *
*/ public class ANEWARRAY extends CPInstruction implements LoadClass, AllocationInstruction, ExceptionThrower, StackConsumer, StackProducer { diff --git a/src/main/java/org/apache/bcel/generic/ARETURN.java b/src/main/java/org/apache/bcel/generic/ARETURN.java index 4fc09639b2..3dc98dc3d4 100644 --- a/src/main/java/org/apache/bcel/generic/ARETURN.java +++ b/src/main/java/org/apache/bcel/generic/ARETURN.java @@ -21,9 +21,9 @@ /** * ARETURN - Return reference from method * - *
+ * 
  * Stack: ..., objectref -> <empty>
- * 
+ *
*/ public class ARETURN extends ReturnInstruction { diff --git a/src/main/java/org/apache/bcel/generic/ARRAYLENGTH.java b/src/main/java/org/apache/bcel/generic/ARRAYLENGTH.java index 4ba0d9fc69..9a1017129d 100644 --- a/src/main/java/org/apache/bcel/generic/ARRAYLENGTH.java +++ b/src/main/java/org/apache/bcel/generic/ARRAYLENGTH.java @@ -23,9 +23,9 @@ /** * ARRAYLENGTH - Get length of array * - *
+ * 
  * Stack: ..., arrayref -> ..., length
- * 
+ *
*/ public class ARRAYLENGTH extends Instruction implements ExceptionThrower, StackProducer, StackConsumer /* since 6.0 */ { diff --git a/src/main/java/org/apache/bcel/generic/ASTORE.java b/src/main/java/org/apache/bcel/generic/ASTORE.java index 95c8dffe19..a8d5cb5f61 100644 --- a/src/main/java/org/apache/bcel/generic/ASTORE.java +++ b/src/main/java/org/apache/bcel/generic/ASTORE.java @@ -21,9 +21,9 @@ /** * ASTORE - Store reference into local variable * - *
+ * 
  * Stack ..., objectref -> ...
- * 
+ *
*/ public class ASTORE extends StoreInstruction { diff --git a/src/main/java/org/apache/bcel/generic/ATHROW.java b/src/main/java/org/apache/bcel/generic/ATHROW.java index af0ef99500..9f6cb2af24 100644 --- a/src/main/java/org/apache/bcel/generic/ATHROW.java +++ b/src/main/java/org/apache/bcel/generic/ATHROW.java @@ -23,9 +23,9 @@ /** * ATHROW - Throw exception * - *
+ * 
  * Stack: ..., objectref -> objectref
- * 
+ *
*/ public class ATHROW extends Instruction implements UnconditionalBranch, ExceptionThrower, StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/BALOAD.java b/src/main/java/org/apache/bcel/generic/BALOAD.java index 8855a66694..6f3156e162 100644 --- a/src/main/java/org/apache/bcel/generic/BALOAD.java +++ b/src/main/java/org/apache/bcel/generic/BALOAD.java @@ -21,9 +21,9 @@ /** * BALOAD - Load byte or boolean from array * - *
+ * 
  * Stack: ..., arrayref, index -> ..., value
- * 
+ *
*/ public class BALOAD extends ArrayInstruction implements StackProducer { diff --git a/src/main/java/org/apache/bcel/generic/BASTORE.java b/src/main/java/org/apache/bcel/generic/BASTORE.java index f33641cc7a..1502beeafa 100644 --- a/src/main/java/org/apache/bcel/generic/BASTORE.java +++ b/src/main/java/org/apache/bcel/generic/BASTORE.java @@ -21,9 +21,9 @@ /** * BASTORE - Store into byte or boolean array * - *
+ * 
  * Stack: ..., arrayref, index, value -> ...
- * 
+ *
*/ public class BASTORE extends ArrayInstruction implements StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/BIPUSH.java b/src/main/java/org/apache/bcel/generic/BIPUSH.java index 59e12d3fc5..6e3794dbf2 100644 --- a/src/main/java/org/apache/bcel/generic/BIPUSH.java +++ b/src/main/java/org/apache/bcel/generic/BIPUSH.java @@ -26,9 +26,9 @@ /** * BIPUSH - Push byte on stack * - *
+ * 
  * Stack: ... -> ..., value
- * 
+ *
*/ public class BIPUSH extends Instruction implements ConstantPushInstruction { diff --git a/src/main/java/org/apache/bcel/generic/CALOAD.java b/src/main/java/org/apache/bcel/generic/CALOAD.java index 7fccd65870..0606e3deed 100644 --- a/src/main/java/org/apache/bcel/generic/CALOAD.java +++ b/src/main/java/org/apache/bcel/generic/CALOAD.java @@ -21,9 +21,9 @@ /** * CALOAD - Load char from array * - *
+ * 
  * Stack: ..., arrayref, index -> ..., value
- * 
+ *
*/ public class CALOAD extends ArrayInstruction implements StackProducer { diff --git a/src/main/java/org/apache/bcel/generic/CASTORE.java b/src/main/java/org/apache/bcel/generic/CASTORE.java index be78c2f13a..bb8c5f1f4c 100644 --- a/src/main/java/org/apache/bcel/generic/CASTORE.java +++ b/src/main/java/org/apache/bcel/generic/CASTORE.java @@ -21,9 +21,9 @@ /** * CASTORE - Store into char array * - *
+ * 
  * Stack: ..., arrayref, index, value -> ...
- * 
+ *
*/ public class CASTORE extends ArrayInstruction implements StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/CHECKCAST.java b/src/main/java/org/apache/bcel/generic/CHECKCAST.java index 6d31fed26e..61455991c4 100644 --- a/src/main/java/org/apache/bcel/generic/CHECKCAST.java +++ b/src/main/java/org/apache/bcel/generic/CHECKCAST.java @@ -23,9 +23,9 @@ /** * CHECKCAST - Check whether object is of given type * - *
+ * 
  * Stack: ..., objectref -> ..., objectref
- * 
+ *
*/ public class CHECKCAST extends CPInstruction implements LoadClass, ExceptionThrower, StackProducer, StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/D2F.java b/src/main/java/org/apache/bcel/generic/D2F.java index 5159c0f2a5..54e749cd76 100644 --- a/src/main/java/org/apache/bcel/generic/D2F.java +++ b/src/main/java/org/apache/bcel/generic/D2F.java @@ -21,9 +21,9 @@ /** * D2F - Convert double to float * - *
+ * 
  * Stack: ..., value.word1, value.word2 -> ..., result
- * 
+ *
*/ public class D2F extends ConversionInstruction { diff --git a/src/main/java/org/apache/bcel/generic/D2I.java b/src/main/java/org/apache/bcel/generic/D2I.java index 381af9df51..5babd72cf6 100644 --- a/src/main/java/org/apache/bcel/generic/D2I.java +++ b/src/main/java/org/apache/bcel/generic/D2I.java @@ -21,9 +21,9 @@ /** * D2I - Convert double to int * - *
+ * 
  * Stack: ..., value.word1, value.word2 -> ..., result
- * 
+ *
*/ public class D2I extends ConversionInstruction { diff --git a/src/main/java/org/apache/bcel/generic/D2L.java b/src/main/java/org/apache/bcel/generic/D2L.java index 72d23b6dc1..0cdeb3bca1 100644 --- a/src/main/java/org/apache/bcel/generic/D2L.java +++ b/src/main/java/org/apache/bcel/generic/D2L.java @@ -21,9 +21,9 @@ /** * D2L - Convert double to long * - *
+ * 
  * Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
- * 
+ *
*/ public class D2L extends ConversionInstruction { diff --git a/src/main/java/org/apache/bcel/generic/DADD.java b/src/main/java/org/apache/bcel/generic/DADD.java index fbdfdd4f06..f6f5ac6482 100644 --- a/src/main/java/org/apache/bcel/generic/DADD.java +++ b/src/main/java/org/apache/bcel/generic/DADD.java @@ -21,9 +21,9 @@ /** * DADD - Add doubles * - *
+ * 
  * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
- * 
+ *
* * ..., result.word1, result1.word2 */ diff --git a/src/main/java/org/apache/bcel/generic/DALOAD.java b/src/main/java/org/apache/bcel/generic/DALOAD.java index f16f7d256a..270a714bdb 100644 --- a/src/main/java/org/apache/bcel/generic/DALOAD.java +++ b/src/main/java/org/apache/bcel/generic/DALOAD.java @@ -21,9 +21,9 @@ /** * DALOAD - Load double from array * - *
+ * 
  * Stack: ..., arrayref, index -> ..., result.word1, result.word2
- * 
+ *
*/ public class DALOAD extends ArrayInstruction implements StackProducer { diff --git a/src/main/java/org/apache/bcel/generic/DASTORE.java b/src/main/java/org/apache/bcel/generic/DASTORE.java index 3e3e7caaca..ef93a2443c 100644 --- a/src/main/java/org/apache/bcel/generic/DASTORE.java +++ b/src/main/java/org/apache/bcel/generic/DASTORE.java @@ -21,9 +21,9 @@ /** * DASTORE - Store into double array * - *
+ * 
  * Stack: ..., arrayref, index, value.word1, value.word2 -> ...
- * 
+ *
*/ public class DASTORE extends ArrayInstruction implements StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/DCMPG.java b/src/main/java/org/apache/bcel/generic/DCMPG.java index 40dbfc6dba..f3edc24362 100644 --- a/src/main/java/org/apache/bcel/generic/DCMPG.java +++ b/src/main/java/org/apache/bcel/generic/DCMPG.java @@ -21,9 +21,9 @@ /** * DCMPG - Compare doubles: value1 > value2 * - *
+ * 
  * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 -> ..., result
- * 
+ *
*/ public class DCMPG extends Instruction implements TypedInstruction, StackProducer, StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/DCMPL.java b/src/main/java/org/apache/bcel/generic/DCMPL.java index eef1a76c86..edc2f040ed 100644 --- a/src/main/java/org/apache/bcel/generic/DCMPL.java +++ b/src/main/java/org/apache/bcel/generic/DCMPL.java @@ -21,9 +21,9 @@ /** * DCMPL - Compare doubles: value1 < value2 * - *
+ * 
  * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 -> ..., result
- * 
+ *
*/ public class DCMPL extends Instruction implements TypedInstruction, StackProducer, StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/DCONST.java b/src/main/java/org/apache/bcel/generic/DCONST.java index f945a3e8ff..2655f311f3 100644 --- a/src/main/java/org/apache/bcel/generic/DCONST.java +++ b/src/main/java/org/apache/bcel/generic/DCONST.java @@ -21,9 +21,9 @@ /** * DCONST - Push 0.0 or 1.0, other values cause an exception * - *
+ * 
  * Stack: ... -> ...,
- * 
+ *
*/ public class DCONST extends Instruction implements ConstantPushInstruction { diff --git a/src/main/java/org/apache/bcel/generic/DDIV.java b/src/main/java/org/apache/bcel/generic/DDIV.java index 0fd033102b..c0cd496efa 100644 --- a/src/main/java/org/apache/bcel/generic/DDIV.java +++ b/src/main/java/org/apache/bcel/generic/DDIV.java @@ -21,9 +21,9 @@ /** * DDIV - Divide doubles * - *
+ * 
  * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
- * 
+ *
* * ..., result.word1, result.word2 */ diff --git a/src/main/java/org/apache/bcel/generic/DLOAD.java b/src/main/java/org/apache/bcel/generic/DLOAD.java index 23b11b4301..81884511ea 100644 --- a/src/main/java/org/apache/bcel/generic/DLOAD.java +++ b/src/main/java/org/apache/bcel/generic/DLOAD.java @@ -21,9 +21,9 @@ /** * DLOAD - Load double from local variable * - *
+ * 
  * Stack ... -> ..., result.word1, result.word2
- * 
+ *
*/ public class DLOAD extends LoadInstruction { diff --git a/src/main/java/org/apache/bcel/generic/DMUL.java b/src/main/java/org/apache/bcel/generic/DMUL.java index 122c08ae88..0dc27936b1 100644 --- a/src/main/java/org/apache/bcel/generic/DMUL.java +++ b/src/main/java/org/apache/bcel/generic/DMUL.java @@ -21,9 +21,9 @@ /** * DMUL - Multiply doubles * - *
+ * 
  * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
- * 
+ *
* * ..., result.word1, result.word2 */ diff --git a/src/main/java/org/apache/bcel/generic/DNEG.java b/src/main/java/org/apache/bcel/generic/DNEG.java index 44424b388d..82b48bf741 100644 --- a/src/main/java/org/apache/bcel/generic/DNEG.java +++ b/src/main/java/org/apache/bcel/generic/DNEG.java @@ -21,9 +21,9 @@ /** * DNEG - Negate double * - *
+ * 
  * Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
- * 
+ *
*/ public class DNEG extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/DREM.java b/src/main/java/org/apache/bcel/generic/DREM.java index b827ed7b04..e0640ab335 100644 --- a/src/main/java/org/apache/bcel/generic/DREM.java +++ b/src/main/java/org/apache/bcel/generic/DREM.java @@ -21,9 +21,9 @@ /** * DREM - Remainder of doubles * - *
+ * 
  * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
- * 
+ *
* * ..., result.word1, result.word2 */ diff --git a/src/main/java/org/apache/bcel/generic/DRETURN.java b/src/main/java/org/apache/bcel/generic/DRETURN.java index caa0d904cc..8990ed570a 100644 --- a/src/main/java/org/apache/bcel/generic/DRETURN.java +++ b/src/main/java/org/apache/bcel/generic/DRETURN.java @@ -21,9 +21,9 @@ /** * DRETURN - Return double from method * - *
+ * 
  * Stack: ..., value.word1, value.word2 -> <empty>
- * 
+ *
*/ public class DRETURN extends ReturnInstruction { diff --git a/src/main/java/org/apache/bcel/generic/DSTORE.java b/src/main/java/org/apache/bcel/generic/DSTORE.java index 01719f8659..e6615abfcc 100644 --- a/src/main/java/org/apache/bcel/generic/DSTORE.java +++ b/src/main/java/org/apache/bcel/generic/DSTORE.java @@ -23,7 +23,7 @@ * *
  * Stack: ..., value.word1, value.word2 -> ...
- * 
+ *
*/ public class DSTORE extends StoreInstruction { diff --git a/src/main/java/org/apache/bcel/generic/DSUB.java b/src/main/java/org/apache/bcel/generic/DSUB.java index b8109670c7..1eb54f53e9 100644 --- a/src/main/java/org/apache/bcel/generic/DSUB.java +++ b/src/main/java/org/apache/bcel/generic/DSUB.java @@ -21,9 +21,9 @@ /** * DSUB - Substract doubles * - *
+ * 
  * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
- * 
+ *
* * ..., result.word1, result.word2 */ diff --git a/src/main/java/org/apache/bcel/generic/DUP.java b/src/main/java/org/apache/bcel/generic/DUP.java index 1e75dde0b9..b72cb8f09f 100644 --- a/src/main/java/org/apache/bcel/generic/DUP.java +++ b/src/main/java/org/apache/bcel/generic/DUP.java @@ -21,9 +21,9 @@ /** * DUP - Duplicate top operand stack word * - *
+ * 
  * Stack: ..., word -> ..., word, word
- * 
+ *
*/ public class DUP extends StackInstruction implements PushInstruction { diff --git a/src/main/java/org/apache/bcel/generic/DUP2.java b/src/main/java/org/apache/bcel/generic/DUP2.java index 04085cd6a4..a49ae9d66d 100644 --- a/src/main/java/org/apache/bcel/generic/DUP2.java +++ b/src/main/java/org/apache/bcel/generic/DUP2.java @@ -21,9 +21,9 @@ /** * DUP2 - Duplicate two top operand stack words * - *
+ * 
  * Stack: ..., word2, word1 -> ..., word2, word1, word2, word1
- * 
+ *
*/ public class DUP2 extends StackInstruction implements PushInstruction { diff --git a/src/main/java/org/apache/bcel/generic/DUP2_X1.java b/src/main/java/org/apache/bcel/generic/DUP2_X1.java index 0d0c12c6d9..198f8b4ccc 100644 --- a/src/main/java/org/apache/bcel/generic/DUP2_X1.java +++ b/src/main/java/org/apache/bcel/generic/DUP2_X1.java @@ -21,9 +21,9 @@ /** * DUP2_X1 - Duplicate two top operand stack words and put three down * - *
+ * 
  * Stack: ..., word3, word2, word1 -> ..., word2, word1, word3, word2, word1
- * 
+ *
*/ public class DUP2_X1 extends StackInstruction { diff --git a/src/main/java/org/apache/bcel/generic/DUP2_X2.java b/src/main/java/org/apache/bcel/generic/DUP2_X2.java index 748f2df225..7651156d3f 100644 --- a/src/main/java/org/apache/bcel/generic/DUP2_X2.java +++ b/src/main/java/org/apache/bcel/generic/DUP2_X2.java @@ -21,9 +21,9 @@ /** * DUP2_X2 - Duplicate two top operand stack words and put four down * - *
+ * 
  * Stack: ..., word4, word3, word2, word1 -> ..., word2, word1, word4, word3, word2, word1
- * 
+ *
*/ public class DUP2_X2 extends StackInstruction { diff --git a/src/main/java/org/apache/bcel/generic/DUP_X1.java b/src/main/java/org/apache/bcel/generic/DUP_X1.java index f6b3d0e095..5ee6352022 100644 --- a/src/main/java/org/apache/bcel/generic/DUP_X1.java +++ b/src/main/java/org/apache/bcel/generic/DUP_X1.java @@ -21,9 +21,9 @@ /** * DUP_X1 - Duplicate top operand stack word and put two down * - *
+ * 
  * Stack: ..., word2, word1 -> ..., word1, word2, word1
- * 
+ *
*/ public class DUP_X1 extends StackInstruction { diff --git a/src/main/java/org/apache/bcel/generic/DUP_X2.java b/src/main/java/org/apache/bcel/generic/DUP_X2.java index 4e40d1c536..1a3e1ddf8c 100644 --- a/src/main/java/org/apache/bcel/generic/DUP_X2.java +++ b/src/main/java/org/apache/bcel/generic/DUP_X2.java @@ -21,9 +21,9 @@ /** * DUP_X2 - Duplicate top operand stack word and put three down * - *
+ * 
  * Stack: ..., word3, word2, word1 -> ..., word1, word3, word2, word1
- * 
+ *
*/ public class DUP_X2 extends StackInstruction { diff --git a/src/main/java/org/apache/bcel/generic/F2D.java b/src/main/java/org/apache/bcel/generic/F2D.java index 1bcd74f89d..b5d1f61e0d 100644 --- a/src/main/java/org/apache/bcel/generic/F2D.java +++ b/src/main/java/org/apache/bcel/generic/F2D.java @@ -21,9 +21,9 @@ /** * F2D - Convert float to double * - *
+ * 
  * Stack: ..., value -> ..., result.word1, result.word2
- * 
+ *
*/ public class F2D extends ConversionInstruction { diff --git a/src/main/java/org/apache/bcel/generic/F2I.java b/src/main/java/org/apache/bcel/generic/F2I.java index 9f067c1836..c4dcba8572 100644 --- a/src/main/java/org/apache/bcel/generic/F2I.java +++ b/src/main/java/org/apache/bcel/generic/F2I.java @@ -21,9 +21,9 @@ /** * F2I - Convert float to int * - *
+ * 
  * Stack: ..., value -> ..., result
- * 
+ *
*/ public class F2I extends ConversionInstruction { diff --git a/src/main/java/org/apache/bcel/generic/F2L.java b/src/main/java/org/apache/bcel/generic/F2L.java index a2f00a2410..e04ce8c228 100644 --- a/src/main/java/org/apache/bcel/generic/F2L.java +++ b/src/main/java/org/apache/bcel/generic/F2L.java @@ -21,9 +21,9 @@ /** * F2L - Convert float to long * - *
+ * 
  * Stack: ..., value -> ..., result.word1, result.word2
- * 
+ *
*/ public class F2L extends ConversionInstruction { diff --git a/src/main/java/org/apache/bcel/generic/FADD.java b/src/main/java/org/apache/bcel/generic/FADD.java index 1729966f46..63f755ab1d 100644 --- a/src/main/java/org/apache/bcel/generic/FADD.java +++ b/src/main/java/org/apache/bcel/generic/FADD.java @@ -21,9 +21,9 @@ /** * FADD - Add floats * - *
+ * 
  * Stack: ..., value1, value2 -> result
- * 
+ *
*/ public class FADD extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/FALOAD.java b/src/main/java/org/apache/bcel/generic/FALOAD.java index 606738e46c..a9dbe0c3c1 100644 --- a/src/main/java/org/apache/bcel/generic/FALOAD.java +++ b/src/main/java/org/apache/bcel/generic/FALOAD.java @@ -21,9 +21,9 @@ /** * FALOAD - Load float from array * - *
+ * 
  * Stack: ..., arrayref, index -> ..., value
- * 
+ *
*/ public class FALOAD extends ArrayInstruction implements StackProducer { diff --git a/src/main/java/org/apache/bcel/generic/FASTORE.java b/src/main/java/org/apache/bcel/generic/FASTORE.java index 06d62a069b..00c6825c53 100644 --- a/src/main/java/org/apache/bcel/generic/FASTORE.java +++ b/src/main/java/org/apache/bcel/generic/FASTORE.java @@ -21,9 +21,9 @@ /** * FASTORE - Store into float array * - *
+ * 
  * Stack: ..., arrayref, index, value -> ...
- * 
+ *
*/ public class FASTORE extends ArrayInstruction implements StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/FCMPG.java b/src/main/java/org/apache/bcel/generic/FCMPG.java index 6aff01245d..4de55f2b81 100644 --- a/src/main/java/org/apache/bcel/generic/FCMPG.java +++ b/src/main/java/org/apache/bcel/generic/FCMPG.java @@ -21,9 +21,9 @@ /** * FCMPG - Compare floats: value1 > value2 * - *
+ * 
  * Stack: ..., value1, value2 -> ..., result
- * 
+ *
*/ public class FCMPG extends Instruction implements TypedInstruction, StackProducer, StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/FCMPL.java b/src/main/java/org/apache/bcel/generic/FCMPL.java index 0a5bfefeae..e2679ac062 100644 --- a/src/main/java/org/apache/bcel/generic/FCMPL.java +++ b/src/main/java/org/apache/bcel/generic/FCMPL.java @@ -21,9 +21,9 @@ /** * FCMPL - Compare floats: value1 < value2 * - *
+ * 
  * Stack: ..., value1, value2 -> ..., result
- * 
+ *
*/ public class FCMPL extends Instruction implements TypedInstruction, StackProducer, StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/FCONST.java b/src/main/java/org/apache/bcel/generic/FCONST.java index 0ba2a4f773..9dd5aa43be 100644 --- a/src/main/java/org/apache/bcel/generic/FCONST.java +++ b/src/main/java/org/apache/bcel/generic/FCONST.java @@ -21,9 +21,9 @@ /** * FCONST - Push 0.0, 1.0 or 2.0, other values cause an exception * - *
+ * 
  * Stack: ... -> ...,
- * 
+ *
*/ public class FCONST extends Instruction implements ConstantPushInstruction { diff --git a/src/main/java/org/apache/bcel/generic/FDIV.java b/src/main/java/org/apache/bcel/generic/FDIV.java index 5c76b5233e..3e3010b126 100644 --- a/src/main/java/org/apache/bcel/generic/FDIV.java +++ b/src/main/java/org/apache/bcel/generic/FDIV.java @@ -21,9 +21,9 @@ /** * FDIV - Divide floats * - *
+ * 
  * Stack: ..., value1, value2 -> result
- * 
+ *
*/ public class FDIV extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/FLOAD.java b/src/main/java/org/apache/bcel/generic/FLOAD.java index c45b5930dd..6efe6d6990 100644 --- a/src/main/java/org/apache/bcel/generic/FLOAD.java +++ b/src/main/java/org/apache/bcel/generic/FLOAD.java @@ -21,9 +21,9 @@ /** * FLOAD - Load float from local variable * - *
+ * 
  * Stack ... -> ..., result
- * 
+ *
*/ public class FLOAD extends LoadInstruction { diff --git a/src/main/java/org/apache/bcel/generic/FMUL.java b/src/main/java/org/apache/bcel/generic/FMUL.java index fd2a1eb86a..0c1d1451d6 100644 --- a/src/main/java/org/apache/bcel/generic/FMUL.java +++ b/src/main/java/org/apache/bcel/generic/FMUL.java @@ -21,9 +21,9 @@ /** * FMUL - Multiply floats * - *
+ * 
  * Stack: ..., value1, value2 -> result
- * 
+ *
*/ public class FMUL extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/FNEG.java b/src/main/java/org/apache/bcel/generic/FNEG.java index 04c1dfb4b9..630408e698 100644 --- a/src/main/java/org/apache/bcel/generic/FNEG.java +++ b/src/main/java/org/apache/bcel/generic/FNEG.java @@ -21,9 +21,9 @@ /** * FNEG - Negate float * - *
+ * 
  * Stack: ..., value -> ..., result
- * 
+ *
*/ public class FNEG extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/FREM.java b/src/main/java/org/apache/bcel/generic/FREM.java index 01e2049f38..44464ea31b 100644 --- a/src/main/java/org/apache/bcel/generic/FREM.java +++ b/src/main/java/org/apache/bcel/generic/FREM.java @@ -21,9 +21,9 @@ /** * FREM - Remainder of floats * - *
+ * 
  * Stack: ..., value1, value2 -> result
- * 
+ *
*/ public class FREM extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/FRETURN.java b/src/main/java/org/apache/bcel/generic/FRETURN.java index a9a6a2eb89..9b87b71702 100644 --- a/src/main/java/org/apache/bcel/generic/FRETURN.java +++ b/src/main/java/org/apache/bcel/generic/FRETURN.java @@ -21,9 +21,9 @@ /** * FRETURN - Return float from method * - *
+ * 
  * Stack: ..., value -> <empty>
- * 
+ *
*/ public class FRETURN extends ReturnInstruction { diff --git a/src/main/java/org/apache/bcel/generic/FSTORE.java b/src/main/java/org/apache/bcel/generic/FSTORE.java index ed394743bf..9bb06003d7 100644 --- a/src/main/java/org/apache/bcel/generic/FSTORE.java +++ b/src/main/java/org/apache/bcel/generic/FSTORE.java @@ -21,9 +21,9 @@ /** * FSTORE - Store float into local variable * - *
+ * 
  * Stack: ..., value -> ...
- * 
+ *
*/ public class FSTORE extends StoreInstruction { diff --git a/src/main/java/org/apache/bcel/generic/FSUB.java b/src/main/java/org/apache/bcel/generic/FSUB.java index 987a5b3701..aec5385870 100644 --- a/src/main/java/org/apache/bcel/generic/FSUB.java +++ b/src/main/java/org/apache/bcel/generic/FSUB.java @@ -21,9 +21,9 @@ /** * FSUB - Substract floats * - *
+ * 
  * Stack: ..., value1, value2 -> result
- * 
+ *
*/ public class FSUB extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/GETFIELD.java b/src/main/java/org/apache/bcel/generic/GETFIELD.java index 5fd8da60f1..6737357e08 100644 --- a/src/main/java/org/apache/bcel/generic/GETFIELD.java +++ b/src/main/java/org/apache/bcel/generic/GETFIELD.java @@ -24,15 +24,15 @@ /** * GETFIELD - Fetch field from object * - *
+ * 
  * Stack: ..., objectref -> ..., value
- * 
+ *
* * OR * - *
+ * 
  * Stack: ..., objectref -> ..., value.word1, value.word2
- * 
+ *
*/ public class GETFIELD extends FieldInstruction implements ExceptionThrower, StackConsumer, StackProducer { diff --git a/src/main/java/org/apache/bcel/generic/GETSTATIC.java b/src/main/java/org/apache/bcel/generic/GETSTATIC.java index 0ff6ffeedf..5efe328ea4 100644 --- a/src/main/java/org/apache/bcel/generic/GETSTATIC.java +++ b/src/main/java/org/apache/bcel/generic/GETSTATIC.java @@ -24,15 +24,15 @@ /** * GETSTATIC - Fetch static field from class * - *
+ * 
  * Stack: ..., -> ..., value
- * 
+ *
* * OR * - *
+ * 
  * Stack: ..., -> ..., value.word1, value.word2
- * 
+ *
*/ public class GETSTATIC extends FieldInstruction implements PushInstruction, ExceptionThrower { diff --git a/src/main/java/org/apache/bcel/generic/I2B.java b/src/main/java/org/apache/bcel/generic/I2B.java index aa7678d5eb..972abe8ba9 100644 --- a/src/main/java/org/apache/bcel/generic/I2B.java +++ b/src/main/java/org/apache/bcel/generic/I2B.java @@ -21,9 +21,9 @@ /** * I2B - Convert int to byte * - *
+ * 
  * Stack: ..., value -> ..., result
- * 
+ *
*/ public class I2B extends ConversionInstruction { diff --git a/src/main/java/org/apache/bcel/generic/I2C.java b/src/main/java/org/apache/bcel/generic/I2C.java index 428059bb9c..867a96f699 100644 --- a/src/main/java/org/apache/bcel/generic/I2C.java +++ b/src/main/java/org/apache/bcel/generic/I2C.java @@ -21,9 +21,9 @@ /** * I2C - Convert int to char * - *
+ * 
  * Stack: ..., value -> ..., result
- * 
+ *
*/ public class I2C extends ConversionInstruction { diff --git a/src/main/java/org/apache/bcel/generic/I2D.java b/src/main/java/org/apache/bcel/generic/I2D.java index 6dc4ad4f26..595943afdd 100644 --- a/src/main/java/org/apache/bcel/generic/I2D.java +++ b/src/main/java/org/apache/bcel/generic/I2D.java @@ -21,9 +21,9 @@ /** * I2D - Convert int to double * - *
+ * 
  * Stack: ..., value -> ..., result.word1, result.word2
- * 
+ *
*/ public class I2D extends ConversionInstruction { diff --git a/src/main/java/org/apache/bcel/generic/I2F.java b/src/main/java/org/apache/bcel/generic/I2F.java index 2fa4b92bff..a963597e7f 100644 --- a/src/main/java/org/apache/bcel/generic/I2F.java +++ b/src/main/java/org/apache/bcel/generic/I2F.java @@ -21,9 +21,9 @@ /** * I2F - Convert int to float * - *
+ * 
  * Stack: ..., value -> ..., result
- * 
+ *
*/ public class I2F extends ConversionInstruction { diff --git a/src/main/java/org/apache/bcel/generic/I2L.java b/src/main/java/org/apache/bcel/generic/I2L.java index 2d9888e82f..e1ec0bc074 100644 --- a/src/main/java/org/apache/bcel/generic/I2L.java +++ b/src/main/java/org/apache/bcel/generic/I2L.java @@ -21,9 +21,9 @@ /** * I2L - Convert int to long * - *
+ * 
  * Stack: ..., value -> ..., result.word1, result.word2
- * 
+ *
*/ public class I2L extends ConversionInstruction { diff --git a/src/main/java/org/apache/bcel/generic/I2S.java b/src/main/java/org/apache/bcel/generic/I2S.java index 66ce5950b7..cdd37cac60 100644 --- a/src/main/java/org/apache/bcel/generic/I2S.java +++ b/src/main/java/org/apache/bcel/generic/I2S.java @@ -21,9 +21,9 @@ /** * I2S - Convert int to short * - *
+ * 
  * Stack: ..., value -> ..., result
- * 
+ *
*/ public class I2S extends ConversionInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IADD.java b/src/main/java/org/apache/bcel/generic/IADD.java index ed889d431b..53d8aaa906 100644 --- a/src/main/java/org/apache/bcel/generic/IADD.java +++ b/src/main/java/org/apache/bcel/generic/IADD.java @@ -21,9 +21,9 @@ /** * IADD - Add ints * - *
+ * 
  * Stack: ..., value1, value2 -> result
- * 
+ *
*/ public class IADD extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IALOAD.java b/src/main/java/org/apache/bcel/generic/IALOAD.java index 63fb5222f3..10748f0eb9 100644 --- a/src/main/java/org/apache/bcel/generic/IALOAD.java +++ b/src/main/java/org/apache/bcel/generic/IALOAD.java @@ -21,9 +21,9 @@ /** * IALOAD - Load int from array * - *
+ * 
  * Stack: ..., arrayref, index -> ..., value
- * 
+ *
*/ public class IALOAD extends ArrayInstruction implements StackProducer { diff --git a/src/main/java/org/apache/bcel/generic/IAND.java b/src/main/java/org/apache/bcel/generic/IAND.java index 81e987c2dd..97aecf8d9b 100644 --- a/src/main/java/org/apache/bcel/generic/IAND.java +++ b/src/main/java/org/apache/bcel/generic/IAND.java @@ -21,9 +21,9 @@ /** * IAND - Bitwise AND int * - *
+ * 
  * Stack: ..., value1, value2 -> ..., result
- * 
+ *
*/ public class IAND extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IASTORE.java b/src/main/java/org/apache/bcel/generic/IASTORE.java index 398dfb413c..c33fb75307 100644 --- a/src/main/java/org/apache/bcel/generic/IASTORE.java +++ b/src/main/java/org/apache/bcel/generic/IASTORE.java @@ -21,9 +21,9 @@ /** * IASTORE - Store into int array * - *
+ * 
  * Stack: ..., arrayref, index, value -> ...
- * 
+ *
*/ public class IASTORE extends ArrayInstruction implements StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/ICONST.java b/src/main/java/org/apache/bcel/generic/ICONST.java index 2b3f0a567d..24628783f5 100644 --- a/src/main/java/org/apache/bcel/generic/ICONST.java +++ b/src/main/java/org/apache/bcel/generic/ICONST.java @@ -21,9 +21,9 @@ /** * ICONST - Push value between -1, ..., 5, other values cause an exception * - *
+ * 
  * Stack: ... -> ...,
- * 
+ *
*/ public class ICONST extends Instruction implements ConstantPushInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IDIV.java b/src/main/java/org/apache/bcel/generic/IDIV.java index d71bd7c8a2..42de5bb8a5 100644 --- a/src/main/java/org/apache/bcel/generic/IDIV.java +++ b/src/main/java/org/apache/bcel/generic/IDIV.java @@ -23,9 +23,9 @@ /** * IDIV - Divide ints * - *
+ * 
  * Stack: ..., value1, value2 -> result
- * 
+ *
*/ public class IDIV extends ArithmeticInstruction implements ExceptionThrower { diff --git a/src/main/java/org/apache/bcel/generic/IFEQ.java b/src/main/java/org/apache/bcel/generic/IFEQ.java index a8df648630..e80e5a9d3a 100644 --- a/src/main/java/org/apache/bcel/generic/IFEQ.java +++ b/src/main/java/org/apache/bcel/generic/IFEQ.java @@ -21,9 +21,9 @@ /** * IFEQ - Branch if int comparison with zero succeeds * - *
+ * 
  * Stack: ..., value -> ...
- * 
+ *
*/ public class IFEQ extends IfInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IFGE.java b/src/main/java/org/apache/bcel/generic/IFGE.java index b0d9763275..b3ec9a2fb1 100644 --- a/src/main/java/org/apache/bcel/generic/IFGE.java +++ b/src/main/java/org/apache/bcel/generic/IFGE.java @@ -21,9 +21,9 @@ /** * IFGE - Branch if int comparison with zero succeeds * - *
+ * 
  * Stack: ..., value -> ...
- * 
+ *
*/ public class IFGE extends IfInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IFGT.java b/src/main/java/org/apache/bcel/generic/IFGT.java index 735527e516..dc7a5a3c49 100644 --- a/src/main/java/org/apache/bcel/generic/IFGT.java +++ b/src/main/java/org/apache/bcel/generic/IFGT.java @@ -21,9 +21,9 @@ /** * IFGT - Branch if int comparison with zero succeeds * - *
+ * 
  * Stack: ..., value -> ...
- * 
+ *
*/ public class IFGT extends IfInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IFLE.java b/src/main/java/org/apache/bcel/generic/IFLE.java index a678ddf113..9ea00b50ac 100644 --- a/src/main/java/org/apache/bcel/generic/IFLE.java +++ b/src/main/java/org/apache/bcel/generic/IFLE.java @@ -21,9 +21,9 @@ /** * IFLE - Branch if int comparison with zero succeeds * - *
+ * 
  * Stack: ..., value -> ...
- * 
+ *
*/ public class IFLE extends IfInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IFLT.java b/src/main/java/org/apache/bcel/generic/IFLT.java index 84b5b9fdb1..1eb15bef5f 100644 --- a/src/main/java/org/apache/bcel/generic/IFLT.java +++ b/src/main/java/org/apache/bcel/generic/IFLT.java @@ -21,9 +21,9 @@ /** * IFLT - Branch if int comparison with zero succeeds * - *
+ * 
  * Stack: ..., value -> ...
- * 
+ *
*/ public class IFLT extends IfInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IFNE.java b/src/main/java/org/apache/bcel/generic/IFNE.java index 9498e29f18..d7b64c2198 100644 --- a/src/main/java/org/apache/bcel/generic/IFNE.java +++ b/src/main/java/org/apache/bcel/generic/IFNE.java @@ -21,9 +21,9 @@ /** * IFNE - Branch if int comparison with zero succeeds * - *
+ * 
  * Stack: ..., value -> ...
- * 
+ *
*/ public class IFNE extends IfInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IFNONNULL.java b/src/main/java/org/apache/bcel/generic/IFNONNULL.java index 4b8a7c5d92..0809796778 100644 --- a/src/main/java/org/apache/bcel/generic/IFNONNULL.java +++ b/src/main/java/org/apache/bcel/generic/IFNONNULL.java @@ -21,9 +21,9 @@ /** * IFNONNULL - Branch if reference is not null * - *
+ * 
  * Stack: ..., reference -> ...
- * 
+ *
*/ public class IFNONNULL extends IfInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IFNULL.java b/src/main/java/org/apache/bcel/generic/IFNULL.java index 6f29e804ff..4d9d772fe1 100644 --- a/src/main/java/org/apache/bcel/generic/IFNULL.java +++ b/src/main/java/org/apache/bcel/generic/IFNULL.java @@ -21,9 +21,9 @@ /** * IFNULL - Branch if reference is not null * - *
+ * 
  * Stack: ..., reference -> ...
- * 
+ *
*/ public class IFNULL extends IfInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IF_ACMPEQ.java b/src/main/java/org/apache/bcel/generic/IF_ACMPEQ.java index 42e2a24ae0..41e952b578 100644 --- a/src/main/java/org/apache/bcel/generic/IF_ACMPEQ.java +++ b/src/main/java/org/apache/bcel/generic/IF_ACMPEQ.java @@ -21,9 +21,9 @@ /** * IF_ACMPEQ - Branch if reference comparison succeeds * - *
+ * 
  * Stack: ..., value1, value2 -> ...
- * 
+ *
*/ public class IF_ACMPEQ extends IfInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IF_ACMPNE.java b/src/main/java/org/apache/bcel/generic/IF_ACMPNE.java index 0fb45b7f35..8bad434166 100644 --- a/src/main/java/org/apache/bcel/generic/IF_ACMPNE.java +++ b/src/main/java/org/apache/bcel/generic/IF_ACMPNE.java @@ -21,9 +21,9 @@ /** * IF_ACMPNE - Branch if reference comparison doesn't succeed * - *
+ * 
  * Stack: ..., value1, value2 -> ...
- * 
+ *
*/ public class IF_ACMPNE extends IfInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IF_ICMPEQ.java b/src/main/java/org/apache/bcel/generic/IF_ICMPEQ.java index 033fb5f562..22eea2f092 100644 --- a/src/main/java/org/apache/bcel/generic/IF_ICMPEQ.java +++ b/src/main/java/org/apache/bcel/generic/IF_ICMPEQ.java @@ -21,9 +21,9 @@ /** * IF_ICMPEQ - Branch if int comparison succeeds * - *
+ * 
  * Stack: ..., value1, value2 -> ...
- * 
+ *
*/ public class IF_ICMPEQ extends IfInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IF_ICMPGE.java b/src/main/java/org/apache/bcel/generic/IF_ICMPGE.java index 16d247b8d1..a13212a84b 100644 --- a/src/main/java/org/apache/bcel/generic/IF_ICMPGE.java +++ b/src/main/java/org/apache/bcel/generic/IF_ICMPGE.java @@ -21,9 +21,9 @@ /** * IF_ICMPGE - Branch if int comparison succeeds * - *
+ * 
  * Stack: ..., value1, value2 -> ...
- * 
+ *
*/ public class IF_ICMPGE extends IfInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IF_ICMPGT.java b/src/main/java/org/apache/bcel/generic/IF_ICMPGT.java index 3c45f844bc..a5cd42980f 100644 --- a/src/main/java/org/apache/bcel/generic/IF_ICMPGT.java +++ b/src/main/java/org/apache/bcel/generic/IF_ICMPGT.java @@ -21,9 +21,9 @@ /** * IF_ICMPGT - Branch if int comparison succeeds * - *
+ * 
  * Stack: ..., value1, value2 -> ...
- * 
+ *
*/ public class IF_ICMPGT extends IfInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IF_ICMPLE.java b/src/main/java/org/apache/bcel/generic/IF_ICMPLE.java index c79fb98fb0..18a1ff352d 100644 --- a/src/main/java/org/apache/bcel/generic/IF_ICMPLE.java +++ b/src/main/java/org/apache/bcel/generic/IF_ICMPLE.java @@ -21,9 +21,9 @@ /** * IF_ICMPLE - Branch if int comparison succeeds * - *
+ * 
  * Stack: ..., value1, value2 -> ...
- * 
+ *
*/ public class IF_ICMPLE extends IfInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IF_ICMPLT.java b/src/main/java/org/apache/bcel/generic/IF_ICMPLT.java index ce433d06ed..b5df339ea5 100644 --- a/src/main/java/org/apache/bcel/generic/IF_ICMPLT.java +++ b/src/main/java/org/apache/bcel/generic/IF_ICMPLT.java @@ -21,9 +21,9 @@ /** * IF_ICMPLT - Branch if int comparison succeeds * - *
+ * 
  * Stack: ..., value1, value2 -> ...
- * 
+ *
*/ public class IF_ICMPLT extends IfInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IF_ICMPNE.java b/src/main/java/org/apache/bcel/generic/IF_ICMPNE.java index 73577e4209..2be5ef591b 100644 --- a/src/main/java/org/apache/bcel/generic/IF_ICMPNE.java +++ b/src/main/java/org/apache/bcel/generic/IF_ICMPNE.java @@ -21,9 +21,9 @@ /** * IF_ICMPNE - Branch if int comparison doesn't succeed * - *
+ * 
  * Stack: ..., value1, value2 -> ...
- * 
+ *
*/ public class IF_ICMPNE extends IfInstruction { diff --git a/src/main/java/org/apache/bcel/generic/ILOAD.java b/src/main/java/org/apache/bcel/generic/ILOAD.java index 8d31df386b..911f380a71 100644 --- a/src/main/java/org/apache/bcel/generic/ILOAD.java +++ b/src/main/java/org/apache/bcel/generic/ILOAD.java @@ -21,9 +21,9 @@ /** * ILOAD - Load int from local variable onto stack * - *
+ * 
  * Stack: ... -> ..., result
- * 
+ *
*/ public class ILOAD extends LoadInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IMUL.java b/src/main/java/org/apache/bcel/generic/IMUL.java index 30a5b46e96..3aacf5c749 100644 --- a/src/main/java/org/apache/bcel/generic/IMUL.java +++ b/src/main/java/org/apache/bcel/generic/IMUL.java @@ -21,9 +21,9 @@ /** * IMUL - Multiply ints * - *
+ * 
  * Stack: ..., value1, value2 -> result
- * 
+ *
*/ public class IMUL extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/INEG.java b/src/main/java/org/apache/bcel/generic/INEG.java index ceb5f389f5..216acab686 100644 --- a/src/main/java/org/apache/bcel/generic/INEG.java +++ b/src/main/java/org/apache/bcel/generic/INEG.java @@ -21,9 +21,9 @@ /** * INEG - Negate int * - *
+ * 
  * Stack: ..., value -> ..., result
- * 
+ *
*/ public class INEG extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/INSTANCEOF.java b/src/main/java/org/apache/bcel/generic/INSTANCEOF.java index ce2f865c96..3e14a4f7d9 100644 --- a/src/main/java/org/apache/bcel/generic/INSTANCEOF.java +++ b/src/main/java/org/apache/bcel/generic/INSTANCEOF.java @@ -23,9 +23,9 @@ /** * INSTANCEOF - Determine if object is of given type * - *
+ * 
  * Stack: ..., objectref -> ..., result
- * 
+ *
*/ public class INSTANCEOF extends CPInstruction implements LoadClass, ExceptionThrower, StackProducer, StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/INVOKEINTERFACE.java b/src/main/java/org/apache/bcel/generic/INVOKEINTERFACE.java index 650af62796..d8798cdc65 100644 --- a/src/main/java/org/apache/bcel/generic/INVOKEINTERFACE.java +++ b/src/main/java/org/apache/bcel/generic/INVOKEINTERFACE.java @@ -29,9 +29,9 @@ /** * INVOKEINTERFACE - Invoke interface method * - *
+ * 
  * Stack: ..., objectref, [arg1, [arg2 ...]] -> ...
- * 
+ *
* * @see The * invokeinterface instruction in The Java Virtual Machine Specification diff --git a/src/main/java/org/apache/bcel/generic/INVOKESPECIAL.java b/src/main/java/org/apache/bcel/generic/INVOKESPECIAL.java index d1b5e91959..f78691c2be 100644 --- a/src/main/java/org/apache/bcel/generic/INVOKESPECIAL.java +++ b/src/main/java/org/apache/bcel/generic/INVOKESPECIAL.java @@ -28,9 +28,9 @@ * INVOKESPECIAL - Invoke instance method; special handling for superclass, private and instance initialization method * invocations * - *
+ * 
  * Stack: ..., objectref, [arg1, [arg2 ...]] -> ...
- * 
+ *
* * @see The * invokespecial instruction in The Java Virtual Machine Specification diff --git a/src/main/java/org/apache/bcel/generic/INVOKESTATIC.java b/src/main/java/org/apache/bcel/generic/INVOKESTATIC.java index 11522741ec..6ed183a192 100644 --- a/src/main/java/org/apache/bcel/generic/INVOKESTATIC.java +++ b/src/main/java/org/apache/bcel/generic/INVOKESTATIC.java @@ -27,9 +27,9 @@ /** * INVOKESTATIC - Invoke a class (static) method * - *
+ * 
  * Stack: ..., [arg1, [arg2 ...]] -> ...
- * 
+ *
* * @see The invokestatic * instruction in The Java Virtual Machine Specification diff --git a/src/main/java/org/apache/bcel/generic/INVOKEVIRTUAL.java b/src/main/java/org/apache/bcel/generic/INVOKEVIRTUAL.java index 95e23aadd5..d4dd6831d9 100644 --- a/src/main/java/org/apache/bcel/generic/INVOKEVIRTUAL.java +++ b/src/main/java/org/apache/bcel/generic/INVOKEVIRTUAL.java @@ -27,9 +27,9 @@ /** * INVOKEVIRTUAL - Invoke instance method; dispatch based on class * - *
+ * 
  * Stack: ..., objectref, [arg1, [arg2 ...]] -> ...
- * 
+ *
* * @see The * invokevirtual instruction in The Java Virtual Machine Specification diff --git a/src/main/java/org/apache/bcel/generic/IOR.java b/src/main/java/org/apache/bcel/generic/IOR.java index f9897b9a94..4bd613bcf5 100644 --- a/src/main/java/org/apache/bcel/generic/IOR.java +++ b/src/main/java/org/apache/bcel/generic/IOR.java @@ -21,9 +21,9 @@ /** * IOR - Bitwise OR int * - *
+ * 
  * Stack: ..., value1, value2 -> ..., result
- * 
+ *
*/ public class IOR extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IREM.java b/src/main/java/org/apache/bcel/generic/IREM.java index 20c2a01749..7451116399 100644 --- a/src/main/java/org/apache/bcel/generic/IREM.java +++ b/src/main/java/org/apache/bcel/generic/IREM.java @@ -23,9 +23,9 @@ /** * IREM - Remainder of int * - *
+ * 
  * Stack: ..., value1, value2 -> result
- * 
+ *
*/ public class IREM extends ArithmeticInstruction implements ExceptionThrower { diff --git a/src/main/java/org/apache/bcel/generic/IRETURN.java b/src/main/java/org/apache/bcel/generic/IRETURN.java index 65ab4ca2b7..76b6354cd5 100644 --- a/src/main/java/org/apache/bcel/generic/IRETURN.java +++ b/src/main/java/org/apache/bcel/generic/IRETURN.java @@ -21,9 +21,9 @@ /** * IRETURN - Return int from method * - *
+ * 
  * Stack: ..., value -> <empty>
- * 
+ *
*/ public class IRETURN extends ReturnInstruction { diff --git a/src/main/java/org/apache/bcel/generic/ISHL.java b/src/main/java/org/apache/bcel/generic/ISHL.java index b051b7e2a7..9e32aeda6f 100644 --- a/src/main/java/org/apache/bcel/generic/ISHL.java +++ b/src/main/java/org/apache/bcel/generic/ISHL.java @@ -21,9 +21,9 @@ /** * ISHL - Arithmetic shift left int * - *
+ * 
  * Stack: ..., value1, value2 -> ..., result
- * 
+ *
*/ public class ISHL extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/ISHR.java b/src/main/java/org/apache/bcel/generic/ISHR.java index 102448a16c..8025356974 100644 --- a/src/main/java/org/apache/bcel/generic/ISHR.java +++ b/src/main/java/org/apache/bcel/generic/ISHR.java @@ -21,9 +21,9 @@ /** * ISHR - Arithmetic shift right int * - *
+ * 
  * Stack: ..., value1, value2 -> ..., result
- * 
+ *
*/ public class ISHR extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/ISTORE.java b/src/main/java/org/apache/bcel/generic/ISTORE.java index b0c9a9b082..b054338dff 100644 --- a/src/main/java/org/apache/bcel/generic/ISTORE.java +++ b/src/main/java/org/apache/bcel/generic/ISTORE.java @@ -21,9 +21,9 @@ /** * ISTORE - Store int from stack into local variable * - *
+ * 
  * Stack: ..., value -> ...
- * 
+ *
*/ public class ISTORE extends StoreInstruction { diff --git a/src/main/java/org/apache/bcel/generic/ISUB.java b/src/main/java/org/apache/bcel/generic/ISUB.java index 9f346062d3..b79a7b6e92 100644 --- a/src/main/java/org/apache/bcel/generic/ISUB.java +++ b/src/main/java/org/apache/bcel/generic/ISUB.java @@ -21,9 +21,9 @@ /** * ISUB - Substract ints * - *
+ * 
  * Stack: ..., value1, value2 -> result
- * 
+ *
*/ public class ISUB extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IUSHR.java b/src/main/java/org/apache/bcel/generic/IUSHR.java index 04ab9528b5..5435780127 100644 --- a/src/main/java/org/apache/bcel/generic/IUSHR.java +++ b/src/main/java/org/apache/bcel/generic/IUSHR.java @@ -21,9 +21,9 @@ /** * IUSHR - Logical shift right int * - *
+ * 
  * Stack: ..., value1, value2 -> ..., result
- * 
+ *
*/ public class IUSHR extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/IXOR.java b/src/main/java/org/apache/bcel/generic/IXOR.java index 0b64b22652..d1dd387d1a 100644 --- a/src/main/java/org/apache/bcel/generic/IXOR.java +++ b/src/main/java/org/apache/bcel/generic/IXOR.java @@ -21,9 +21,9 @@ /** * IXOR - Bitwise XOR int * - *
+ * 
  * Stack: ..., value1, value2 -> ..., result
- * 
+ *
*/ public class IXOR extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/L2D.java b/src/main/java/org/apache/bcel/generic/L2D.java index 0a8ba3f8f6..0e29e374fe 100644 --- a/src/main/java/org/apache/bcel/generic/L2D.java +++ b/src/main/java/org/apache/bcel/generic/L2D.java @@ -21,9 +21,9 @@ /** * L2D - Convert long to double * - *
+ * 
  * Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
- * 
+ *
*/ public class L2D extends ConversionInstruction { diff --git a/src/main/java/org/apache/bcel/generic/L2F.java b/src/main/java/org/apache/bcel/generic/L2F.java index 7608d3d1e7..67384614fe 100644 --- a/src/main/java/org/apache/bcel/generic/L2F.java +++ b/src/main/java/org/apache/bcel/generic/L2F.java @@ -21,9 +21,9 @@ /** * L2F - Convert long to float * - *
+ * 
  * Stack: ..., value.word1, value.word2 -> ..., result
- * 
+ *
*/ public class L2F extends ConversionInstruction { diff --git a/src/main/java/org/apache/bcel/generic/L2I.java b/src/main/java/org/apache/bcel/generic/L2I.java index 95fcc88241..122be8411f 100644 --- a/src/main/java/org/apache/bcel/generic/L2I.java +++ b/src/main/java/org/apache/bcel/generic/L2I.java @@ -21,9 +21,9 @@ /** * L2I - Convert long to int * - *
+ * 
  * Stack: ..., value.word1, value.word2 -> ..., result
- * 
+ *
*/ public class L2I extends ConversionInstruction { diff --git a/src/main/java/org/apache/bcel/generic/LADD.java b/src/main/java/org/apache/bcel/generic/LADD.java index 3d0c6b8c5a..3182d9b2e6 100644 --- a/src/main/java/org/apache/bcel/generic/LADD.java +++ b/src/main/java/org/apache/bcel/generic/LADD.java @@ -21,9 +21,9 @@ /** * LADD - Add longs * - *
+ * 
  * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
- * 
+ *
* * ..., result.word1, result.word2 */ diff --git a/src/main/java/org/apache/bcel/generic/LALOAD.java b/src/main/java/org/apache/bcel/generic/LALOAD.java index 1c1db65aee..c9d034e0bd 100644 --- a/src/main/java/org/apache/bcel/generic/LALOAD.java +++ b/src/main/java/org/apache/bcel/generic/LALOAD.java @@ -21,9 +21,9 @@ /** * LALOAD - Load long from array * - *
+ * 
  * Stack: ..., arrayref, index -> ..., value1, value2
- * 
+ *
*/ public class LALOAD extends ArrayInstruction implements StackProducer { diff --git a/src/main/java/org/apache/bcel/generic/LAND.java b/src/main/java/org/apache/bcel/generic/LAND.java index 375e6bcb4f..0593c97a64 100644 --- a/src/main/java/org/apache/bcel/generic/LAND.java +++ b/src/main/java/org/apache/bcel/generic/LAND.java @@ -21,9 +21,9 @@ /** * LAND - Bitwise AND longs * - *
+ * 
  * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
- * 
+ *
* * ..., result.word1, result.word2 */ diff --git a/src/main/java/org/apache/bcel/generic/LASTORE.java b/src/main/java/org/apache/bcel/generic/LASTORE.java index 1e0e8ed5ca..76badf8330 100644 --- a/src/main/java/org/apache/bcel/generic/LASTORE.java +++ b/src/main/java/org/apache/bcel/generic/LASTORE.java @@ -21,9 +21,9 @@ /** * LASTORE - Store into long array * - *
+ * 
  * Stack: ..., arrayref, index, value.word1, value.word2 -> ...
- * 
+ *
*/ public class LASTORE extends ArrayInstruction implements StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/LCMP.java b/src/main/java/org/apache/bcel/generic/LCMP.java index 1768d2ae40..d12bed349e 100644 --- a/src/main/java/org/apache/bcel/generic/LCMP.java +++ b/src/main/java/org/apache/bcel/generic/LCMP.java @@ -21,9 +21,9 @@ /** * LCMP - Compare longs: * - *
+ * 
  * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 -> ..., result <= -1, 0, 1>
- * 
+ *
*/ public class LCMP extends Instruction implements TypedInstruction, StackProducer, StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/LCONST.java b/src/main/java/org/apache/bcel/generic/LCONST.java index 875379038e..57380288cd 100644 --- a/src/main/java/org/apache/bcel/generic/LCONST.java +++ b/src/main/java/org/apache/bcel/generic/LCONST.java @@ -21,9 +21,9 @@ /** * LCONST - Push 0 or 1, other values cause an exception * - *
+ * 
  * Stack: ... -> ...,
- * 
+ *
*/ public class LCONST extends Instruction implements ConstantPushInstruction { diff --git a/src/main/java/org/apache/bcel/generic/LDC.java b/src/main/java/org/apache/bcel/generic/LDC.java index d84b480870..2d916b5017 100644 --- a/src/main/java/org/apache/bcel/generic/LDC.java +++ b/src/main/java/org/apache/bcel/generic/LDC.java @@ -27,9 +27,9 @@ /** * LDC - Push item from constant pool. * - *
+ * 
  * Stack: ... -> ..., item
- * 
+ *
*/ public class LDC extends CPInstruction implements PushInstruction, ExceptionThrower { diff --git a/src/main/java/org/apache/bcel/generic/LDC2_W.java b/src/main/java/org/apache/bcel/generic/LDC2_W.java index ec7193d938..3075abc7f2 100644 --- a/src/main/java/org/apache/bcel/generic/LDC2_W.java +++ b/src/main/java/org/apache/bcel/generic/LDC2_W.java @@ -21,9 +21,9 @@ /** * LDC2_W - Push long or double from constant pool * - *
+ * 
  * Stack: ... -> ..., item.word1, item.word2
- * 
+ *
*/ public class LDC2_W extends CPInstruction implements PushInstruction { diff --git a/src/main/java/org/apache/bcel/generic/LDC_W.java b/src/main/java/org/apache/bcel/generic/LDC_W.java index 52600ae79f..00eae30943 100644 --- a/src/main/java/org/apache/bcel/generic/LDC_W.java +++ b/src/main/java/org/apache/bcel/generic/LDC_W.java @@ -25,9 +25,9 @@ /** * LDC_W - Push item from constant pool (wide index) * - *
+ * 
  * Stack: ... -> ..., item.word1, item.word2
- * 
+ *
*/ public class LDC_W extends LDC { diff --git a/src/main/java/org/apache/bcel/generic/LDIV.java b/src/main/java/org/apache/bcel/generic/LDIV.java index 0f2653877e..3143d74883 100644 --- a/src/main/java/org/apache/bcel/generic/LDIV.java +++ b/src/main/java/org/apache/bcel/generic/LDIV.java @@ -23,9 +23,9 @@ /** * LDIV - Divide longs * - *
+ * 
  * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
- * 
+ *
* * ..., result.word1, result.word2 */ diff --git a/src/main/java/org/apache/bcel/generic/LLOAD.java b/src/main/java/org/apache/bcel/generic/LLOAD.java index 7ca761b546..418b16db79 100644 --- a/src/main/java/org/apache/bcel/generic/LLOAD.java +++ b/src/main/java/org/apache/bcel/generic/LLOAD.java @@ -21,9 +21,9 @@ /** * LLOAD - Load long from local variable * - *
+ * 
  * Stack ... -> ..., result.word1, result.word2
- * 
+ *
*/ public class LLOAD extends LoadInstruction { diff --git a/src/main/java/org/apache/bcel/generic/LMUL.java b/src/main/java/org/apache/bcel/generic/LMUL.java index d2245144a5..47be2cde4e 100644 --- a/src/main/java/org/apache/bcel/generic/LMUL.java +++ b/src/main/java/org/apache/bcel/generic/LMUL.java @@ -21,9 +21,9 @@ /** * LMUL - Multiply longs * - *
+ * 
  * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
- * 
+ *
* * ..., result.word1, result.word2 */ diff --git a/src/main/java/org/apache/bcel/generic/LNEG.java b/src/main/java/org/apache/bcel/generic/LNEG.java index 5db072d9fe..e055686553 100644 --- a/src/main/java/org/apache/bcel/generic/LNEG.java +++ b/src/main/java/org/apache/bcel/generic/LNEG.java @@ -21,9 +21,9 @@ /** * LNEG - Negate long * - *
+ * 
  * Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
- * 
+ *
*/ public class LNEG extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/LOR.java b/src/main/java/org/apache/bcel/generic/LOR.java index a8cdfedde0..dd2b835476 100644 --- a/src/main/java/org/apache/bcel/generic/LOR.java +++ b/src/main/java/org/apache/bcel/generic/LOR.java @@ -21,9 +21,9 @@ /** * LOR - Bitwise OR long * - *
+ * 
  * Stack: ..., value1, value2 -> ..., result
- * 
+ *
*/ public class LOR extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/LREM.java b/src/main/java/org/apache/bcel/generic/LREM.java index 5ae87dcdff..d9aad9e231 100644 --- a/src/main/java/org/apache/bcel/generic/LREM.java +++ b/src/main/java/org/apache/bcel/generic/LREM.java @@ -23,9 +23,9 @@ /** * LREM - Remainder of long * - *
+ * 
  * Stack: ..., value1, value2 -> result
- * 
+ *
*/ public class LREM extends ArithmeticInstruction implements ExceptionThrower { diff --git a/src/main/java/org/apache/bcel/generic/LRETURN.java b/src/main/java/org/apache/bcel/generic/LRETURN.java index 9a447e9f83..78aa1e8c06 100644 --- a/src/main/java/org/apache/bcel/generic/LRETURN.java +++ b/src/main/java/org/apache/bcel/generic/LRETURN.java @@ -21,9 +21,9 @@ /** * LRETURN - Return long from method * - *
+ * 
  * Stack: ..., value.word1, value.word2 -> <empty>
- * 
+ *
*/ public class LRETURN extends ReturnInstruction { diff --git a/src/main/java/org/apache/bcel/generic/LSHL.java b/src/main/java/org/apache/bcel/generic/LSHL.java index b7eb217771..91f5e2e21a 100644 --- a/src/main/java/org/apache/bcel/generic/LSHL.java +++ b/src/main/java/org/apache/bcel/generic/LSHL.java @@ -21,9 +21,9 @@ /** * LSHL - Arithmetic shift left long * - *
+ * 
  * Stack: ..., value1.word1, value1.word2, value2 -> ..., result.word1, result.word2
- * 
+ *
*/ public class LSHL extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/LSHR.java b/src/main/java/org/apache/bcel/generic/LSHR.java index 00ee22f7fb..417bb7e287 100644 --- a/src/main/java/org/apache/bcel/generic/LSHR.java +++ b/src/main/java/org/apache/bcel/generic/LSHR.java @@ -21,9 +21,9 @@ /** * LSHR - Arithmetic shift right long * - *
+ * 
  * Stack: ..., value1.word1, value1.word2, value2 -> ..., result.word1, result.word2
- * 
+ *
*/ public class LSHR extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/LSTORE.java b/src/main/java/org/apache/bcel/generic/LSTORE.java index 3fa4583a70..43f15ce0ed 100644 --- a/src/main/java/org/apache/bcel/generic/LSTORE.java +++ b/src/main/java/org/apache/bcel/generic/LSTORE.java @@ -21,9 +21,9 @@ /** * LSTORE - Store long into local variable * - *
+ * 
  * Stack: ..., value.word1, value.word2 -> ...
- * 
+ *
*/ public class LSTORE extends StoreInstruction { diff --git a/src/main/java/org/apache/bcel/generic/LSUB.java b/src/main/java/org/apache/bcel/generic/LSUB.java index 8edecde170..f768ab79fd 100644 --- a/src/main/java/org/apache/bcel/generic/LSUB.java +++ b/src/main/java/org/apache/bcel/generic/LSUB.java @@ -21,9 +21,9 @@ /** * LSUB - Substract longs * - *
+ * 
  * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
- * 
+ *
* * ..., result.word1, result.word2 */ diff --git a/src/main/java/org/apache/bcel/generic/LUSHR.java b/src/main/java/org/apache/bcel/generic/LUSHR.java index daa56d70a3..69c023ba26 100644 --- a/src/main/java/org/apache/bcel/generic/LUSHR.java +++ b/src/main/java/org/apache/bcel/generic/LUSHR.java @@ -21,9 +21,9 @@ /** * LUSHR - Logical shift right long * - *
+ * 
  * Stack: ..., value1, value2 -> ..., result
- * 
+ *
*/ public class LUSHR extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/LXOR.java b/src/main/java/org/apache/bcel/generic/LXOR.java index 928ac48fca..f2176dec74 100644 --- a/src/main/java/org/apache/bcel/generic/LXOR.java +++ b/src/main/java/org/apache/bcel/generic/LXOR.java @@ -21,9 +21,9 @@ /** * LXOR - Bitwise XOR long * - *
+ * 
  * Stack: ..., value1, value2 -> ..., result
- * 
+ *
*/ public class LXOR extends ArithmeticInstruction { diff --git a/src/main/java/org/apache/bcel/generic/MONITORENTER.java b/src/main/java/org/apache/bcel/generic/MONITORENTER.java index 78ab9453b4..0601df7427 100644 --- a/src/main/java/org/apache/bcel/generic/MONITORENTER.java +++ b/src/main/java/org/apache/bcel/generic/MONITORENTER.java @@ -23,9 +23,9 @@ /** * MONITORENTER - Enter monitor for object * - *
+ * 
  * Stack: ..., objectref -> ...
- * 
+ *
*/ public class MONITORENTER extends Instruction implements ExceptionThrower, StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/MONITOREXIT.java b/src/main/java/org/apache/bcel/generic/MONITOREXIT.java index 232cd57a70..04e1375864 100644 --- a/src/main/java/org/apache/bcel/generic/MONITOREXIT.java +++ b/src/main/java/org/apache/bcel/generic/MONITOREXIT.java @@ -23,9 +23,9 @@ /** * MONITOREXIT - Exit monitor for object * - *
+ * 
  * Stack: ..., objectref -> ...
- * 
+ *
*/ public class MONITOREXIT extends Instruction implements ExceptionThrower, StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/MULTIANEWARRAY.java b/src/main/java/org/apache/bcel/generic/MULTIANEWARRAY.java index 510d004489..5c2899763f 100644 --- a/src/main/java/org/apache/bcel/generic/MULTIANEWARRAY.java +++ b/src/main/java/org/apache/bcel/generic/MULTIANEWARRAY.java @@ -28,9 +28,9 @@ /** * MULTIANEWARRAY - Create new mutidimensional array of references * - *
+ * 
  * Stack: ..., count1, [count2, ...] -> ..., arrayref
- * 
+ *
*/ public class MULTIANEWARRAY extends CPInstruction implements LoadClass, AllocationInstruction, ExceptionThrower { diff --git a/src/main/java/org/apache/bcel/generic/NEW.java b/src/main/java/org/apache/bcel/generic/NEW.java index fecee5ce6d..1e5a40f9a6 100644 --- a/src/main/java/org/apache/bcel/generic/NEW.java +++ b/src/main/java/org/apache/bcel/generic/NEW.java @@ -23,9 +23,9 @@ /** * NEW - Create new object * - *
+ * 
  * Stack: ... -> ..., objectref
- * 
+ *
*/ public class NEW extends CPInstruction implements LoadClass, AllocationInstruction, ExceptionThrower, StackProducer { diff --git a/src/main/java/org/apache/bcel/generic/NEWARRAY.java b/src/main/java/org/apache/bcel/generic/NEWARRAY.java index 8ac94470f1..38177be487 100644 --- a/src/main/java/org/apache/bcel/generic/NEWARRAY.java +++ b/src/main/java/org/apache/bcel/generic/NEWARRAY.java @@ -27,9 +27,9 @@ /** * NEWARRAY - Create new array of basic type (int, short, ...) * - *
+ * 
  * Stack: ..., count -> ..., arrayref
- * 
+ *
* * type must be one of T_INT, T_SHORT, ... */ diff --git a/src/main/java/org/apache/bcel/generic/POP.java b/src/main/java/org/apache/bcel/generic/POP.java index fb18a9859d..a2ddb28431 100644 --- a/src/main/java/org/apache/bcel/generic/POP.java +++ b/src/main/java/org/apache/bcel/generic/POP.java @@ -21,9 +21,9 @@ /** * POP - Pop top operand stack word * - *
+ * 
  * Stack: ..., word -> ...
- * 
+ *
*/ public class POP extends StackInstruction implements PopInstruction { diff --git a/src/main/java/org/apache/bcel/generic/POP2.java b/src/main/java/org/apache/bcel/generic/POP2.java index c63390c803..8d4a5717c8 100644 --- a/src/main/java/org/apache/bcel/generic/POP2.java +++ b/src/main/java/org/apache/bcel/generic/POP2.java @@ -21,9 +21,9 @@ /** * POP2 - Pop two top operand stack words * - *
+ * 
  * Stack: ..., word2, word1 -> ...
- * 
+ *
*/ public class POP2 extends StackInstruction implements PopInstruction { diff --git a/src/main/java/org/apache/bcel/generic/PUTFIELD.java b/src/main/java/org/apache/bcel/generic/PUTFIELD.java index a42f61ab66..1f4709951d 100644 --- a/src/main/java/org/apache/bcel/generic/PUTFIELD.java +++ b/src/main/java/org/apache/bcel/generic/PUTFIELD.java @@ -24,15 +24,15 @@ /** * PUTFIELD - Put field in object * - *
+ * 
  * Stack: ..., objectref, value -> ...
- * 
+ *
* * OR * - *
+ * 
  * Stack: ..., objectref, value.word1, value.word2 -> ...
- * 
+ *
*/ public class PUTFIELD extends FieldInstruction implements PopInstruction, ExceptionThrower { diff --git a/src/main/java/org/apache/bcel/generic/PUTSTATIC.java b/src/main/java/org/apache/bcel/generic/PUTSTATIC.java index 03ee250a1b..8ace429c54 100644 --- a/src/main/java/org/apache/bcel/generic/PUTSTATIC.java +++ b/src/main/java/org/apache/bcel/generic/PUTSTATIC.java @@ -24,15 +24,15 @@ /** * PUTSTATIC - Put static field in class * - *
+ * 
  * Stack: ..., value -> ...
- * 
+ *
* * OR * - *
+ * 
  * Stack: ..., value.word1, value.word2 -> ...
- * 
+ *
*/ public class PUTSTATIC extends FieldInstruction implements ExceptionThrower, PopInstruction { diff --git a/src/main/java/org/apache/bcel/generic/RET.java b/src/main/java/org/apache/bcel/generic/RET.java index b2890970cd..25c7a9f4d2 100644 --- a/src/main/java/org/apache/bcel/generic/RET.java +++ b/src/main/java/org/apache/bcel/generic/RET.java @@ -26,9 +26,9 @@ /** * RET - Return from subroutine * - *
+ * 
  * Stack: ... -> ...
- * 
+ *
*/ public class RET extends Instruction implements IndexedInstruction, TypedInstruction { diff --git a/src/main/java/org/apache/bcel/generic/RETURN.java b/src/main/java/org/apache/bcel/generic/RETURN.java index a97f1e4d71..23a3500da8 100644 --- a/src/main/java/org/apache/bcel/generic/RETURN.java +++ b/src/main/java/org/apache/bcel/generic/RETURN.java @@ -21,9 +21,9 @@ /** * RETURN - Return from void method * - *
+ * 
  * Stack: ... -> <empty>
- * 
+ *
*/ public class RETURN extends ReturnInstruction { diff --git a/src/main/java/org/apache/bcel/generic/SALOAD.java b/src/main/java/org/apache/bcel/generic/SALOAD.java index 7c156dfe89..bfa63f6d33 100644 --- a/src/main/java/org/apache/bcel/generic/SALOAD.java +++ b/src/main/java/org/apache/bcel/generic/SALOAD.java @@ -21,9 +21,9 @@ /** * SALOAD - Load short from array * - *
+ * 
  * Stack: ..., arrayref, index -> ..., value
- * 
+ *
*/ public class SALOAD extends ArrayInstruction implements StackProducer { diff --git a/src/main/java/org/apache/bcel/generic/SASTORE.java b/src/main/java/org/apache/bcel/generic/SASTORE.java index d5581fc956..9d8172e4b7 100644 --- a/src/main/java/org/apache/bcel/generic/SASTORE.java +++ b/src/main/java/org/apache/bcel/generic/SASTORE.java @@ -21,9 +21,9 @@ /** * SASTORE - Store into short array * - *
+ * 
  * Stack: ..., arrayref, index, value -> ...
- * 
+ *
*/ public class SASTORE extends ArrayInstruction implements StackConsumer { diff --git a/src/main/java/org/apache/bcel/generic/SIPUSH.java b/src/main/java/org/apache/bcel/generic/SIPUSH.java index 3cc7d5daa0..05d0f1ea85 100644 --- a/src/main/java/org/apache/bcel/generic/SIPUSH.java +++ b/src/main/java/org/apache/bcel/generic/SIPUSH.java @@ -26,9 +26,9 @@ /** * SIPUSH - Push short * - *
+ * 
  * Stack: ... -> ..., value
- * 
+ *
*/ public class SIPUSH extends Instruction implements ConstantPushInstruction { diff --git a/src/main/java/org/apache/bcel/generic/SWAP.java b/src/main/java/org/apache/bcel/generic/SWAP.java index 6deaaa4ebc..e1c59167e3 100644 --- a/src/main/java/org/apache/bcel/generic/SWAP.java +++ b/src/main/java/org/apache/bcel/generic/SWAP.java @@ -21,9 +21,9 @@ /** * SWAP - Swa top operand stack word * - *
+ * 
  * Stack: ..., word2, word1 -> ..., word1, word2
- * 
+ *
*/ public class SWAP extends StackInstruction implements StackConsumer, StackProducer { From 5aa8f9311ea98ca387452ee1bf13676edff4ca7d Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 09:03:28 -0500 Subject: [PATCH 74/83] Use lower case Javadoc tags --- src/main/java/org/apache/bcel/classfile/Utility.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/apache/bcel/classfile/Utility.java b/src/main/java/org/apache/bcel/classfile/Utility.java index 5c003b1577..f201ced690 100644 --- a/src/main/java/org/apache/bcel/classfile/Utility.java +++ b/src/main/java/org/apache/bcel/classfile/Utility.java @@ -270,7 +270,7 @@ public static String codeToString(final byte[] code, final ConstantPool constant * * @param code byte code array. * @param constantPool Array of constants. - * @param index offset in 'code' array (number of opcodes, not bytes!). + * @param index offset in 'code' array (number of opcodes, not bytes!). * @param length number of opcodes to decompile, -1 for all. * @param verbose be verbose, for example print constant pool index. * @return String representation of byte codes. From 1e4023d82dbe6e223ea12dc0063bf58d1cd91af7 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 09:07:18 -0500 Subject: [PATCH 75/83] Deprecate org.apache.bcel.verifier.exc.Utility.getStackTrace(Throwable) --- src/changes/changes.xml | 1 + src/main/java/org/apache/bcel/verifier/exc/Utility.java | 9 +++------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index bc6820af41..f979dd528b 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -63,6 +63,7 @@ The type attribute can be add,update,fix,remove. Fix constant pool module access test on Java 26 and above #492. Deprecate org.apache.bcel.classfile.Utility.Utility(). + Deprecate org.apache.bcel.verifier.exc.Utility.getStackTrace(Throwable). Add support for permitted subclasses #493. Add RecordComponentInfo.getAttribute(byte tag)#494. diff --git a/src/main/java/org/apache/bcel/verifier/exc/Utility.java b/src/main/java/org/apache/bcel/verifier/exc/Utility.java index b0d06c8c74..fae5dfefa8 100644 --- a/src/main/java/org/apache/bcel/verifier/exc/Utility.java +++ b/src/main/java/org/apache/bcel/verifier/exc/Utility.java @@ -18,8 +18,7 @@ */ package org.apache.bcel.verifier.exc; -import java.io.PrintWriter; -import java.io.StringWriter; +import org.apache.commons.lang3.exception.ExceptionUtils; /** * A utility class providing convenience methods concerning Throwable instances. @@ -33,12 +32,10 @@ public final class Utility { * * @param t the Throwable instance. * @return the stack trace as a String. + * @deprecated Use {@link ExceptionUtils#getStackTrace(Throwable)}. */ public static String getStackTrace(final Throwable t) { - final StringWriter sw = new StringWriter(); - final PrintWriter pw = new PrintWriter(sw); - t.printStackTrace(pw); - return sw.toString(); + return ExceptionUtils.getStackTrace(t); } /** This class is not instantiable. */ From cb5096aa85b0a1c3c1e37beed95ca93c9e492069 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 14 Feb 2026 09:08:06 -0500 Subject: [PATCH 76/83] ix all Javadoc warnings and enforce checks by default --- src/changes/changes.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index f979dd528b..54f546a7ad 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -64,6 +64,7 @@ The type attribute can be add,update,fix,remove. Fix constant pool module access test on Java 26 and above #492. Deprecate org.apache.bcel.classfile.Utility.Utility(). Deprecate org.apache.bcel.verifier.exc.Utility.getStackTrace(Throwable). + Fix all Javadoc warnings and enforce checks by default. Add support for permitted subclasses #493. Add RecordComponentInfo.getAttribute(byte tag)#494. From f212f20615d2a8d4d4bc2b637c4765104601124f Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Fri, 20 Feb 2026 07:41:46 -0500 Subject: [PATCH 77/83] Bump github/codeql-action from 4.32.2 to 4.32.3 --- .github/workflows/codeql-analysis.yml | 6 +++--- .github/workflows/scorecards-analysis.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 9ccfb03278..b1f4f562df 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -58,7 +58,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2 + uses: github/codeql-action/init@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -69,7 +69,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2 + uses: github/codeql-action/autobuild@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3 # â„šī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -83,4 +83,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2 + uses: github/codeql-action/analyze@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3 diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 818c876ece..799da79a83 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -64,6 +64,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2 + uses: github/codeql-action/upload-sarif@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3 with: sarif_file: results.sarif From d9870f07ce016aa7b329d8c0be1987fb9b4c1967 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Mon, 23 Feb 2026 10:58:22 -0500 Subject: [PATCH 78/83] Bump github/codeql-action from 4.32.0 to 4.32.4 --- .github/workflows/codeql-analysis.yml | 6 +++--- .github/workflows/scorecards-analysis.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index b1f4f562df..6c4aa3f571 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -58,7 +58,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3 + uses: github/codeql-action/init@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -69,7 +69,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3 + uses: github/codeql-action/autobuild@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4 # â„šī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -83,4 +83,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3 + uses: github/codeql-action/analyze@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4 diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 799da79a83..9fc7044eb2 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -64,6 +64,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3 + uses: github/codeql-action/upload-sarif@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4 with: sarif_file: results.sarif From 25e99d85c406d5a3dd03c311591b2e869620905e Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Fri, 27 Feb 2026 20:31:42 -0500 Subject: [PATCH 79/83] Bump org.apache.commons:commons-parent from 96 to 97. --- pom.xml | 2 +- src/changes/changes.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 3c97d8b0be..90934fd3ae 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ org.apache.commons commons-parent - 96 + 97 org.apache.bcel bcel diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 54f546a7ad..26141610aa 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -69,7 +69,7 @@ The type attribute can be add,update,fix,remove. Add support for permitted subclasses #493. Add RecordComponentInfo.getAttribute(byte tag)#494. - Bump org.apache.commons:commons-parent from 95 to 96. + Bump org.apache.commons:commons-parent from 95 to 97.
From 47e75d5dc0497d6ab33aa08e9761770d43e22cdf Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Mon, 2 Mar 2026 08:33:46 -0500 Subject: [PATCH 80/83] Bump github/codeql-action from 4.32.4 to 4.32.5 --- .github/workflows/codeql-analysis.yml | 6 +++--- .github/workflows/scorecards-analysis.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 6c4aa3f571..e2ee451b4e 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -58,7 +58,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4 + uses: github/codeql-action/init@c793b717bc78562f491db7b0e93a3a178b099162 # v4.32.5 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -69,7 +69,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4 + uses: github/codeql-action/autobuild@c793b717bc78562f491db7b0e93a3a178b099162 # v4.32.5 # â„šī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -83,4 +83,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4 + uses: github/codeql-action/analyze@c793b717bc78562f491db7b0e93a3a178b099162 # v4.32.5 diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 9fc7044eb2..65fa406aa9 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -64,6 +64,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4 + uses: github/codeql-action/upload-sarif@c793b717bc78562f491db7b0e93a3a178b099162 # v4.32.5 with: sarif_file: results.sarif From 2f4737448ad24572dbed044887cdd93cdc84c934 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Fri, 6 Mar 2026 07:35:33 -0500 Subject: [PATCH 81/83] Bump github/codeql-action from 4.32.0 to 4.32.6 --- .github/workflows/codeql-analysis.yml | 6 +++--- .github/workflows/scorecards-analysis.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index e2ee451b4e..4c52d9d27d 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -58,7 +58,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@c793b717bc78562f491db7b0e93a3a178b099162 # v4.32.5 + uses: github/codeql-action/init@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -69,7 +69,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@c793b717bc78562f491db7b0e93a3a178b099162 # v4.32.5 + uses: github/codeql-action/autobuild@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 # â„šī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -83,4 +83,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@c793b717bc78562f491db7b0e93a3a178b099162 # v4.32.5 + uses: github/codeql-action/analyze@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 65fa406aa9..8c86e78553 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -64,6 +64,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@c793b717bc78562f491db7b0e93a3a178b099162 # v4.32.5 + uses: github/codeql-action/upload-sarif@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 with: sarif_file: results.sarif From 795d300e703acb625fd1a22e0841f8d55e756b84 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Mon, 9 Mar 2026 08:37:53 -0400 Subject: [PATCH 82/83] Bump actions/upload-artifact from 6.0.0 to 7.0.0 --- .github/workflows/scorecards-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 8c86e78553..a35bf86eeb 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -57,7 +57,7 @@ jobs: publish_results: true - name: "Upload artifact" - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: SARIF file path: results.sarif From 46fd247b20b4d3d64790bc32c31ea9caaa6da244 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Thu, 19 Mar 2026 23:46:21 +0000 Subject: [PATCH 83/83] Add a reference to safe deserlialization --- src/site/xdoc/security.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/site/xdoc/security.xml b/src/site/xdoc/security.xml index d1e3c9ff1f..d8f2588804 100644 --- a/src/site/xdoc/security.xml +++ b/src/site/xdoc/security.xml @@ -55,5 +55,10 @@ +
+

+ For information about safe deserialization, please see Safe Deserialization. +

+