</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>
<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">
--- /dev/null
+// 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();
+
+ }
+
+ }
+
+}
--- /dev/null
+// 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);
+ }
+}
--- /dev/null
+// 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;
+ }
+ }
+}
<!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"