BcweaverJarMaker.java

/* *******************************************************************
 * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
 * All rights reserved.
 * This program and the accompanying materials are made available
 * under the terms of the Eclipse Public License v 2.0
 * which accompanies this distribution and is available at
 * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
 *
 * Contributors:
 *     PARC     initial implementation
 * ******************************************************************/

package org.aspectj.ajdt.internal.compiler.batch;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.aspectj.ajdt.ajc.Constants;

public class BcweaverJarMaker {

	private static String cp = "../lib/test/aspectjrt.jar;../lib/test/testing-client.jar" + File.pathSeparator + System.getProperty("aspectjrt.path");

	public BcweaverJarMaker() {
		super();
	}

	public static void main(String[] args) throws IOException {
		makeJar0();
		makeJar1();
		makeJar1a();
		makeJar2();

		makeJarObviousNothing();
		makeJarHardNothing();


		makeTestJars();

		makeURLWeavingClassLoaderJars();

		makeDuplicateManifestTestJars();

		makeOutjarTestJars();
		makeAspectPathTestJars();
		makeAjc11TestJars();
	}

	public static void makeJar0() throws IOException {
		List<String> args = new ArrayList<>();
		args.add("-outjar");
		args.add("../weaver/testdata/tracing.jar");

		args.add("-classpath");
		args.add(Constants.aspectjrtClasspath());

		args.add(Constants.TESTDATA_PATH + "/src1/Trace.java");
		args.add(Constants.TESTDATA_PATH + "/src1/MyTrace.java");

		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);
	}


	public static void makeJar1() throws IOException {
		List<String> args = new ArrayList<>();
		args.add("-outjar");
		args.add("../weaver/testdata/megatrace.jar");

		args.add("-classpath");
        args.add(Constants.aspectjrtClasspath());

		args.add(Constants.TESTDATA_PATH + "/src1/trace/MegaTrace.java");
		args.add(Constants.TESTDATA_PATH + "/src1/trace/ExecTrace.java");

		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);
	}


	public static void makeJarObviousNothing() throws IOException {
		List<String> args = new ArrayList<>();
		args.add("-outjar");
		args.add("../weaver/testdata/megatrace0easy.jar");

		args.add("-classpath");
        args.add(Constants.aspectjrtClasspath());

		args.add(Constants.TESTDATA_PATH + "/src1/trace/MegaTrace.java");
		args.add(Constants.TESTDATA_PATH + "/src1/trace/ObviousTraceNothing.java");

		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);
	}

	public static void makeJarHardNothing() throws IOException {
		List<String> args = new ArrayList<>();
		args.add("-outjar");
		args.add("../weaver/testdata/megatrace0hard.jar");

		args.add("-classpath");
        args.add(Constants.aspectjrtClasspath());

		args.add(Constants.TESTDATA_PATH + "/src1/trace/MegaTrace.java");
		args.add(Constants.TESTDATA_PATH + "/src1/trace/HardTraceNothing.java");

		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);
	}


	public static void makeJar1a() throws IOException {
		List<String> args = new ArrayList<>();
		args.add("-outjar");
		args.add("../weaver/testdata/megatraceNoweave.jar");

		args.add("-XterminateAfterCompilation");

		args.add("-classpath");
        args.add(Constants.aspectjrtClasspath());

		args.add(Constants.TESTDATA_PATH + "/src1/trace/MegaTrace.java");
		args.add(Constants.TESTDATA_PATH + "/src1/trace/ExecTrace.java");

		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);
	}


	public static void makeJar2() throws IOException {
		List<String> args = new ArrayList<>();
		args.add("-outjar");
		args.add("../weaver/testdata/dummyAspect.jar");

		args.add("-classpath");
        args.add(Constants.aspectjrtClasspath());

		args.add(Constants.TESTDATA_PATH + "/src1/DummyAspect.java");

		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);
	}

	public static void makeTestJars() throws IOException {
		List<String> args = new ArrayList<>();

		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar" +
			File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-outjar");
		args.add("../tests/new/options11/aspectlib1.jar");
		args.add("../tests/new/options11/library1/*.java");

		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);

		args = new ArrayList<>();

		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar" +
		   File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-outjar");
		args.add("../tests/new/options11/aspectlib2.jar");
		args.add("../tests/new/options11/library2/*.java");

		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);

		args = new ArrayList<>();

		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar"  +
			File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-outjar");
		args.add("../tests/new/options11/injar.jar");
		args.add("../tests/new/options11/injar/*.java");

		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);

		args = new ArrayList<>();

		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar"  +
			File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-outjar");
		args.add("../tests/bugs/serialVersionUID/injar.jar");
		args.add("../tests/bugs/serialVersionUID/Test.java");
		args.add("../tests/bugs/serialVersionUID/Util.java");

		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);

		// For PR55341
		args = new ArrayList<>();
		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar"  +
			File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-outjar");
		args.add("../tests/bugs/StringToString/helloworld.jar");
		args.add("../tests/bugs/StringToString/HW.java");
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);

		buildShowWeaveInfoTestingJars();
	}

	public static void makeURLWeavingClassLoaderJars() throws IOException {
		List<String> args = new ArrayList<>();

		/*
		 * Vanilla classes
		 */
		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar" +
		   File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-outjar");
		args.add("../weaver/testdata/ltw-classes.jar");
		args.add(Constants.TESTDATA_PATH + "/src1/LTWHelloWorld.java");
		args.add(Constants.TESTDATA_PATH + "/src1/ltw/LTWPackageTest.java");
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);

		/*
		 * Woven classes
		 */
		args = new ArrayList<>();
		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar;../weaver/testdata/ltw-classes.jar" +
		   File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-XnotReweavable");
		args.add("-outjar");
		args.add("../weaver/testdata/ltw-woven.jar");
		args.add(Constants.TESTDATA_PATH + "/src1/LTWHelloWorld.java");
		args.add(Constants.TESTDATA_PATH + "/src1/LTWAspect.aj");
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);

		/*
		 * Advice
		 */
		args = new ArrayList<>();
		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar;../weaver/testdata/ltw-classes.jar" +
		   File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-outjar");
		args.add("../weaver/testdata/ltw-aspects.jar");
		args.add(Constants.TESTDATA_PATH + "/src1/LTWAspect.aj");
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);

		/*
		 * Declare warning advice
		 */
		args = new ArrayList<>();
		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar;../weaver/testdata/ltw-classes.jar" +
		   File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-outjar");
		args.add("../weaver/testdata/ltw-dwaspects.jar");
		args.add(Constants.TESTDATA_PATH + "/src1/LTWDeclareWarning.aj");
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);

		/*
		 * Declare error advice
		 */
		args = new ArrayList();
		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar;../weaver/testdata/ltw-classes.jar" +
		   File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-outjar");
		args.add("../weaver/testdata/ltw-deaspects.jar");
		args.add(Constants.TESTDATA_PATH + "/src1/LTWDeclareError.aj");
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);

		/*
		 * Around closure advice
		 */
		args = new ArrayList<>();
		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar;../weaver/testdata/ltw-classes.jar" +
		   File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-outjar");
		args.add("../weaver/testdata/ltw-acaspects.jar");
		args.add(Constants.TESTDATA_PATH + "/src1/LTWAroundClosure.aj");
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);

		/*
		 * ITD
		 */
		args = new ArrayList<>();
		args.add("-Xlint:ignore");
		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar;../weaver/testdata/ltw-classes.jar" +
		   File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-outjar");
		args.add("../weaver/testdata/ltw-itdaspects.jar");
		args.add(Constants.TESTDATA_PATH + "/src1/LTWInterfaceITD.aj");
		args.add(Constants.TESTDATA_PATH + "/src1/LTWFieldITD.aj");
		args.add(Constants.TESTDATA_PATH + "/src1/LTWMethodITD.aj");
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);

		/*
		 * perXXX()
		 */
		args = new ArrayList();
		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar;../weaver/testdata/ltw-classes.jar" +
		   File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-outjar");
		args.add("../weaver/testdata/ltw-peraspects.jar");
		args.add(Constants.TESTDATA_PATH + "/src1/LTWPerthis.aj");
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);
	}

	private static void buildJarWithClasspath(String outjar,String input,String deps,boolean nodebug) {
		System.out.println("  Building "+outjar);
		List<String> args = new ArrayList<>();
		if (nodebug) args.add("-g:none");
		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar"  +
				 File.pathSeparator + System.getProperty("aspectjrt.path") +
				 (deps!=null?File.pathSeparator + "../ajde/testdata/WeaveInfoMessagesTest/"+deps:""));
		args.add("-outjar");
		args.add("../ajde/testdata/WeaveInfoMessagesTest/"+outjar);
		args.add("../ajde/testdata/WeaveInfoMessagesTest/"+input);

		System.err.println(args);
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);
	}

	private static void buildShowWeaveInfoTestingJars() {
		System.out.println("For binary weave info message testing (ShowWeaveMessagesTestCase.java)");
		buildJarWithClasspath("Simple.jar","Simple.java",null,false);
		// Build with javac and jar
		// buildJarWithClasspath("Simple_nodebug.jar","Simple.java",null,true);
		buildJarWithClasspath("AspectAdvice.jar","AspectAdvice.aj",null,false);
		buildJarWithClasspath("AspectAdvice_nodebug.jar","AspectAdvice.aj","Simple.jar",true);
		buildJarWithClasspath("AspectDeclare.jar","AspectDeclare.aj","Simple.jar",false);
		buildJarWithClasspath("AspectDeclare_nodebug.jar","AspectDeclare.aj","Simple.jar",true);
		buildJarWithClasspath("AspectITD.jar","AspectITD.aj","Simple.jar",false);
		buildJarWithClasspath("AspectITD_nodebug.jar","AspectITD.aj","Simple.jar",true);
		buildJarWithClasspath("AspectDeclareSoft.jar","AspectDeclareSoft.aj","Simple.jar",false);
		buildJarWithClasspath("AspectDeclareSoft_nodebug.jar","AspectDeclareSoft.aj","Simple.jar",true);
	}

	public static void makeDuplicateManifestTestJars() throws IOException {
		List<String> args = new ArrayList<>();

		/*
		 * injar
		 */
		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar" +
		   File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-outjar");
		args.add("../ajde/testdata/DuplicateManifestTest/injar.jar");
		args.add(Constants.TESTDATA_PATH + "/src1/Hello.java");
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);

		/*
		 * aspectjar
		 */
		args = new ArrayList();
		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar" +
		   File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-outjar");
		args.add("../ajde/testdata/DuplicateManifestTest/aspectjar.jar");
		args.add(Constants.TESTDATA_PATH + "/src1/Trace.java");
		args.add(Constants.TESTDATA_PATH + "/src1/TraceHello.java");
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);
	}

	public static void makeAspectPathTestJars() throws IOException {
		List<String> args = new ArrayList<>();

		args.clear();
		args.add("-classpath");
		args.add(cp);
		args.add("-outjar");
		args.add("../tests/bugs/perCflowAndJar/lib.jar");
		args.add("../tests/bugs/perCflowAndJar/PerCFlowCompileFromJar.java");
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);
	}

	public static void makeAjc11TestJars() throws IOException {
		List<String> args = new ArrayList<>();
		args.clear();
		args.add("-classpath");
		args.add(cp);
		args.add("-outjar");
		args.add("../tests/bugs/cflowAndJar/lib.jar");
		args.add("../tests/bugs/cflowAndJar/AbstractAspect.aj");
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);
	}

	public static void makeOutjarTestJars() throws IOException {
		List<String> args = new ArrayList<>();

		// parent
		args.clear();
		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar" +
		   File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-outjar");
		args.add("./testdata/OutjarTest/parent.jar");
		args.add(Constants.TESTDATA_PATH + "/OutjarTest/src/jar1/Parent.java");
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);

		/*
		 * child
		 */
		args.clear();
		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar"
			+ File.pathSeparator + System.getProperty("aspectjrt.path")
			+ File.pathSeparator + "./testdata/OutjarTest/parent.jar");
		args.add("-outjar");
		args.add("./testdata/OutjarTest/child.jar");
		args.add(Constants.TESTDATA_PATH + "/OutjarTest/src/jar2/Child.java");
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);

		/*
		 * aspects
		 */
		args.clear();
		args.add("-classpath");
		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar"
			+ File.pathSeparator + System.getProperty("aspectjrt.path"));
		args.add("-outjar");
		args.add("./testdata/OutjarTest/aspects.jar");
		args.add(Constants.TESTDATA_PATH + "/OutjarTest/src/jar3/Aspect.aj");
		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);

		/*
		 * aspectjar
		 */
//		args = new ArrayList();
//		args.add("-classpath");
//		args.add("../lib/test/aspectjrt.jar;../lib/test/testing-client.jar" +
//		   File.pathSeparator + System.getProperty("aspectjrt.path"));
//		args.add("-outjar");
//		args.add("../ajde/testdata/DuplicateManifestTest/aspectjar.jar");
//		args.add(AjdtAjcTests.TESTDATA_PATH + "/src1/Trace.java");
//		args.add(AjdtAjcTests.TESTDATA_PATH + "/src1/TraceHello.java");
//		CommandTestCase.runCompiler(args, CommandTestCase.NO_ERRORS);
	}
}