Skip to content

Commit 6b4a34b

Browse files
committed
Migrate from ASM to Class-File API
1 parent fa59bba commit 6b4a34b

7 files changed

Lines changed: 76 additions & 241 deletions

File tree

.github/workflows/ci.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ jobs:
1010
test:
1111
strategy:
1212
matrix:
13-
os: [ubuntu-latest, windows-latest]
14-
# Always test on the latest version and LTS.
15-
java: [8, 11, 17, 21, 25]
13+
os: [ ubuntu-latest, windows-latest ]
14+
java:
15+
- 24 # Requires Java 24 or above for the Class-File API (java.lang.classfile)
16+
- 25
1617
runs-on: ${{ matrix.os }}
1718
steps:
1819
- name: Checkout

.github/workflows/release-docs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
uses: actions/setup-java@v5
2828
with:
2929
distribution: "zulu"
30-
java-version: 21
30+
java-version: 25
3131

3232
- name: Maven
3333
uses: stCarolas/setup-maven@v5

.github/workflows/release-to-maven-central.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
uses: actions/setup-java@v5
2626
with: # overwrite settings.xml
2727
distribution: "zulu"
28-
java-version: 21
28+
java-version: 25
2929
server-id: central
3030
server-username: MAVEN_CENTRAL_USERNAME
3131
server-password: MAVEN_CENTRAL_PASSWORD

pom.xml

Lines changed: 5 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,12 @@
77
<properties>
88
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
99
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
10-
<maven.compiler.source>8</maven.compiler.source>
11-
<maven.compiler.target>8</maven.compiler.target>
12-
<maven.compiler.release>8</maven.compiler.release>
10+
<maven.compiler.source>24</maven.compiler.source>
11+
<maven.compiler.target>24</maven.compiler.target>
12+
<maven.compiler.release>24</maven.compiler.release>
1313
<maven.version>3.9.6</maven.version>
1414
<test.workingDirectory
1515
>${project.build.directory}/test-working-directory</test.workingDirectory>
16-
<asm.version>9.9.1</asm.version>
1716
</properties>
1817
<modelVersion>4.0.0</modelVersion>
1918
<groupId>org.vafer</groupId>
@@ -79,31 +78,6 @@
7978
<artifactId>commons-io</artifactId>
8079
<version>2.21.0</version>
8180
</dependency>
82-
<dependency>
83-
<groupId>org.ow2.asm</groupId>
84-
<artifactId>asm</artifactId>
85-
<version>${asm.version}</version>
86-
</dependency>
87-
<dependency>
88-
<groupId>org.ow2.asm</groupId>
89-
<artifactId>asm-analysis</artifactId>
90-
<version>${asm.version}</version>
91-
</dependency>
92-
<dependency>
93-
<groupId>org.ow2.asm</groupId>
94-
<artifactId>asm-commons</artifactId>
95-
<version>${asm.version}</version>
96-
</dependency>
97-
<dependency>
98-
<groupId>org.ow2.asm</groupId>
99-
<artifactId>asm-util</artifactId>
100-
<version>${asm.version}</version>
101-
</dependency>
102-
<dependency>
103-
<groupId>org.ow2.asm</groupId>
104-
<artifactId>asm-tree</artifactId>
105-
<version>${asm.version}</version>
106-
</dependency>
10781
</dependencies>
10882

10983
<build>
@@ -250,7 +224,8 @@
250224
<goal>shade</goal>
251225
</goals>
252226
<configuration>
253-
<minimizeJar>true</minimizeJar>
227+
<!-- TODO: https://github.com/apache/maven-shade-plugin/issues/747 -->
228+
<minimizeJar>false</minimizeJar>
254229
<filters>
255230
<filter>
256231
<artifact>*:*</artifact>
@@ -264,27 +239,13 @@
264239
<artifactSet>
265240
<includes>
266241
<include>commons-io:commons-io</include>
267-
<include>org.ow2.asm:asm</include>
268-
<include>org.ow2.asm:asm-analysis</include>
269-
<include>org.ow2.asm:asm-commons</include>
270-
<include>org.ow2.asm:asm-util</include>
271-
<include>org.ow2.asm:asm-tree</include>
272242
</includes>
273243
</artifactSet>
274244
<relocations>
275245
<relocation>
276246
<pattern>org.apache.commons</pattern>
277247
<shadedPattern>org.vafer.jdeb.shaded.commons</shadedPattern>
278248
</relocation>
279-
<relocation>
280-
<pattern>org.ow2.asm</pattern>
281-
<shadedPattern>org.vafer.jdeb.shaded.ow2.asm</shadedPattern>
282-
</relocation>
283-
<relocation>
284-
<pattern>org.objectweb.asm</pattern>
285-
<shadedPattern
286-
>org.vafer.jdeb.shaded.objectweb.asm</shadedPattern>
287-
</relocation>
288249
</relocations>
289250
</configuration>
290251
</execution>

src/main/java/org/vafer/jdependency/Clazzpath.java

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,14 @@
3232
import java.util.zip.ZipEntry;
3333

3434
import org.apache.commons.io.input.MessageDigestInputStream;
35-
import org.objectweb.asm.ClassReader;
35+
import java.lang.classfile.ClassFile;
36+
import java.lang.classfile.ClassModel;
37+
import java.lang.classfile.constantpool.ClassEntry;
38+
import java.lang.classfile.constantpool.PoolEntry;
3639
import static org.apache.commons.io.FilenameUtils.normalize;
3740
import static org.apache.commons.io.FilenameUtils.separatorsToUnix;
3841

3942
import org.vafer.jdependency.Clazz.ParsedFileName;
40-
import org.vafer.jdependency.asm.DependenciesClassAdapter;
4143

4244
import static org.vafer.jdependency.Clazz.parseClassFileName;
4345
import static org.vafer.jdependency.utils.StreamUtils.asStream;
@@ -51,6 +53,8 @@ public final class Clazzpath {
5153
private final Map<String, Clazz> clazzes = new HashMap<>();
5254
private final boolean versions;
5355

56+
private static final java.util.regex.Pattern DESCRIPTOR_PATTERN = java.util.regex.Pattern.compile("L([a-zA-Z0-9_/\\$]+);");
57+
5458
private abstract static class Resource {
5559
public final String fileName;
5660
public final String forJava;
@@ -173,8 +177,30 @@ private ClazzpathUnit addClazzpathUnit( final Iterable<Resource> resources, fina
173177
inputStream = calculatingInputStream;
174178
}
175179

176-
final DependenciesClassAdapter v = new DependenciesClassAdapter();
177-
new ClassReader(inputStream).accept(v, ClassReader.EXPAND_FRAMES | ClassReader.SKIP_DEBUG);
180+
final byte[] bytes = inputStream.readAllBytes();
181+
final ClassModel classModel = ClassFile.of().parse(bytes);
182+
final Set<String> depNames = new HashSet<>();
183+
for (PoolEntry entry : classModel.constantPool()) {
184+
if (entry instanceof ClassEntry classEntry) {
185+
String className = classEntry.asInternalName().replace('/', '.');
186+
if (className.startsWith("[")) {
187+
java.util.regex.Matcher m = DESCRIPTOR_PATTERN.matcher(classEntry.asInternalName());
188+
while (m.find()) {
189+
depNames.add(m.group(1).replace('/', '.'));
190+
}
191+
} else {
192+
depNames.add(className);
193+
}
194+
} else if (entry instanceof java.lang.classfile.constantpool.Utf8Entry utf8Entry) {
195+
String str = utf8Entry.stringValue();
196+
if (str.indexOf('L') != -1 && str.indexOf(';') != -1) {
197+
java.util.regex.Matcher m = DESCRIPTOR_PATTERN.matcher(str);
198+
while (m.find()) {
199+
depNames.add(m.group(1).replace('/', '.'));
200+
}
201+
}
202+
}
203+
}
178204

179205
// get or create clazz
180206
final String clazzName = resource.name;
@@ -201,7 +227,6 @@ private ClazzpathUnit addClazzpathUnit( final Iterable<Resource> resources, fina
201227

202228

203229
// iterate through all dependencies
204-
final Set<String> depNames = v.getDependencies();
205230
for (String depName : depNames) {
206231

207232
Clazz dep = getClazz(depName);

src/main/java/org/vafer/jdependency/asm/DependenciesClassAdapter.java

Lines changed: 0 additions & 180 deletions
This file was deleted.

0 commit comments

Comments
 (0)