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;
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 {
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));
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);
}
return arrayList;
}
+ @Override
public void printVersion() {
final String version = bind("misc.version", //$NON-NLS-1$
new String[] { bind("compiler.name"), //$NON-NLS-1$
return ret;
}
+ @Override
public ArrayList<FileSystem.Classpath> handleClasspath(ArrayList<String> classpaths, String customEncoding) {
return super.handleClasspath(classpaths, customEncoding);
}
* 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?
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()) {
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();
}
} 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();
} 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());
} 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()) {
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 {
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);
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);
}
} 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()) {
}
} 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()) {
}
}
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()) {
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);
}
}
+ @Override
public void showError(String message) {
ISourceLocation location = null;
if (buildConfig.getConfigFile() != null) {
// MessageUtil.error(handler, CONFIG_MSG + message);
}
+ @Override
protected void showWarning(String message) {
ISourceLocation location = null;
if (buildConfig.getConfigFile() != null) {
}
}
+
+ @Override
+ public boolean checkVMVersion(long minimalSupportedVersion) {
+ return super.checkVMVersion(minimalSupportedVersion);
+ }
+
+ @Override
+ public void initRootModules(LookupEnvironment environment, FileSystem fileSystem) {
+ super.initRootModules(environment, fileSystem);
+ }
+
}