Browse Source

Fixed up path handling, including implicit jmod inclusion

tags/V1_9_0_RC4
Andy Clement 6 years ago
parent
commit
a5495d637c
1 changed files with 63 additions and 52 deletions
  1. 63
    52
      org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java

+ 63
- 52
org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java View File

@@ -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<FileSystem.Classpath> handleClasspath(ArrayList<String> 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<Arg> 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<File> sourceRoots = new ArrayList<File>();
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);
}

}

Loading…
Cancel
Save