3232import java .util .zip .ZipEntry ;
3333
3434import 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 ;
3639import static org .apache .commons .io .FilenameUtils .normalize ;
3740import static org .apache .commons .io .FilenameUtils .separatorsToUnix ;
3841
3942import org .vafer .jdependency .Clazz .ParsedFileName ;
40- import org .vafer .jdependency .asm .DependenciesClassAdapter ;
4143
4244import static org .vafer .jdependency .Clazz .parseClassFileName ;
4345import 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 );
0 commit comments