From a5495d637c74706d61e42d64db9c09cd474ba729 Mon Sep 17 00:00:00 2001 From: Andy Clement Date: Wed, 14 Feb 2018 13:00:50 -0800 Subject: [PATCH] Fixed up path handling, including implicit jmod inclusion --- .../org/aspectj/ajdt/ajc/BuildArgParser.java | 115 ++++++++++-------- 1 file changed, 63 insertions(+), 52 deletions(-) diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java index c061208f0..ada5639ef 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java @@ -12,9 +12,29 @@ package org.aspectj.ajdt.ajc; +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.StringTokenizer; + import org.aspectj.ajdt.internal.compiler.lookup.EclipseSourceLocation; import org.aspectj.ajdt.internal.core.builder.AjBuildConfig; -import org.aspectj.bridge.*; +import org.aspectj.bridge.CountingMessageHandler; +import org.aspectj.bridge.IMessage; +import org.aspectj.bridge.IMessageHandler; +import org.aspectj.bridge.ISourceLocation; +import org.aspectj.bridge.Message; +import org.aspectj.bridge.MessageUtil; +import org.aspectj.bridge.SourceLocation; +import org.aspectj.bridge.Version; import org.aspectj.org.eclipse.jdt.core.compiler.CategorizedProblem; import org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.AptProblem; import org.aspectj.org.eclipse.jdt.internal.compiler.batch.FileSystem; @@ -22,18 +42,13 @@ import org.aspectj.org.eclipse.jdt.internal.compiler.batch.Main; import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; import org.aspectj.org.eclipse.jdt.internal.compiler.env.IModule; import org.aspectj.org.eclipse.jdt.internal.compiler.impl.CompilerOptions; +import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment; import org.aspectj.util.FileUtil; import org.aspectj.util.LangUtil; import org.aspectj.weaver.Constants; import org.aspectj.weaver.Dump; import org.aspectj.weaver.WeaverMessages; -import java.io.File; -import java.io.IOException; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.util.*; - @SuppressWarnings("unchecked") public class BuildArgParser extends Main { @@ -190,6 +205,12 @@ public class BuildArgParser extends Main { if (setClasspath) { // This computed classpaths will be missing aspectpaths, inpaths, add those first buildConfig.setClasspath(getClasspath(parser)); + // Implicit inclusion of jmods on module path + if (checkVMVersion(ClassFileConstants.JDK9)) { + // Add the default jmods path? javac seems to do this + File jmods = new File(getJavaHome(),"jmods"); + parser.modulepath = (parser.modulepath == null)?jmods.getAbsolutePath():parser.modulepath+File.pathSeparator+jmods.getAbsolutePath(); + } buildConfig.setModulepath(getModulepath(parser)); buildConfig.setModulepathClasspathEntries(handleModulepath(parser.modulepath)); buildConfig.setModulesourcepath(getModulesourcepath(parser)); @@ -208,27 +229,22 @@ public class BuildArgParser extends Main { File outjar = buildConfig.getOutputJar(); if (outjar != null) { - /* Search injars */ - for (Iterator i = buildConfig.getInJars().iterator(); i.hasNext();) { - File injar = (File) i.next(); + for (File injar: buildConfig.getInJars()) { if (injar.equals(outjar)) { String message = WeaverMessages.format(WeaverMessages.OUTJAR_IN_INPUT_PATH); MessageUtil.error(handler, message); } } - /* Search inpath */ - for (Iterator i = buildConfig.getInpath().iterator(); i.hasNext();) { - File inPathElement = (File) i.next(); + for (File inPathElement: buildConfig.getInpath()) { if (!inPathElement.isDirectory() && inPathElement.equals(outjar)) { String message = WeaverMessages.format(WeaverMessages.OUTJAR_IN_INPUT_PATH); MessageUtil.error(handler, message); } } - /* Search aspectpath */ - for (File pathElement: buildConfig.getAspectpath()) { - if (!pathElement.isDirectory() && pathElement.equals(outjar)) { + for (File aspectPathElement: buildConfig.getAspectpath()) { + if (!aspectPathElement.isDirectory() && aspectPathElement.equals(outjar)) { String message = WeaverMessages.format(WeaverMessages.OUTJAR_IN_INPUT_PATH); MessageUtil.error(handler, message); } @@ -271,6 +287,7 @@ public class BuildArgParser extends Main { return arrayList; } + @Override public void printVersion() { final String version = bind("misc.version", //$NON-NLS-1$ new String[] { bind("compiler.name"), //$NON-NLS-1$ @@ -372,6 +389,7 @@ public class BuildArgParser extends Main { return ret; } + @Override public ArrayList handleClasspath(ArrayList classpaths, String customEncoding) { return super.handleClasspath(classpaths, customEncoding); } @@ -467,6 +485,7 @@ public class BuildArgParser extends Main { * Extract AspectJ-specific options (except for argfiles). Caller should warn when sourceroots is empty but in incremental * mode. Signals warnings or errors through handler set in constructor. */ + @Override public void parseOption(String arg, LinkedList args) { // XXX use ListIterator.remove() int nextArgIndex = args.indexOf(arg) + 1; // XXX assumes unique // trim arg? @@ -479,7 +498,7 @@ public class BuildArgParser extends Main { if (args.size() > nextArgIndex) { // buildConfig.getAjOptions().put(AjCompilerOptions.OPTION_Inpath, CompilerOptions.PRESERVE); - StringTokenizer st = new StringTokenizer(((ConfigParser.Arg) args.get(nextArgIndex)).getValue(), + StringTokenizer st = new StringTokenizer(args.get(nextArgIndex).getValue(), File.pathSeparator); boolean inpathChange = false; while (st.hasMoreTokens()) { @@ -506,7 +525,7 @@ public class BuildArgParser extends Main { if (args.size() > nextArgIndex) { // buildConfig.getAjOptions().put(AjCompilerOptions.OPTION_InJARs, CompilerOptions.PRESERVE); - StringTokenizer st = new StringTokenizer(((ConfigParser.Arg) args.get(nextArgIndex)).getValue(), + StringTokenizer st = new StringTokenizer(args.get(nextArgIndex).getValue(), File.pathSeparator); while (st.hasMoreTokens()) { String filename = st.nextToken(); @@ -527,7 +546,7 @@ public class BuildArgParser extends Main { } } else if (arg.equals("-aspectpath")) { if (args.size() > nextArgIndex) { - StringTokenizer st = new StringTokenizer(((ConfigParser.Arg) args.get(nextArgIndex)).getValue(), + StringTokenizer st = new StringTokenizer(args.get(nextArgIndex).getValue(), File.pathSeparator); while (st.hasMoreTokens()) { String filename = st.nextToken(); @@ -547,7 +566,7 @@ public class BuildArgParser extends Main { } else if (arg.equals("-sourceroots")) { if (args.size() > nextArgIndex) { List sourceRoots = new ArrayList(); - StringTokenizer st = new StringTokenizer(((ConfigParser.Arg) args.get(nextArgIndex)).getValue(), + StringTokenizer st = new StringTokenizer(args.get(nextArgIndex).getValue(), File.pathSeparator); while (st.hasMoreTokens()) { File f = makeFile(st.nextToken()); @@ -567,7 +586,7 @@ public class BuildArgParser extends Main { } else if (arg.equals("-outjar")) { if (args.size() > nextArgIndex) { // buildConfig.getAjOptions().put(AjCompilerOptions.OPTION_OutJAR, CompilerOptions.GENERATE); - File jarFile = makeFile(((ConfigParser.Arg) args.get(nextArgIndex)).getValue()); + File jarFile = makeFile(args.get(nextArgIndex).getValue()); if (!jarFile.isDirectory()) { try { if (!jarFile.exists()) { @@ -588,7 +607,7 @@ public class BuildArgParser extends Main { buildConfig.setOutxmlName(org.aspectj.bridge.Constants.AOP_AJC_XML); } else if (arg.equals("-outxmlfile")) { if (args.size() > nextArgIndex) { - String name = ((ConfigParser.Arg) args.get(nextArgIndex)).getValue(); + String name = args.get(nextArgIndex).getValue(); buildConfig.setOutxmlName(name); args.remove(args.get(nextArgIndex)); } else { @@ -604,7 +623,7 @@ public class BuildArgParser extends Main { buildConfig.setIncrementalMode(true); } else if (arg.equals("-XincrementalFile")) { if (args.size() > nextArgIndex) { - File file = makeFile(((ConfigParser.Arg) args.get(nextArgIndex)).getValue()); + File file = makeFile(args.get(nextArgIndex).getValue()); buildConfig.setIncrementalFile(file); if (!file.canRead()) { showError("bad -XincrementalFile : " + file); @@ -675,7 +694,7 @@ public class BuildArgParser extends Main { buildConfig.setShowWeavingInformation(true); } else if (arg.equals("-Xlintfile")) { if (args.size() > nextArgIndex) { - File lintSpecFile = makeFile(((ConfigParser.Arg) args.get(nextArgIndex)).getValue()); + File lintSpecFile = makeFile(args.get(nextArgIndex).getValue()); // XXX relax restriction on props file suffix? if (lintSpecFile.canRead() && lintSpecFile.getName().endsWith(".properties")) { buildConfig.setLintSpecFile(lintSpecFile); @@ -700,7 +719,7 @@ public class BuildArgParser extends Main { } } else if (arg.equals("-bootclasspath")) { if (args.size() > nextArgIndex) { - String bcpArg = ((ConfigParser.Arg) args.get(nextArgIndex)).getValue(); + String bcpArg = args.get(nextArgIndex).getValue(); StringBuffer bcp = new StringBuffer(); StringTokenizer strTok = new StringTokenizer(bcpArg, File.pathSeparator); while (strTok.hasMoreTokens()) { @@ -716,7 +735,7 @@ public class BuildArgParser extends Main { } } else if (arg.equals("-classpath") || arg.equals("-cp")) { if (args.size() > nextArgIndex) { - String cpArg = ((ConfigParser.Arg) args.get(nextArgIndex)).getValue(); + String cpArg = args.get(nextArgIndex).getValue(); StringBuffer cp = new StringBuffer(); StringTokenizer strTok = new StringTokenizer(cpArg, File.pathSeparator); while (strTok.hasMoreTokens()) { @@ -726,50 +745,29 @@ public class BuildArgParser extends Main { } } classpath = cp.toString(); - Arg pathArg = args.get(nextArgIndex); - unparsedArgs.add("-classpath"); - unparsedArgs.add(pathArg.getValue()); - args.remove(pathArg); + args.remove(args.get(nextArgIndex)); } else { showError("-classpath requires classpath entries"); } } else if (arg.equals("--module-path") || arg.equals("-p")) { if (args.size() > nextArgIndex) { - String mpArg = ((ConfigParser.Arg) args.get(nextArgIndex)).getValue(); + String mpArg = args.get(nextArgIndex).getValue(); modulepath = mpArg; -// StringBuffer mp = new StringBuffer(); -// StringTokenizer strTok = new StringTokenizer(mpArg, File.pathSeparator); -// while (strTok.hasMoreTokens()) { -// mp.append(makeFile(strTok.nextToken())); -// if (strTok.hasMoreTokens()) { -// mp.append(File.pathSeparator); -// } -// } -// modulepath = mp.toString(); args.remove(args.get(nextArgIndex)); } else { showError("--module-path requires modulepath entries"); } } else if (arg.equals("--module-source-path") || arg.equals("-p")) { if (args.size() > nextArgIndex) { - String mspArg = ((ConfigParser.Arg) args.get(nextArgIndex)).getValue(); + String mspArg = args.get(nextArgIndex).getValue(); modulesourcepath = mspArg; -// StringBuffer mp = new StringBuffer(); -// StringTokenizer strTok = new StringTokenizer(mpArg, File.pathSeparator); -// while (strTok.hasMoreTokens()) { -// mp.append(makeFile(strTok.nextToken())); -// if (strTok.hasMoreTokens()) { -// mp.append(File.pathSeparator); -// } -// } -// modulepath = mp.toString(); args.remove(args.get(nextArgIndex)); } else { showError("--module-source-path requires modulepath entries"); } } else if (arg.equals("-extdirs")) { if (args.size() > nextArgIndex) { - String extdirsArg = ((ConfigParser.Arg) args.get(nextArgIndex)).getValue(); + String extdirsArg = args.get(nextArgIndex).getValue(); StringBuffer ed = new StringBuffer(); StringTokenizer strTok = new StringTokenizer(extdirsArg, File.pathSeparator); while (strTok.hasMoreTokens()) { @@ -834,7 +832,7 @@ public class BuildArgParser extends Main { unparsedArgs.add("-1.9"); } else if (arg.equals("-source")) { if (args.size() > nextArgIndex) { - String level = ((ConfigParser.Arg) args.get(nextArgIndex)).getValue(); + String level = args.get(nextArgIndex).getValue(); if (level.equals("1.5") || level.equals("5") || level.equals("1.6") || level.equals("6") || level.equals("1.7") || level.equals("7") || level.equals("8") || level.equals("1.8") || level.equals("9") || level.equals("1.9")) { buildConfig.setBehaveInJava5Way(true); @@ -870,6 +868,7 @@ public class BuildArgParser extends Main { } } + @Override public void showError(String message) { ISourceLocation location = null; if (buildConfig.getConfigFile() != null) { @@ -880,6 +879,7 @@ public class BuildArgParser extends Main { // MessageUtil.error(handler, CONFIG_MSG + message); } + @Override protected void showWarning(String message) { ISourceLocation location = null; if (buildConfig.getConfigFile() != null) { @@ -926,4 +926,15 @@ public class BuildArgParser extends Main { } } + + @Override + public boolean checkVMVersion(long minimalSupportedVersion) { + return super.checkVMVersion(minimalSupportedVersion); + } + + @Override + public void initRootModules(LookupEnvironment environment, FileSystem fileSystem) { + super.initRootModules(environment, fileSystem); + } + } -- 2.39.5