Skip to content

Commit 02b4ecc

Browse files
committed
Cleanup classfile reading and upgrade to latest ASM
Fixes compatibility with PaperSpigot and TacoSpigot
1 parent f301aab commit 02b4ecc

File tree

4 files changed

+184
-336
lines changed

4 files changed

+184
-336
lines changed

pom.xml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,12 @@
336336
<groupId>org.java.net.substance</groupId>
337337
<artifactId>substance</artifactId>
338338
<version>6.0</version>
339+
<exclusions>
340+
<exclusion>
341+
<groupId>asm</groupId>
342+
<artifactId>asm-all</artifactId>
343+
</exclusion>
344+
</exclusions>
339345
</dependency>
340346
<!-- MCStats (this appears to no longer be working)
341347
<dependency>
@@ -349,16 +355,10 @@
349355
<type>jar</type>
350356
<version>1.9</version>
351357
</dependency>
352-
<!-- If ASM doesn't end up working out, this could also be used
353358
<dependency>
354-
<groupId>org.apache.bcel</groupId>
355-
<artifactId>bcel</artifactId>
356-
<version>6.0-SNAPSHOT</version>
357-
</dependency>-->
358-
<dependency>
359-
<groupId>asm</groupId>
359+
<groupId>org.ow2.asm</groupId>
360360
<artifactId>asm-all</artifactId>
361-
<version>3.3.1</version>
361+
<version>5.0.4</version>
362362
</dependency>
363363
<dependency>
364364
<groupId>jline</groupId>
@@ -504,7 +504,7 @@
504504
<include>mysql:mysql-connector-java:jar:*</include>
505505
<include>commons-codec:commons-codec:jar:*</include>
506506
<!--<include>org.apache.bcel:bcel:jar:*</include>-->
507-
<include>asm:asm-all:jar:*</include>
507+
<include>org.ow2.asm:asm-all:jar:*</include>
508508
<include>jline:jline:jar:*</include>
509509
<include>javax.mail:mail:jar:*</include>
510510
<include>javax.activation:activation:jar:*</include>
@@ -674,7 +674,7 @@
674674
</includes>
675675
</filter>-->
676676
<filter>
677-
<artifact>asm:asm-all:jar:*</artifact>
677+
<artifact>org.ow2.asm:asm-all:jar:*</artifact>
678678
<includes>
679679
<include>**</include>
680680
</includes>

src/main/java/com/laytonsmith/PureUtilities/ClassLoading/ClassDiscovery.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.laytonsmith.PureUtilities.ClassLoading;
22

33
import com.laytonsmith.PureUtilities.ClassLoading.ClassMirror.ClassMirror;
4+
import com.laytonsmith.PureUtilities.ClassLoading.ClassMirror.ClassMirrorVisitor;
45
import com.laytonsmith.PureUtilities.ClassLoading.ClassMirror.ClassReferenceMirror;
56
import com.laytonsmith.PureUtilities.ClassLoading.ClassMirror.FieldMirror;
67
import com.laytonsmith.PureUtilities.ClassLoading.ClassMirror.MethodMirror;
@@ -34,6 +35,8 @@
3435
import java.util.logging.Logger;
3536
import java.util.regex.Pattern;
3637

38+
import org.objectweb.asm.ClassReader;
39+
3740
/**
3841
* This class contains methods for dynamically determining things about Classes,
3942
* without loading them into PermGen. Search criteria is provided, (most notably
@@ -301,8 +304,10 @@ private synchronized void discover(URL rootLocation) {
301304
try {
302305
stream = FileUtil.readAsStream(new File(rootLocationFile,
303306
f.getAbsolutePath().replaceFirst(Pattern.quote(new File(root).getAbsolutePath() + File.separator), "")));
304-
ClassMirror cm = new ClassMirror(stream, new URL(url));
305-
mirrors.add(cm);
307+
ClassReader reader = new ClassReader(stream);
308+
ClassMirrorVisitor mirrorVisitor = new ClassMirrorVisitor();
309+
reader.accept(mirrorVisitor, ClassReader.SKIP_CODE | ClassReader.SKIP_FRAMES | ClassReader.SKIP_DEBUG);
310+
mirrors.add(mirrorVisitor.getMirror(new URL(url)));
306311
} catch (IOException ex) {
307312
Logger.getLogger(ClassDiscovery.class.getName()).log(Level.SEVERE, null, ex);
308313
} finally {
@@ -334,8 +339,10 @@ private synchronized void discover(URL rootLocation) {
334339
public void handle(String filename, InputStream in) {
335340
if (!filename.matches(".*\\$(?:\\d)*\\.class") && filename.endsWith(".class")) {
336341
try {
337-
ClassMirror cm = new ClassMirror(in, rootLocationFile.toURI().toURL());
338-
mirrors.add(cm);
342+
ClassReader reader = new ClassReader(in);
343+
ClassMirrorVisitor mirrorVisitor = new ClassMirrorVisitor();
344+
reader.accept(mirrorVisitor, ClassReader.SKIP_CODE | ClassReader.SKIP_FRAMES | ClassReader.SKIP_DEBUG);
345+
mirrors.add(mirrorVisitor.getMirror(rootLocationFile.toURI().toURL()));
339346
} catch (IOException ex) {
340347
Logger.getLogger(ClassDiscovery.class.getName()).log(Level.SEVERE, null, ex);
341348
}

0 commit comments

Comments
 (0)