Skip to content

Commit 22a5bcc

Browse files
committed
Replace hard-coded vetoed class with configurable version; added version to module-info
1 parent 050c12e commit 22a5bcc

34 files changed

+360
-70
lines changed

net.tascalate.javaflow.providers.asm3/src/main/java/org/apache/commons/javaflow/providers/asm3/Asm3ClassTransformer.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@
2323
*/
2424
package org.apache.commons.javaflow.providers.asm3;
2525

26+
import org.objectweb.asm.ClassReader;
27+
import org.objectweb.asm.ClassWriter;
28+
2629
import org.apache.commons.javaflow.spi.ContinuableClassInfoResolver;
2730
import org.apache.commons.javaflow.spi.ResourceTransformer;
2831
import org.apache.commons.javaflow.spi.StopException;
29-
import org.objectweb.asm.ClassReader;
30-
import org.objectweb.asm.ClassWriter;
3132

3233
/**
3334
* AsmClassTransformer

net.tascalate.javaflow.providers.asm3/src/main/java/org/apache/commons/javaflow/providers/asm3/Asm3ContinuableClassInfoResolver.java

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,26 @@
2222
import java.util.Map;
2323
import java.util.Set;
2424

25+
import org.objectweb.asm.ClassReader;
26+
import org.objectweb.asm.Type;
27+
28+
import org.apache.commons.javaflow.spi.ClassMatcher;
29+
import org.apache.commons.javaflow.spi.ClassMatchers;
2530
import org.apache.commons.javaflow.spi.ContinuableClassInfo;
2631
import org.apache.commons.javaflow.spi.ContinuableClassInfoResolver;
2732
import org.apache.commons.javaflow.spi.ResourceLoader;
28-
import org.objectweb.asm.ClassReader;
29-
import org.objectweb.asm.Type;
33+
import org.apache.commons.javaflow.spi.VetoableResourceLoader;
3034

3135
class Asm3ContinuableClassInfoResolver implements ContinuableClassInfoResolver {
3236
private final Map<String, ContinuableClassInfo> visitedClasses = new HashMap<String, ContinuableClassInfo>();
3337
private final Set<String> processedAnnotations = new HashSet<String>();
3438
private final Set<String> continuableAnnotations = new HashSet<String>();
3539
private final ResourceLoader resourceLoader;
36-
37-
Asm3ContinuableClassInfoResolver(ResourceLoader classLoader) {
38-
this.resourceLoader = classLoader;
40+
private final ClassMatcher veto;
41+
42+
Asm3ContinuableClassInfoResolver(ResourceLoader resourceLoader) {
43+
this.resourceLoader = resourceLoader;
44+
this.veto = createVeto(resourceLoader);
3945
markContinuableAnnotation(CONTINUABLE_ANNOTATION_TYPE.getDescriptor());
4046
}
4147

@@ -61,6 +67,10 @@ public ContinuableClassInfo resolve(String classInternalName) throws IOException
6167
}
6268
}
6369
}
70+
71+
public ClassMatcher veto() {
72+
return veto;
73+
}
6474

6575
private ContinuableClassInfo resolveContinuableClassInfo(String classInternalName, ClassReader reader) {
6676
ContinuableClassInfo classInfo = visitedClasses.get(classInternalName);
@@ -141,6 +151,18 @@ public boolean isContinuableAnnotation(String annotationClassDescriptor) {
141151
throw new RuntimeException("Unknown annotation kind");
142152
}
143153
}
154+
155+
private static ClassMatcher createVeto(ResourceLoader resourceLoader) {
156+
if (resourceLoader instanceof VetoableResourceLoader) {
157+
try {
158+
return ((VetoableResourceLoader)resourceLoader).createVeto();
159+
} catch (IOException ex) {
160+
throw new RuntimeException(ex);
161+
}
162+
} else {
163+
return ClassMatchers.MATCH_NONE;
164+
}
165+
}
144166

145167
private static final Type CONTINUABLE_ANNOTATION_TYPE = Type.getObjectType("org/apache/commons/javaflow/api/ContinuableAnnotation");
146168
private static final ContinuableClassInfo UNSUPPORTED_CLASS_INFO = new ContinuableClassInfo() {

net.tascalate.javaflow.providers.asm3/src/main/java/org/apache/commons/javaflow/providers/asm3/ClassNameResolver.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818
import java.util.Collections;
1919
import java.util.Map;
2020

21-
import org.apache.commons.javaflow.spi.StopException;
2221
import org.objectweb.asm.ClassAdapter;
2322
import org.objectweb.asm.ClassReader;
2423

24+
import org.apache.commons.javaflow.spi.StopException;
25+
2526
public class ClassNameResolver {
2627
public static class Result {
2728
public final String className;

net.tascalate.javaflow.providers.asm3/src/main/java/org/apache/commons/javaflow/providers/asm3/ContinuableClassVisitor.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,16 @@
2323
*/
2424
package org.apache.commons.javaflow.providers.asm3;
2525

26-
import org.apache.commons.javaflow.spi.ContinuableClassInfo;
27-
import org.apache.commons.javaflow.spi.ContinuableClassInfoResolver;
28-
import org.apache.commons.javaflow.spi.StopException;
2926
import org.objectweb.asm.AnnotationVisitor;
3027
import org.objectweb.asm.ClassAdapter;
3128
import org.objectweb.asm.ClassVisitor;
3229
import org.objectweb.asm.MethodVisitor;
3330
import org.objectweb.asm.Opcodes;
3431

32+
import org.apache.commons.javaflow.spi.ContinuableClassInfo;
33+
import org.apache.commons.javaflow.spi.ContinuableClassInfoResolver;
34+
import org.apache.commons.javaflow.spi.StopException;
35+
3536
/**
3637
* ContinuableClassVisitor
3738
*
@@ -68,7 +69,7 @@ public void visit(int version, int access, String name, String signature, String
6869

6970
if (null == classInfo ||
7071
classInfo.isClassProcessed() ||
71-
StopException.__dirtyCheckSkipContinuationsOnClass(version, access, name, signature, superName, interfaces)) {
72+
cciResolver.veto().matches(name, signature, superName, interfaces)) {
7273
skipEnchancing = true;
7374
// Must exit by throwing exception, otherwise NPE is possible in nested visitor
7475
throw StopException.INSTANCE;

net.tascalate.javaflow.providers.asm3/src/main/java/org/apache/commons/javaflow/providers/asm3/ContinuableMethodNode.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,13 @@
3232
import java.util.Map;
3333
import java.util.Set;
3434

35-
import org.apache.commons.javaflow.spi.ContinuableClassInfo;
36-
import org.apache.commons.javaflow.spi.ContinuableClassInfoResolver;
3735
import org.objectweb.asm.Label;
3836
import org.objectweb.asm.MethodVisitor;
3937
import org.objectweb.asm.Opcodes;
4038
import org.objectweb.asm.Type;
4139
import org.objectweb.asm.tree.AbstractInsnNode;
42-
import org.objectweb.asm.tree.InsnNode;
4340
import org.objectweb.asm.tree.InsnList;
41+
import org.objectweb.asm.tree.InsnNode;
4442
import org.objectweb.asm.tree.LabelNode;
4543
import org.objectweb.asm.tree.MethodInsnNode;
4644
import org.objectweb.asm.tree.MethodNode;
@@ -51,6 +49,9 @@
5149
import org.objectweb.asm.tree.analysis.SourceInterpreter;
5250
import org.objectweb.asm.tree.analysis.SourceValue;
5351

52+
import org.apache.commons.javaflow.spi.ContinuableClassInfo;
53+
import org.apache.commons.javaflow.spi.ContinuableClassInfoResolver;
54+
5455
class ContinuableMethodNode extends MethodNode implements Opcodes {
5556
private final InheritanceLookup inheritanceLookup;
5657
private final ContinuableClassInfoResolver cciResolver;

net.tascalate.javaflow.providers.asm3/src/main/java/org/apache/commons/javaflow/providers/asm3/ContinuableMethodVisitor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
*/
2424
package org.apache.commons.javaflow.providers.asm3;
2525

26+
import static org.objectweb.asm.Opcodes.*;
27+
2628
import java.util.List;
2729

2830
import org.objectweb.asm.Label;
@@ -33,8 +35,6 @@
3335
import org.objectweb.asm.tree.analysis.BasicValue;
3436
import org.objectweb.asm.tree.analysis.Frame;
3537

36-
import static org.objectweb.asm.Opcodes.*;
37-
3838
class ContinuableMethodVisitor extends MethodAdapter {
3939
private static final String STACK_RECORDER = "org/apache/commons/javaflow/core/StackRecorder";
4040
private static final String POP_METHOD = "pop";

net.tascalate.javaflow.providers.asm3/src/main/java/org/apache/commons/javaflow/providers/asm3/InheritanceLookup.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,12 @@
3636
import java.util.HashMap;
3737
import java.util.Map;
3838

39-
import org.apache.commons.javaflow.spi.ResourceLoader;
4039
import org.objectweb.asm.ClassReader;
4140
import org.objectweb.asm.Opcodes;
4241
import org.objectweb.asm.Type;
4342

43+
import org.apache.commons.javaflow.spi.ResourceLoader;
44+
4445
/**
4546
* A class that computes the common super class of two classes without
4647
* actually loading them with a ClassLoader.

net.tascalate.javaflow.providers.asm3/src/main/java/org/apache/commons/javaflow/providers/asm3/MonitoringFrame.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@
1616
*/
1717
package org.apache.commons.javaflow.providers.asm3;
1818

19+
import java.util.LinkedList;
20+
import java.util.List;
21+
1922
import org.objectweb.asm.Opcodes;
2023
import org.objectweb.asm.tree.AbstractInsnNode;
2124
import org.objectweb.asm.tree.analysis.AnalyzerException;
2225
import org.objectweb.asm.tree.analysis.Frame;
2326
import org.objectweb.asm.tree.analysis.Interpreter;
2427
import org.objectweb.asm.tree.analysis.Value;
2528

26-
import java.util.LinkedList;
27-
import java.util.List;
28-
2929
class MonitoringFrame extends Frame {
3030

3131
// keeps track of monitored locals

net.tascalate.javaflow.providers.asm4/src/main/java/org/apache/commons/javaflow/providers/asm4/Asm4ClassTransformer.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@
2323
*/
2424
package org.apache.commons.javaflow.providers.asm4;
2525

26+
import org.objectweb.asm.ClassReader;
27+
import org.objectweb.asm.ClassWriter;
28+
2629
import org.apache.commons.javaflow.spi.ContinuableClassInfoResolver;
2730
import org.apache.commons.javaflow.spi.ResourceTransformer;
2831
import org.apache.commons.javaflow.spi.StopException;
29-
import org.objectweb.asm.ClassReader;
30-
import org.objectweb.asm.ClassWriter;
3132

3233
/**
3334
* AsmClassTransformer

net.tascalate.javaflow.providers.asm4/src/main/java/org/apache/commons/javaflow/providers/asm4/Asm4ContinuableClassInfoResolver.java

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,26 @@
2222
import java.util.Map;
2323
import java.util.Set;
2424

25+
import org.objectweb.asm.ClassReader;
26+
import org.objectweb.asm.Type;
27+
28+
import org.apache.commons.javaflow.spi.ClassMatcher;
29+
import org.apache.commons.javaflow.spi.ClassMatchers;
2530
import org.apache.commons.javaflow.spi.ContinuableClassInfo;
2631
import org.apache.commons.javaflow.spi.ContinuableClassInfoResolver;
2732
import org.apache.commons.javaflow.spi.ResourceLoader;
28-
import org.objectweb.asm.ClassReader;
29-
import org.objectweb.asm.Type;
33+
import org.apache.commons.javaflow.spi.VetoableResourceLoader;
3034

3135
class Asm4ContinuableClassInfoResolver implements ContinuableClassInfoResolver {
3236
private final Map<String, ContinuableClassInfo> visitedClasses = new HashMap<String, ContinuableClassInfo>();
3337
private final Set<String> processedAnnotations = new HashSet<String>();
3438
private final Set<String> continuableAnnotations = new HashSet<String>();
3539
private final ResourceLoader resourceLoader;
36-
37-
Asm4ContinuableClassInfoResolver(ResourceLoader classLoader) {
38-
this.resourceLoader = classLoader;
40+
private final ClassMatcher veto;
41+
42+
Asm4ContinuableClassInfoResolver(ResourceLoader resourceLoader) {
43+
this.resourceLoader = resourceLoader;
44+
this.veto = createVeto(resourceLoader);
3945
markContinuableAnnotation(CONTINUABLE_ANNOTATION_TYPE.getDescriptor());
4046
}
4147

@@ -61,6 +67,10 @@ public ContinuableClassInfo resolve(String classInternalName) throws IOException
6167
}
6268
}
6369
}
70+
71+
public ClassMatcher veto() {
72+
return veto;
73+
}
6474

6575
private ContinuableClassInfo resolveContinuableClassInfo(String classInternalName, ClassReader reader) {
6676
ContinuableClassInfo classInfo = visitedClasses.get(classInternalName);
@@ -141,6 +151,18 @@ public boolean isContinuableAnnotation(String annotationClassDescriptor) {
141151
throw new RuntimeException("Unknown annotation kind");
142152
}
143153
}
154+
155+
private static ClassMatcher createVeto(ResourceLoader resourceLoader) {
156+
if (resourceLoader instanceof VetoableResourceLoader) {
157+
try {
158+
return ((VetoableResourceLoader)resourceLoader).createVeto();
159+
} catch (IOException ex) {
160+
throw new RuntimeException(ex);
161+
}
162+
} else {
163+
return ClassMatchers.MATCH_NONE;
164+
}
165+
}
144166

145167
private static final Type CONTINUABLE_ANNOTATION_TYPE = Type.getObjectType("org/apache/commons/javaflow/api/ContinuableAnnotation");
146168
private static final ContinuableClassInfo UNSUPPORTED_CLASS_INFO = new ContinuableClassInfo() {

0 commit comments

Comments
 (0)