--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry excluding="src/|test/" kind="src" path=""/>
+ <classpathentry kind="src" path="test"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.ajdt.core.ASPECTJRT_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/no.uio.ifi.refaktor"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>no.uio.ifi.refaktor.aSimpleExampleAspectJ</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.ajdt.core.ajbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.ajdt.ui.ajnature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
--- /dev/null
+package no.uio.ifi.refaktor.aSimpleExampleAspectJ.example;
+
+public class C {
+ public X x = new X();
+
+ public void f() {
+ x.m(this);
+ x.n();
+ }
+}
--- /dev/null
+package no.uio.ifi.refaktor.aSimpleExampleAspectJ.example;
+
+public class X {
+
+ public void m(C c) {
+ c.x = new X();
+ }
+
+ public void n() {
+ }
+
+}
--- /dev/null
+package no.uio.ifi.refaktor.aSimpleExampleAspectJ.test;
+
+import static org.junit.Assert.assertTrue;
+import no.uio.ifi.refaktor.aSimpleExampleAspectJ.example.C;
+
+import org.junit.Test;
+
+public class ExampleTest {
+
+ @Test
+ public void test() {
+ new C().f();
+ boolean isOK = ExampleTestAspect.aspectOf().isOK();
+ assertTrue(isOK);
+ }
+
+}
--- /dev/null
+package no.uio.ifi.refaktor.aSimpleExampleAspectJ.test;
+
+import no.uio.ifi.refaktor.aSimpleExampleAspectJ.example.C;
+import no.uio.ifi.refaktor.aSimpleExampleAspectJ.example.X;
+
+
+public aspect ExampleTestAspect {
+ private X xM;
+ private X xN;
+
+ pointcut f() : call(public void C.f());
+ pointcut m(C c) : cflow(f()) && call(public void X.m(C)) && args(c);
+ pointcut n(X x) : cflow(f()) && call(public void X.n()) && target(x);
+
+ after(C c) returning() : m(c) {
+ xM = c.x;
+ }
+
+ before(X x) : n(x) {
+ xN = x;
+ }
+
+ public boolean isOK() {
+ return xM == xN ;
+ }
+}