Skip to content

Commit 7fe7c2a

Browse files
committed
enable using classfile API on JDK 24+ via asm-jdk-bridge
fixes #1608 Signed-off-by: John Burns <wakingrufus@gmail.com>
1 parent bd167e2 commit 7fe7c2a

3 files changed

Lines changed: 5 additions & 3 deletions

File tree

archunit/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ ext.moduleName = 'com.tngtech.archunit'
77
dependencies {
88
api libs.slf4j
99
implementation libs.asm
10+
implementation(libs.asmjdkbridge)
1011
dependency.addGuava { dependencyNotation, config -> implementation(dependencyNotation, config) }
1112

1213
testImplementation libs.log4j.api

archunit/src/main/java/com/tngtech/archunit/core/importer/ClassFileProcessor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.Optional;
2323
import java.util.Set;
2424

25+
import codes.rafael.asmjdkbridge.ProbingClassReader;
2526
import com.tngtech.archunit.ArchConfiguration;
2627
import com.tngtech.archunit.core.domain.JavaClass;
2728
import com.tngtech.archunit.core.domain.JavaClassDescriptor;
@@ -40,7 +41,6 @@
4041
import com.tngtech.archunit.core.importer.TryCatchRecorder.TryCatchBlocksFinishedListener;
4142
import com.tngtech.archunit.core.importer.resolvers.ClassResolver;
4243
import com.tngtech.archunit.core.importer.resolvers.ClassResolver.ClassUriImporter;
43-
import org.objectweb.asm.ClassReader;
4444
import org.objectweb.asm.Label;
4545
import org.slf4j.Logger;
4646
import org.slf4j.LoggerFactory;
@@ -66,7 +66,7 @@ JavaClasses process(ClassFileSource source) {
6666
try (InputStream s = location.openStream()) {
6767
JavaClassProcessor javaClassProcessor =
6868
new JavaClassProcessor(new SourceDescriptor(location.getUri(), md5InClassSourcesEnabled), classDetailsRecorder, accessHandler);
69-
new ClassReader(s).accept(javaClassProcessor, 0);
69+
new ProbingClassReader(s).accept(javaClassProcessor, 0);
7070
javaClassProcessor.createJavaClass().ifPresent(importRecord::add);
7171
} catch (Exception e) {
7272
LOG.warn(String.format("Couldn't import class from %s", location.getUri()), e);
@@ -347,7 +347,7 @@ private static class UriImporterOfProcessor implements ClassUriImporter {
347347
public Optional<JavaClass> tryImport(URI uri) {
348348
try (InputStream inputStream = uri.toURL().openStream()) {
349349
JavaClassProcessor classProcessor = new JavaClassProcessor(new SourceDescriptor(uri, md5InClassSourcesEnabled), declarationHandler);
350-
new ClassReader(inputStream).accept(classProcessor, 0);
350+
new ProbingClassReader(inputStream).accept(classProcessor, 0);
351351
return classProcessor.createJavaClass();
352352
} catch (Exception e) {
353353
LOG.warn(String.format("Error during import from %s, falling back to simple import", uri), e);

gradle/libs.versions.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ assertj = "3.27.7"
66

77
[libraries]
88
asm = { group = "org.ow2.asm", name = "asm", version = "9.10.1" }
9+
asmjdkbridge = { module = "codes.rafael.asmjdkbridge:asm-jdk-bridge", version = "0.0.13"}
910
guava = { group = "com.google.guava", name = "guava", version = "33.6.0-jre" }
1011
slf4j = { group = "org.slf4j", name = "slf4j-api", version = "2.0.18" } # in sync with buildSrc/src/main/resources/release_check/archunit.pom
1112
log4j_api = { group = "org.apache.logging.log4j", name = "log4j-api", version.ref = "log4j" }

0 commit comments

Comments
 (0)