@@ -9,25 +9,19 @@ public abstract class FancyHelloWorld extends java.lang.Object: | |||
public static void main(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 | |||
| finally -> E1 | |||
| | catch java.lang.Exception -> E0 | |||
| | | ALOAD_1 // java.io.PrintStream out (line 11) | |||
| | | 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 | |||
| | catch java.lang.Exception -> E0 | |||
| | E0: ASTORE_2 (line 12) | |||
| | ALOAD_1 // java.io.PrintStream out (line 13) | |||
| | 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 | |||
| GOTO L0 | |||
| E1: ASTORE 4 (line 14) | |||
@@ -39,9 +33,7 @@ public abstract class FancyHelloWorld extends java.lang.Object: | |||
| L1: ASTORE_3 | |||
| ALOAD_1 // java.io.PrintStream out (line 15) | |||
| 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) | |||
| L2: RETURN (line 17) | |||
method-execution(void FancyHelloWorld.main(java.lang.String[])) | |||
@@ -53,25 +45,18 @@ public abstract class FancyHelloWorld extends java.lang.Object: | |||
| ISTORE_0 | |||
| ILOAD_0 // int x (line 21) | |||
| 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 | |||
| ISTORE_0 // int x | |||
| NEW java.lang.StringBuffer (line 22) | |||
| DUP | |||
| 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 | |||
| 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 | |||
method-execution(java.lang.String FancyHelloWorld.getName()) | |||
end public static String getName() | |||
end public abstract class FancyHelloWorld |
@@ -9,14 +9,11 @@ public class HelloWorld extends java.lang.Object: | |||
public static void main(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) | |||
| 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) | |||
method-execution(void HelloWorld.main(java.lang.String[])) | |||
end public static void main(String[]) | |||
end public class HelloWorld |
@@ -8,52 +8,32 @@ public class DynamicHelloWorld extends java.lang.Object implements java.io.Seria | |||
end public void <init>() | |||
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 | |||
| 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[]) | |||
String doit(String, java.util.List): | |||
@@ -86,14 +66,10 @@ public class DynamicHelloWorld extends java.lang.Object implements java.io.Seria | |||
static final String doit_aroundBody0(DynamicHelloWorld, String, java.util.List): | |||
ALOAD_2 (line 21) | |||
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 | |||
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 | |||
end static final String doit_aroundBody0(DynamicHelloWorld, String, java.util.List) | |||
@@ -30,6 +30,7 @@ public class PatternWeaveTestCase extends WeaveTestCase { | |||
String[] none = new String[0]; | |||
//XXX this test is incompatible with optimizations made to weaver | |||
public void testPublic() throws IOException { | |||
String[] publicHello = new String[] { | |||
@@ -41,39 +42,39 @@ public class PatternWeaveTestCase extends WeaveTestCase { | |||
}; | |||
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, | |||
String[] expectedFancyShadows) throws IOException | |||
{ |