Skip to content

Commit

Permalink
重新引用asm 6.0中的源码,替换旧的代码
Browse files Browse the repository at this point in the history
  • Loading branch information
flym committed Feb 27, 2018
1 parent cbefa25 commit d2b8238
Show file tree
Hide file tree
Showing 128 changed files with 8,453 additions and 26,049 deletions.
11 changes: 8 additions & 3 deletions src/main/java/org/mvel2/MVEL.java
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,9 @@ public static Object executeExpression(final Object compiledExpression, final Ob
try{
return ((ExecutableStatement) compiledExpression).getValue(ctx, factory);
} finally {
if(factory != null) factory.externalize();
if(factory != null) {
factory.externalize();
}
}
}

Expand Down Expand Up @@ -430,7 +432,9 @@ public static void executeExpression(Iterable<CompiledExpression> compiledExpres

/** 使用上下文+变量工厂执行多个编译表达式,并将每个编译表达式的结果进行组合返回 */
public static Object[] executeAllExpression(Serializable[] compiledExpressions, Object ctx, VariableResolverFactory vars) {
if(compiledExpressions == null) return GetterAccessor.EMPTY;
if(compiledExpressions == null) {
return GetterAccessor.EMPTY;
}
Object[] o = new Object[compiledExpressions.length];
for(int i = 0; i < compiledExpressions.length; i++) {
o[i] = executeExpression(compiledExpressions[i], ctx, vars);
Expand Down Expand Up @@ -476,8 +480,9 @@ public static String preprocess(String input, PreProcessor[] preprocessors) {
public static Method getStaticMethod(Class cls, String methodName, Class[] signature) {
try{
Method m = cls.getMethod(methodName, signature);
if((m.getModifiers() & Modifier.STATIC) == 0)
if((m.getModifiers() & Modifier.STATIC) == 0) {
throw new RuntimeException("method not a static method: " + methodName);
}
return m;
} catch(NoSuchMethodException e) {
throw new RuntimeException("no such method: " + methodName);
Expand Down
95 changes: 53 additions & 42 deletions src/main/java/org/mvel2/asm/AnnotationVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,15 @@
* A visitor to visit a Java annotation. The methods of this class must be
* called in the following order: ( <tt>visit</tt> | <tt>visitEnum</tt> |
* <tt>visitAnnotation</tt> | <tt>visitArray</tt> )* <tt>visitEnd</tt>.
*
*
* @author Eric Bruneton
* @author Eugene Kuleshov
*/
public abstract class AnnotationVisitor {

/**
* The ASM API version implemented by this visitor. The value of this field
* must be one of {@link Opcodes#ASM4} or {@link Opcodes#ASM5}.
* must be one of {@link Opcodes#ASM4}, {@link Opcodes#ASM5} or {@link Opcodes#ASM6}.
*/
protected final int api;

Expand All @@ -53,24 +53,27 @@ public abstract class AnnotationVisitor {

/**
* Constructs a new {@link AnnotationVisitor}.
*
* @param api the ASM API version implemented by this visitor. Must be one
* of {@link Opcodes#ASM4} or {@link Opcodes#ASM5}.
*
* @param api
* the ASM API version implemented by this visitor. Must be one
* of {@link Opcodes#ASM4}, {@link Opcodes#ASM5} or {@link Opcodes#ASM6}.
*/
public AnnotationVisitor(final int api) {
this(api, null);
}

/**
* Constructs a new {@link AnnotationVisitor}.
*
* @param api the ASM API version implemented by this visitor. Must be one
* of {@link Opcodes#ASM4} or {@link Opcodes#ASM5}.
* @param av the annotation visitor to which this visitor must delegate
*
* @param api
* the ASM API version implemented by this visitor. Must be one
* of {@link Opcodes#ASM4}, {@link Opcodes#ASM5} or {@link Opcodes#ASM6}.
* @param av
* the annotation visitor to which this visitor must delegate
* method calls. May be null.
*/
public AnnotationVisitor(final int api, final AnnotationVisitor av) {
if(api != Opcodes.ASM4 && api != Opcodes.ASM5) {
if (api < Opcodes.ASM4 || api > Opcodes.ASM6) {
throw new IllegalArgumentException();
}
this.api = api;
Expand All @@ -79,49 +82,56 @@ public AnnotationVisitor(final int api, final AnnotationVisitor av) {

/**
* Visits a primitive value of the annotation.
*
* @param name the value name.
* @param value the actual value, whose type must be {@link Byte},
* {@link Boolean}, {@link Character}, {@link Short},
* {@link Integer} , {@link Long}, {@link Float}, {@link Double},
* {@link String} or {@link Type} or OBJECT or ARRAY sort. This
* value can also be an array of byte, boolean, short, char, int,
* long, float or double values (this is equivalent to using
* {@link #visitArray visitArray} and visiting each array element
* in turn, but is more convenient).
*
* @param name
* the value name.
* @param value
* the actual value, whose type must be {@link Byte},
* {@link Boolean}, {@link Character}, {@link Short},
* {@link Integer} , {@link Long}, {@link Float}, {@link Double},
* {@link String} or {@link Type} of OBJECT or ARRAY sort. This
* value can also be an array of byte, boolean, short, char, int,
* long, float or double values (this is equivalent to using
* {@link #visitArray visitArray} and visiting each array element
* in turn, but is more convenient).
*/
public void visit(String name, Object value) {
if(av != null) {
if (av != null) {
av.visit(name, value);
}
}

/**
* Visits an enumeration value of the annotation.
*
* @param name the value name.
* @param desc the class descriptor of the enumeration class.
* @param value the actual enumeration value.
*
* @param name
* the value name.
* @param desc
* the class descriptor of the enumeration class.
* @param value
* the actual enumeration value.
*/
public void visitEnum(String name, String desc, String value) {
if(av != null) {
if (av != null) {
av.visitEnum(name, desc, value);
}
}

/**
* Visits a nested annotation value of the annotation.
*
* @param name the value name.
* @param desc the class descriptor of the nested annotation class.
*
* @param name
* the value name.
* @param desc
* the class descriptor of the nested annotation class.
* @return a visitor to visit the actual nested annotation value, or
* <tt>null</tt> if this visitor is not interested in visiting this
* nested annotation. <i>The nested annotation value must be fully
* visited before calling other methods on this annotation
* visitor</i>.
* <tt>null</tt> if this visitor is not interested in visiting this
* nested annotation. <i>The nested annotation value must be fully
* visited before calling other methods on this annotation
* visitor</i>.
*/
public AnnotationVisitor visitAnnotation(String name, String desc) {
if(av != null) {
if (av != null) {
return av.visitAnnotation(name, desc);
}
return null;
Expand All @@ -132,16 +142,17 @@ public AnnotationVisitor visitAnnotation(String name, String desc) {
* types (such as byte, boolean, short, char, int, long, float or double)
* can be passed as value to {@link #visit visit}. This is what
* {@link ClassReader} does.
*
* @param name the value name.
*
* @param name
* the value name.
* @return a visitor to visit the actual array value elements, or
* <tt>null</tt> if this visitor is not interested in visiting these
* values. The 'name' parameters passed to the methods of this
* visitor are ignored. <i>All the array values must be visited
* before calling other methods on this annotation visitor</i>.
* <tt>null</tt> if this visitor is not interested in visiting these
* values. The 'name' parameters passed to the methods of this
* visitor are ignored. <i>All the array values must be visited
* before calling other methods on this annotation visitor</i>.
*/
public AnnotationVisitor visitArray(String name) {
if(av != null) {
if (av != null) {
return av.visitArray(name);
}
return null;
Expand All @@ -151,7 +162,7 @@ public AnnotationVisitor visitArray(String name) {
* Visits the end of the annotation.
*/
public void visitEnd() {
if(av != null) {
if (av != null) {
av.visitEnd();
}
}
Expand Down
Loading

0 comments on commit d2b8238

Please sign in to comment.