@@ -5432,4 +5432,20 @@ | |||
</compile> | |||
</ajc-test> | |||
<ajc-test dir="bugs" pr="28702" title="percflow code hangs compiler"> | |||
<compile files="CloseConnectionsCflow.java"> | |||
</compile> | |||
</ajc-test> | |||
<ajc-test dir="bugs" pr="28703" title="assert and pertarget crashes compiler"> | |||
<compile files="EnsureOverriding.java" options="-1.4"/> | |||
<run class="EnsureOverriding"/> | |||
</ajc-test> | |||
<ajc-test dir="bugs" pr="28852" | |||
title="Verification error tracing constructor that takes arguments"> | |||
<compile files="ConstructorArgTracing.java"/> | |||
<run class="ConstructorArgTracing"/> | |||
</ajc-test> | |||
</suite> |
@@ -52,7 +52,6 @@ | |||
<run class="pack.ImportInnerFromInterfaceImplementor"/> | |||
</ajc-test> | |||
<ajc-test dir="bugs" pr="906" | |||
title="privileged access to code outside the control of the compiler"> | |||
<compile files="PrivilegeBeyondScope.java"> |
@@ -0,0 +1,57 @@ | |||
// Bug # 28702 | |||
import java.util.Stack; | |||
interface Connection { | |||
Connection open(); | |||
void close(); | |||
} | |||
aspect CloseConnectionsCflow percflow(layerEntryMethods()) { | |||
Stack openConnections; | |||
pointcut layerMethods() : | |||
execution(public * com.example.businessFacade.*.*(..)); | |||
pointcut layerEntryMethods() : | |||
layerMethods() && !cflowbelow(layerMethods()); | |||
pointcut openedConnection() : | |||
call(* Connection.open(..)); | |||
pointcut layerBoundary() : cflow(layerEntryMethods()); | |||
after() returning (Connection conn) : | |||
openedConnection() && layerBoundary() { | |||
openConnections.push(conn); | |||
} | |||
after() : layerBoundary() { | |||
while (!openConnections.empty()) { | |||
Connection conn = (Connection)openConnections.pop(); | |||
conn.close(); | |||
} | |||
} | |||
} |
@@ -0,0 +1,16 @@ | |||
// from Bug#: 28852 | |||
public class ConstructorArgTracing { | |||
public ConstructorArgTracing(int arg) { | |||
} | |||
public static void main(String[] args) { | |||
ConstructorArgTracing account = new ConstructorArgTracing(12345); | |||
} | |||
} | |||
aspect TraceAspect { | |||
before() : !within(TraceAspect) { | |||
System.out.println(thisJoinPoint); | |||
} | |||
} |
@@ -0,0 +1,45 @@ | |||
// from Bug#: 28703 | |||
class Base { | |||
/** extend when overriding - must call Base.lockResource() */ | |||
public void lockResource(boolean dummy) { /* ... */ } | |||
} | |||
class Derived extends Base { | |||
boolean isLocked; | |||
public void lockResource(boolean callSuper) { | |||
if (callSuper) super.lockResource(true); | |||
isLocked = true; | |||
} | |||
} | |||
public aspect EnsureOverriding pertarget(mustExtend()) { | |||
boolean calledSuper = false; | |||
pointcut mustExtend() : | |||
execution(void Base+.lockResource(..)) && !within(Base); | |||
after () returning: mustExtend() { | |||
assert(calledSuper); | |||
if (!calledSuper) { throw new RuntimeException("need super call"); } | |||
} | |||
after(Base a, Base b) returning: | |||
cflow(mustExtend() && target(a)) && execution(void Base.lockResource(..)) && target(b) | |||
{ | |||
if (a == b) { | |||
//System.err.println("made call"); | |||
calledSuper = true; | |||
} | |||
} | |||
public static void main(String args[]) { | |||
(new Derived()).lockResource(true); | |||
try { | |||
(new Derived()).lockResource(false); | |||
throw new Error("shouldn't get here"); | |||
} catch (RuntimeException re) { | |||
if (!re.getMessage().equals("need super call")) throw re; | |||
} | |||
} | |||
} |
@@ -1,12 +1,7 @@ | |||
<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd"> | |||
<suite> | |||
<ajc-test dir="new" pr="764" | |||
title="binding handler args with indeterminate prefix and suffix" | |||
keywords="from-resolved_105"> | |||
<compile files="IndeterminateHandlerArg.java"/> | |||
<run class="IndeterminateHandlerArg"/> | |||
</ajc-test> | |||
<!-- | |||
<ajc-test dir="base/test129" | |||
title="DEPRECATED: introduce of abstract methods works" |