<!-- ajc-ant script, not to be used from Ant commant line - see AntSpec -->
<project name="ltw">

    <!-- using this we can debug the forked VM -->
    <property
        name="jdwp"
        value="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"/>
	<property name="aj.bootpath" refid="aj.path"/>

    <target name="JDK14 LTW with XML">
        <java fork="yes" classname="HelloWorldWithException" failonerror="yes">
            <classpath refid="aj.path"/>
            <jvmarg value="-Djava.system.class.loader=org.aspectj.weaver.loadtime.WeavingURLClassLoader"/>
<!--            <jvmarg value="${aj.addOpensKey}"/>-->
<!--            <jvmarg value="${aj.addOpensValue}"/>-->
            <jvmarg value="-Dorg.aspectj.tracing.debug=true"/>
<!--
            <jvmarg value="-Daj.weaving.verbose=true"/>
            <jvmarg value="-Dorg.aspectj.weaver.showWeaveInfo=true"/>
-->
            <!-- use META-INF/aop.xml style -->
            <!--<jvmarg value="-javaagent:${aj.root}/lib/test/loadtime5.jar"/>-->
            <!--<jvmarg line="${jdwp}"/>-->
        	<sysproperty key="aj.class.path" path="${aj.sandbox}/hello.jar:${aj.sandbox}/handler.jar"/>
        </java>
    </target>

    <target name="JDK14 LTW with ASPECTPATH">
        <java fork="yes" classname="HelloWorldWithException" failonerror="yes">
            <classpath refid="aj.path"/>
            <jvmarg value="-Djava.system.class.loader=org.aspectj.weaver.loadtime.WeavingURLClassLoader"/>
<!--            <jvmarg value="${aj.addOpensKey}"/>-->
<!--            <jvmarg value="${aj.addOpensValue}"/>-->
            <jvmarg value="-Dorg.aspectj.tracing.debug=true"/>
<!--
            <jvmarg value="-Daj.weaving.verbose=true"/>
            <jvmarg value="-Dorg.aspectj.weaver.showWeaveInfo=true"/>
-->
            <!-- use META-INF/aop.xml style -->
            <!--<jvmarg value="-javaagent:${aj.root}/lib/test/loadtime5.jar"/>-->
            <!--<jvmarg line="${jdwp}"/>-->
        	<sysproperty key="aj.class.path" path="${aj.sandbox}/hello.jar:${aj.sandbox}/handler.jar"/>
        	<sysproperty key="aj.aspect.path" path="${aj.sandbox}/handler.jar"/>
        </java>
    </target>

	<!-- We have three JARs files, two containing aspects (ExceptionHandler and Tracing)
	     for which aop-ajc.xml files have been generate. However we supply our own
	     aop.xml which declares only ExceptionHandler. We then override the
	     configuration search path -->
    <target name="override default path using -Dorg.aspectj.weaver.loadtime.configuration">
        <copy file="${aj.root}/tests/ltw/aop-orgaspectjweaverloadtimeconfiguration.xml"
              tofile="${aj.sandbox}/META-INF/aop-random.xml"/>
        <java fork="yes" classname="HelloWorldWithException" failonerror="yes">
            <classpath refid="aj.path"/>
            <classpath>
                <pathelement path="${aj.sandbox}/hello.jar:${aj.sandbox}/handler.jar:${aj.sandbox}/tracing.jar"/>
            </classpath>
            <jvmarg value="-Dorg.aspectj.weaver.loadtime.configuration=META-INF/aop-random.xml"/>
            <jvmarg value="-Dorg.aspectj.tracing.enabled=true"/>
            <jvmarg value="-Dorg.aspectj.tracing.factory=default"/>
            <jvmarg value="-Dorg.aspectj.tracing.messages=true"/>
            <!-- use META-INF/aop.xml style -->
            <jvmarg value="-javaagent:${aj.root}/lib/test/loadtime5.jar"/>
<!--            <jvmarg value="${aj.addOpensKey}"/>-->
<!--            <jvmarg value="${aj.addOpensValue}"/>-->
<!--            <jvmarg line="${jdwp}"/>-->
        </java>
    </target>

	<!-- Beware, this is complicated! We need to intercept class loading on
	     the System class loader before any classes are loaded. We do this
	     by replacing the URLClassLoader. We then define a custom
	     SecurityManager that will be loaded _before_ the class loader
	     hierarch is fully initialized. -->
    <target name="NPE with custom agent">
        <java fork="yes" classname="HelloWorldWithException" failonerror="yes">

        	<!-- Prepend custom URLClassLoader and append AspectJ
        	     to bootclasspath -->
        	<jvmarg value="-Xbootclasspath/p:${aj.sandbox}"/>
            <jvmarg value="-Xbootclasspath/a:${aj.bootpath}"/>
<!--            <jvmarg value="${aj.addOpensKey}"/>-->
<!--            <jvmarg value="${aj.addOpensValue}"/>-->

        	<classpath>
                <pathelement path="${aj.sandbox}/hello.jar:${aj.sandbox}/handler.jar:${aj.sandbox}/security.jar"/>
            </classpath>

        	<!-- Specify custom SecurityManager that will be loaded
        	     and woven very early -->
        	<jvmarg value="-Djava.security.manager=NullSecurityManager"/>

            <jvmarg value="-Daj.weaving.verbose=true"/>
            <jvmarg value="-Dorg.aspectj.weaver.showWeaveInfo=true"/>

<!--
            <jvmarg value="-Dorg.aspectj.tracing.enabled=true"/>
            <jvmarg value="-Dorg.aspectj.tracing.factory=default"/>
            <jvmarg value="-Dorg.aspectj.tracing.messages=true"/>
-->
        </java>
    </target>

    <target name="simple LTW">
        <copy file="${aj.root}/tests/ltw/aop-simple.xml"
              tofile="${aj.sandbox}/META-INF/aop.xml"/>
        <java fork="yes" classname="HelloWorldWithException" failonerror="yes">
            <classpath refid="aj.path"/>
            <!-- use META-INF/aop.xml style -->
            <jvmarg value="-javaagent:${aj.root}/lib/test/loadtime5.jar"/>
<!--            <jvmarg value="${aj.addOpensKey}"/>-->
<!--            <jvmarg value="${aj.addOpensValue}"/>-->
<!--            <jvmarg line="${jdwp}"/>-->
        </java>
    </target>

    <target name="dump on error">
        <copy file="${aj.root}/tests/ltw/aop-dumponerror.xml"
              tofile="${aj.sandbox}/META-INF/aop.xml"/>
        <java fork="yes" classname="HelloWorldWithException" failonerror="no">
            <classpath refid="aj.path"/>
            <jvmarg value="-Dorg.aspectj.weaver.Dump.condition=error"/>
        	<sysproperty key="org.aspectj.dump.directory" path="${aj.sandbox}"/>
            <!-- use META-INF/aop.xml style -->
            <jvmarg value="-javaagent:${aj.root}/lib/test/loadtime5.jar"/>
<!--            <jvmarg value="${aj.addOpensKey}"/>-->
<!--            <jvmarg value="${aj.addOpensValue}"/>-->
            <jvmarg value="-Dorg.aspectj.tracing.factory=default"/>
<!--            <jvmarg line="${jdwp}"/>-->
        </java>
    </target>

</project>