public static void main(String[]): | public static void main(String[]): | ||||
method-execution(void FancyHelloWorld.main(java.lang.String[])) | method-execution(void FancyHelloWorld.main(java.lang.String[])) | ||||
| field-get(java.io.PrintStream java.lang.System.out) | |||||
| | GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 9) | |||||
| field-get(java.io.PrintStream java.lang.System.out) | |||||
| GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 9) | |||||
| ASTORE_1 | | ASTORE_1 | ||||
| finally -> E1 | | finally -> E1 | ||||
| | catch java.lang.Exception -> E0 | | | catch java.lang.Exception -> E0 | ||||
| | | ALOAD_1 // java.io.PrintStream out (line 11) | | | | ALOAD_1 // java.io.PrintStream out (line 11) | ||||
| | | LDC "bye" | | | | LDC "bye" | ||||
| | | method-call(void java.io.PrintStream.println(java.lang.String)) | |||||
| | | | INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V | |||||
| | | method-call(void java.io.PrintStream.println(java.lang.String)) | |||||
| | | INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V | |||||
| | | GOTO L0 | | | | GOTO L0 | ||||
| | catch java.lang.Exception -> E0 | | | catch java.lang.Exception -> E0 | ||||
| | E0: ASTORE_2 (line 12) | | | E0: ASTORE_2 (line 12) | ||||
| | ALOAD_1 // java.io.PrintStream out (line 13) | | | ALOAD_1 // java.io.PrintStream out (line 13) | ||||
| | ALOAD_2 // java.lang.Exception e | | | ALOAD_2 // java.lang.Exception e | ||||
| | method-call(void java.io.PrintStream.println(java.lang.Object)) | |||||
| | | INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/Object;)V | |||||
| | method-call(void java.io.PrintStream.println(java.lang.Object)) | |||||
| | INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/Object;)V | |||||
| finally -> E1 | | finally -> E1 | ||||
| GOTO L0 | | GOTO L0 | ||||
| E1: ASTORE 4 (line 14) | | E1: ASTORE 4 (line 14) | ||||
| L1: ASTORE_3 | | L1: ASTORE_3 | ||||
| ALOAD_1 // java.io.PrintStream out (line 15) | | ALOAD_1 // java.io.PrintStream out (line 15) | ||||
| LDC "finally" | | LDC "finally" | ||||
| method-call(void java.io.PrintStream.println(java.lang.String)) | |||||
| | INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V | |||||
| method-call(void java.io.PrintStream.println(java.lang.String)) | |||||
| INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V | |||||
| RET 3 (line 10) | | RET 3 (line 10) | ||||
| L2: RETURN (line 17) | | L2: RETURN (line 17) | ||||
method-execution(void FancyHelloWorld.main(java.lang.String[])) | method-execution(void FancyHelloWorld.main(java.lang.String[])) | ||||
| ISTORE_0 | | ISTORE_0 | ||||
| ILOAD_0 // int x (line 21) | | ILOAD_0 // int x (line 21) | ||||
| LDC "name" | | LDC "name" | ||||
| method-call(int java.lang.String.hashCode()) | |||||
| | INVOKEVIRTUAL java.lang.String.hashCode ()I | |||||
| method-call(int java.lang.String.hashCode()) | |||||
| INVOKEVIRTUAL java.lang.String.hashCode ()I | |||||
| IADD | | IADD | ||||
| ISTORE_0 // int x | | ISTORE_0 // int x | ||||
| NEW java.lang.StringBuffer (line 22) | | NEW java.lang.StringBuffer (line 22) | ||||
| DUP | | DUP | ||||
| LDC "name" | | LDC "name" | ||||
| constructor-call(void java.lang.StringBuffer.<init>(java.lang.String)) | |||||
| | INVOKESPECIAL java.lang.StringBuffer.<init> (Ljava/lang/String;)V | |||||
| constructor-call(void java.lang.StringBuffer.<init>(java.lang.String)) | |||||
| INVOKESPECIAL java.lang.StringBuffer.<init> (Ljava/lang/String;)V | |||||
| ILOAD_0 // int x | | ILOAD_0 // int x | ||||
| method-call(java.lang.StringBuffer java.lang.StringBuffer.append(int)) | |||||
| | INVOKEVIRTUAL java.lang.StringBuffer.append (I)Ljava/lang/StringBuffer; | |||||
| method-call(java.lang.StringBuffer java.lang.StringBuffer.append(int)) | |||||
| method-call(java.lang.String java.lang.StringBuffer.toString()) | |||||
| | INVOKEVIRTUAL java.lang.StringBuffer.toString ()Ljava/lang/String; | |||||
| method-call(java.lang.String java.lang.StringBuffer.toString()) | |||||
| INVOKEVIRTUAL java.lang.StringBuffer.append (I)Ljava/lang/StringBuffer; | |||||
| INVOKEVIRTUAL java.lang.StringBuffer.toString ()Ljava/lang/String; | |||||
| ARETURN | | ARETURN | ||||
method-execution(java.lang.String FancyHelloWorld.getName()) | method-execution(java.lang.String FancyHelloWorld.getName()) | ||||
end public static String getName() | end public static String getName() | ||||
end public abstract class FancyHelloWorld | end public abstract class FancyHelloWorld |
public static void main(String[]): | public static void main(String[]): | ||||
method-execution(void HelloWorld.main(java.lang.String[])) | method-execution(void HelloWorld.main(java.lang.String[])) | ||||
| field-get(java.io.PrintStream java.lang.System.out) | |||||
| | GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 8) | |||||
| field-get(java.io.PrintStream java.lang.System.out) | |||||
| GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 8) | |||||
| LDC "hello world" (line 9) | | LDC "hello world" (line 9) | ||||
| method-call(void java.io.PrintStream.println(java.lang.String)) | |||||
| | INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V | |||||
| method-call(void java.io.PrintStream.println(java.lang.String)) | |||||
| INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V | |||||
| RETURN (line 11) | | RETURN (line 11) | ||||
method-execution(void HelloWorld.main(java.lang.String[])) | method-execution(void HelloWorld.main(java.lang.String[])) | ||||
end public static void main(String[]) | end public static void main(String[]) | ||||
end public class HelloWorld | end public class HelloWorld |
end public void <init>() | end public void <init>() | ||||
public static void main(String[]): | public static void main(String[]): | ||||
method-execution(void DynamicHelloWorld.main(java.lang.String[])) | |||||
| catch java.lang.UnsupportedOperationException -> E0 | |||||
| | NEW DynamicHelloWorld (line 12) | |||||
| | DUP | |||||
| | constructor-call(void DynamicHelloWorld.<init>()) | |||||
| | | INVOKESPECIAL DynamicHelloWorld.<init> ()V | |||||
| | constructor-call(void DynamicHelloWorld.<init>()) | |||||
| | LDC "hello" | |||||
| | field-get(java.util.List java.util.Collections.EMPTY_LIST) | |||||
| | | GETSTATIC java.util.Collections.EMPTY_LIST Ljava/util/List; | |||||
| | field-get(java.util.List java.util.Collections.EMPTY_LIST) | |||||
| | method-call(java.lang.String DynamicHelloWorld.doit(java.lang.String, java.util.List)) | |||||
| | | INVOKEVIRTUAL DynamicHelloWorld.doit (Ljava/lang/String;Ljava/util/List;)Ljava/lang/String; | |||||
| | method-call(java.lang.String DynamicHelloWorld.doit(java.lang.String, java.util.List)) | |||||
| | POP | |||||
| | GOTO L0 | |||||
| catch java.lang.UnsupportedOperationException -> E0 | |||||
| E0: ASTORE_1 (line 13) | |||||
| field-get(java.io.PrintStream java.lang.System.out) | |||||
| | GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 14) | |||||
| field-get(java.io.PrintStream java.lang.System.out) | |||||
| NEW java.lang.StringBuffer | |||||
catch java.lang.UnsupportedOperationException -> E0 | |||||
| NEW DynamicHelloWorld (line 12) | |||||
| DUP | | DUP | ||||
| LDC "expected and caught: " | |||||
| constructor-call(void java.lang.StringBuffer.<init>(java.lang.String)) | |||||
| | INVOKESPECIAL java.lang.StringBuffer.<init> (Ljava/lang/String;)V | |||||
| constructor-call(void java.lang.StringBuffer.<init>(java.lang.String)) | |||||
| ALOAD_1 // java.lang.UnsupportedOperationException t | |||||
| method-call(java.lang.StringBuffer java.lang.StringBuffer.append(java.lang.Object)) | |||||
| | INVOKEVIRTUAL java.lang.StringBuffer.append (Ljava/lang/Object;)Ljava/lang/StringBuffer; | |||||
| method-call(java.lang.StringBuffer java.lang.StringBuffer.append(java.lang.Object)) | |||||
| method-call(java.lang.String java.lang.StringBuffer.toString()) | |||||
| | INVOKEVIRTUAL java.lang.StringBuffer.toString ()Ljava/lang/String; | |||||
| method-call(java.lang.String java.lang.StringBuffer.toString()) | |||||
| method-call(void java.io.PrintStream.println(java.lang.String)) | |||||
| | INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V | |||||
| method-call(void java.io.PrintStream.println(java.lang.String)) | |||||
| RETURN (line 15) | |||||
| L0: NEW java.lang.RuntimeException (line 17) | |||||
| DUP | |||||
| LDC "should have caught exception" | |||||
| constructor-call(void java.lang.RuntimeException.<init>(java.lang.String)) | |||||
| | INVOKESPECIAL java.lang.RuntimeException.<init> (Ljava/lang/String;)V | |||||
| constructor-call(void java.lang.RuntimeException.<init>(java.lang.String)) | |||||
| ATHROW | |||||
method-execution(void DynamicHelloWorld.main(java.lang.String[])) | |||||
| INVOKESPECIAL DynamicHelloWorld.<init> ()V | |||||
| LDC "hello" | |||||
| GETSTATIC java.util.Collections.EMPTY_LIST Ljava/util/List; | |||||
| INVOKEVIRTUAL DynamicHelloWorld.doit (Ljava/lang/String;Ljava/util/List;)Ljava/lang/String; | |||||
| POP | |||||
| GOTO L0 | |||||
catch java.lang.UnsupportedOperationException -> E0 | |||||
E0: ASTORE_1 (line 13) | |||||
GETSTATIC java.lang.System.out Ljava/io/PrintStream; (line 14) | |||||
NEW java.lang.StringBuffer | |||||
DUP | |||||
LDC "expected and caught: " | |||||
INVOKESPECIAL java.lang.StringBuffer.<init> (Ljava/lang/String;)V | |||||
ALOAD_1 // java.lang.UnsupportedOperationException t | |||||
INVOKEVIRTUAL java.lang.StringBuffer.append (Ljava/lang/Object;)Ljava/lang/StringBuffer; | |||||
INVOKEVIRTUAL java.lang.StringBuffer.toString ()Ljava/lang/String; | |||||
INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V | |||||
RETURN (line 15) | |||||
L0: NEW java.lang.RuntimeException (line 17) | |||||
DUP | |||||
LDC "should have caught exception" | |||||
INVOKESPECIAL java.lang.RuntimeException.<init> (Ljava/lang/String;)V | |||||
ATHROW | |||||
end public static void main(String[]) | end public static void main(String[]) | ||||
String doit(String, java.util.List): | String doit(String, java.util.List): | ||||
static final String doit_aroundBody0(DynamicHelloWorld, String, java.util.List): | static final String doit_aroundBody0(DynamicHelloWorld, String, java.util.List): | ||||
ALOAD_2 (line 21) | ALOAD_2 (line 21) | ||||
ALOAD_1 | ALOAD_1 | ||||
method-call(boolean java.util.List.add(java.lang.Object)) | |||||
| INVOKEINTERFACE java.util.List.add (Ljava/lang/Object;)Z | |||||
method-call(boolean java.util.List.add(java.lang.Object)) | |||||
INVOKEINTERFACE java.util.List.add (Ljava/lang/Object;)Z | |||||
POP | POP | ||||
ALOAD_2 (line 22) | ALOAD_2 (line 22) | ||||
method-call(java.lang.String java.lang.Object.toString()) | |||||
| INVOKEVIRTUAL java.lang.Object.toString ()Ljava/lang/String; | |||||
method-call(java.lang.String java.lang.Object.toString()) | |||||
INVOKEVIRTUAL java.lang.Object.toString ()Ljava/lang/String; | |||||
ARETURN | ARETURN | ||||
end static final String doit_aroundBody0(DynamicHelloWorld, String, java.util.List) | end static final String doit_aroundBody0(DynamicHelloWorld, String, java.util.List) | ||||
String[] none = new String[0]; | String[] none = new String[0]; | ||||
//XXX this test is incompatible with optimizations made to weaver | |||||
public void testPublic() throws IOException { | public void testPublic() throws IOException { | ||||
String[] publicHello = new String[] { | String[] publicHello = new String[] { | ||||
}; | }; | ||||
checkPointcut("execution(public * *(..))", publicHello, publicFancyHello); | checkPointcut("execution(public * *(..))", publicHello, publicFancyHello); | ||||
} | } | ||||
public void testPrintln() throws IOException { | |||||
String[] callPrintlnHello = new String[] { | |||||
"method-call(void java.io.PrintStream.println(java.lang.String))", | |||||
}; | |||||
String[] callPrintlnFancyHello = new String[] { | |||||
"method-call(void java.io.PrintStream.println(java.lang.String))", | |||||
"method-call(void java.io.PrintStream.println(java.lang.String))", | |||||
"method-call(void java.io.PrintStream.println(java.lang.Object))", | |||||
}; | |||||
checkPointcut("call(* println(*))", callPrintlnHello, callPrintlnFancyHello); | |||||
} | |||||
public void testMumble() throws IOException { | |||||
checkPointcut("call(* mumble(*))", none, none); | |||||
} | |||||
public void testFooBar() throws IOException { | |||||
checkPointcut("call(FooBar *(..))", none, none); | |||||
} | |||||
public void testGetOut() throws IOException { | |||||
String[] getOutHello = new String[] { | |||||
"field-get(java.io.PrintStream java.lang.System.out)", | |||||
}; | |||||
checkPointcut("get(* java.lang.System.out)", getOutHello, getOutHello); | |||||
} | |||||
// private Pointcut makePointcut(String s) { | |||||
// return new PatternParser(s).parsePointcut(); | |||||
// | |||||
// public void testPrintln() throws IOException { | |||||
// String[] callPrintlnHello = new String[] { | |||||
// "method-call(void java.io.PrintStream.println(java.lang.String))", | |||||
// }; | |||||
// String[] callPrintlnFancyHello = new String[] { | |||||
// "method-call(void java.io.PrintStream.println(java.lang.String))", | |||||
// "method-call(void java.io.PrintStream.println(java.lang.String))", | |||||
// "method-call(void java.io.PrintStream.println(java.lang.Object))", | |||||
// }; | |||||
// checkPointcut("call(* println(*))", callPrintlnHello, callPrintlnFancyHello); | |||||
// } | // } | ||||
// | |||||
// public void testMumble() throws IOException { | |||||
// checkPointcut("call(* mumble(*))", none, none); | |||||
// } | |||||
// | |||||
// public void testFooBar() throws IOException { | |||||
// checkPointcut("call(FooBar *(..))", none, none); | |||||
// } | |||||
// | |||||
// public void testGetOut() throws IOException { | |||||
// String[] getOutHello = new String[] { | |||||
// "field-get(java.io.PrintStream java.lang.System.out)", | |||||
// }; | |||||
// | |||||
// checkPointcut("get(* java.lang.System.out)", getOutHello, getOutHello); | |||||
// } | |||||
// | |||||
//// private Pointcut makePointcut(String s) { | |||||
//// return new PatternParser(s).parsePointcut(); | |||||
//// } | |||||
// | |||||
private void checkPointcut(String pointcutSource, String[] expectedHelloShadows, | private void checkPointcut(String pointcutSource, String[] expectedHelloShadows, | ||||
String[] expectedFancyShadows) throws IOException | String[] expectedFancyShadows) throws IOException | ||||
{ | { |