123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514 |
- /* *******************************************************************
- * 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 Common Public License v1.0
- * which accompanies this distribution and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * PARC initial implementation
- * Adrian Colyer added constructor to populate javaOptions with
- * default settings - 01.20.2003
- * Bugzilla #29768, 29769
- * ******************************************************************/
-
-
- package org.aspectj.ajdt.internal.core.builder;
-
- import java.io.File;
- import java.io.FileFilter;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
-
- import org.aspectj.util.FileUtil;
-
- /**
- * All configuration information needed to run the AspectJ compiler.
- * Compiler options (as opposed to path information) are held in an AjCompilerOptions instance
- */
- public class AjBuildConfig {
-
- private boolean shouldProceed = true;
-
- public static final String AJLINT_IGNORE = "ignore";
- public static final String AJLINT_WARN = "warn";
- public static final String AJLINT_ERROR = "error";
- public static final String AJLINT_DEFAULT = "default";
-
- private File outputDir;
- private File outputJar;
- private List/*File*/ sourceRoots = new ArrayList();
- private List/*File*/ files = new ArrayList();
- private List /*File*/ binaryFiles = new ArrayList(); // .class files in indirs...
- private List/*File*/ inJars = new ArrayList();
- private List/*File*/ inPath = new ArrayList();
- private Map/*String->File*/ sourcePathResources = new HashMap();
- private List/*File*/ aspectpath = new ArrayList();
- private List/*String*/ classpath = new ArrayList();
- private List/*String*/ bootclasspath = new ArrayList();
-
- private File configFile;
- private String lintMode = AJLINT_DEFAULT;
- private File lintSpecFile = null;
-
- private AjCompilerOptions options;
-
- /** if true, then global values override local when joining */
- private boolean override = true;
-
- // incremental variants handled by the compiler client, but parsed here
- private boolean incrementalMode;
- private File incrementalFile;
-
- public static class BinarySourceFile {
- public BinarySourceFile(File dir, File src) {
- this.fromInPathDirectory = dir;
- this.binSrc = src;
- }
- public File fromInPathDirectory;
- public File binSrc;
-
- public boolean equals(Object obj) {
- if ((obj instanceof BinarySourceFile) &&
- (obj != null)) {
- BinarySourceFile other = (BinarySourceFile)obj;
- return(binSrc.equals(other.binSrc));
- }
- return false;
- }
- public int hashCode() {
- return binSrc != null ? binSrc.hashCode() : 0;
- }
- }
-
- /**
- * Intialises the javaOptions Map to hold the default
- * JDT Compiler settings. Added by AMC 01.20.2003 in reponse
- * to bug #29768 and enh. 29769.
- * The settings here are duplicated from those set in
- * org.eclipse.jdt.internal.compiler.batch.Main, but I've elected to
- * copy them rather than refactor the JDT class since this keeps
- * integration with future JDT releases easier (?).
- */
- public AjBuildConfig( ) {
- options = new AjCompilerOptions();
- }
-
- /**
- * returned files includes <ul>
- * <li>files explicitly listed on command-line</li>
- * <li>files listed by reference in argument list files</li>
- * <li>files contained in sourceRootDir if that exists</li>
- * </ul>
- *
- * @return all source files that should be compiled.
- */
- public List/*File*/ getFiles() {
- return files;
- }
-
- /**
- * returned files includes all .class files found in
- * a directory on the inpath, but does not include
- * .class files contained within jars.
- */
- public List/*BinarySourceFile*/ getBinaryFiles() {
- return binaryFiles;
- }
-
- public File getOutputDir() {
- return outputDir;
- }
-
- public void setFiles(List files) {
- this.files = files;
- }
-
- public void setOutputDir(File outputDir) {
- this.outputDir = outputDir;
- }
-
- public AjCompilerOptions getOptions() {
- return options;
- }
-
- /**
- * This does not include -bootclasspath but includes -extdirs and -classpath
- */
- public List getClasspath() { // XXX setters don't respect javadoc contract...
- return classpath;
- }
-
- public void setClasspath(List classpath) {
- this.classpath = classpath;
- }
-
- public List getBootclasspath() {
- return bootclasspath;
- }
-
- public void setBootclasspath(List bootclasspath) {
- this.bootclasspath = bootclasspath;
- }
-
- public File getOutputJar() {
- return outputJar;
- }
-
- public List/*File*/ getInpath() {
- // Elements of the list are either archives (jars/zips) or directories
- return inPath;
- }
-
- public List/*File*/ getInJars() {
- return inJars;
- }
-
- public Map getSourcePathResources() {
- return sourcePathResources;
- }
-
- public void setOutputJar(File outputJar) {
- this.outputJar = outputJar;
- }
-
- public void setInJars(List sourceJars) {
- this.inJars = sourceJars;
- }
-
- public void setInPath(List dirsOrJars) {
- inPath = dirsOrJars;
-
- // remember all the class files in directories on the inpath
- binaryFiles = new ArrayList();
- FileFilter filter = new FileFilter() {
- public boolean accept(File pathname) {
- return pathname.getPath().endsWith(".class");
- }};
- for (Iterator iter = dirsOrJars.iterator(); iter.hasNext();) {
- File inpathElement = (File) iter.next();
- if (inpathElement.isDirectory()) {
- File[] files = FileUtil.listFiles(inpathElement, filter);
- for (int i = 0; i < files.length; i++) {
- binaryFiles.add(new BinarySourceFile(inpathElement,files[i]));
- }
- }
- }
- }
-
- public List getSourceRoots() {
- return sourceRoots;
- }
-
- public void setSourceRoots(List sourceRootDir) {
- this.sourceRoots = sourceRootDir;
- }
-
- public File getConfigFile() {
- return configFile;
- }
-
- public void setConfigFile(File configFile) {
- this.configFile = configFile;
- }
-
- public void setIncrementalMode(boolean incrementalMode) {
- this.incrementalMode = incrementalMode;
- }
-
- public boolean isIncrementalMode() {
- return incrementalMode;
- }
-
- public void setIncrementalFile(File incrementalFile) {
- this.incrementalFile = incrementalFile;
- }
-
- public boolean isIncrementalFileMode() {
- return (null != incrementalFile);
- }
-
- /**
- * @return List (String) classpath of bootclasspath, injars, inpath, aspectpath
- * entries, specified classpath (extdirs, and classpath), and output dir or jar
- */
- public List getFullClasspath() {
- List full = new ArrayList();
- full.addAll(getBootclasspath()); // XXX Is it OK that boot classpath overrides inpath/injars/aspectpath?
- for (Iterator i = inJars.iterator(); i.hasNext(); ) {
- full.add(((File)i.next()).getAbsolutePath());
- }
- for (Iterator i = inPath.iterator();i.hasNext();) {
- full.add(((File)i.next()).getAbsolutePath());
- }
- for (Iterator i = aspectpath.iterator(); i.hasNext(); ) {
- full.add(((File)i.next()).getAbsolutePath());
- }
- full.addAll(getClasspath());
- // if (null != outputDir) {
- // full.add(outputDir.getAbsolutePath());
- // } else if (null != outputJar) {
- // full.add(outputJar.getAbsolutePath());
- // }
- return full;
- }
-
- public File getLintSpecFile() {
- return lintSpecFile;
- }
-
- public void setLintSpecFile(File lintSpecFile) {
- this.lintSpecFile = lintSpecFile;
- }
-
- public List getAspectpath() {
- return aspectpath;
- }
-
- public void setAspectpath(List aspectpath) {
- this.aspectpath = aspectpath;
- }
-
- /** @return true if any config file, sourceroots, sourcefiles, injars or inpath */
- public boolean hasSources() {
- return ((null != configFile)
- || (0 < sourceRoots.size())
- || (0 < files.size())
- || (0 < inJars.size())
- || (0 < inPath.size())
- );
- }
-
- // /** @return null if no errors, String errors otherwise */
- // public String configErrors() {
- // StringBuffer result = new StringBuffer();
- // // ok, permit both. sigh.
- //// if ((null != outputDir) && (null != outputJar)) {
- //// result.append("specified both outputDir and outputJar");
- //// }
- // // incremental => only sourceroots
- // //
- // return (0 == result.length() ? null : result.toString());
- // }
-
- /**
- * Install global values into local config
- * unless values conflict:
- * <ul>
- * <li>Collections are unioned</li>
- * <li>values takes local value unless default and global set</li>
- * <li>this only sets one of outputDir and outputJar as needed</li>
- * <ul>
- * This also configures super if javaOptions change.
- * @param global the AjBuildConfig to read globals from
- */
- public void installGlobals(AjBuildConfig global) { // XXX relies on default values
- // don't join the options - they already have defaults taken care of.
- // Map optionsMap = options.getMap();
- // join(optionsMap,global.getOptions().getMap());
- // options.set(optionsMap);
- join(aspectpath, global.aspectpath);
- join(classpath, global.classpath);
- if (null == configFile) {
- configFile = global.configFile; // XXX correct?
- }
- if (!isEmacsSymMode() && global.isEmacsSymMode()) {
- setEmacsSymMode(true);
- }
- join(files, global.files);
- if (!isGenerateModelMode() && global.isGenerateModelMode()) {
- setGenerateModelMode(true);
- }
- if (null == incrementalFile) {
- incrementalFile = global.incrementalFile;
- }
- if (!incrementalMode && global.incrementalMode) {
- incrementalMode = true;
- }
- join(inJars, global.inJars);
- join(inPath, global.inPath);
- if ((null == lintMode)
- || (AJLINT_DEFAULT.equals(lintMode))) {
- setLintMode(global.lintMode);
- }
- if (null == lintSpecFile) {
- lintSpecFile = global.lintSpecFile;
- }
- if (!isNoWeave() && global.isNoWeave()) {
- setNoWeave(true);
- }
- if ((null == outputDir) && (null == outputJar)) {
- if (null != global.outputDir) {
- outputDir = global.outputDir;
- }
- if (null != global.outputJar) {
- outputJar = global.outputJar;
- }
- }
- join(sourceRoots, global.sourceRoots);
- if (!isXnoInline() && global.isXnoInline()) {
- setXnoInline(true);
- }
- if (!isXserializableAspects() && global.isXserializableAspects()) {
- setXserializableAspects(true);
- }
- if (!isXlazyTjp() && global.isXlazyTjp()) {
- setXlazyTjp(true);
- }
- if (!isXreweavable() && global.isXreweavable()) {
- setXreweavable(true);
- }
- if (!getXreweavableCompressClasses() && global.getXreweavableCompressClasses()) {
- setXreweavableCompressClasses(true);
- }
- }
-
- void join(Collection local, Collection global) {
- for (Iterator iter = global.iterator(); iter.hasNext();) {
- Object next = iter.next();
- if (!local.contains(next)) {
- local.add(next);
- }
- }
- }
- void join(Map local, Map global) {
- for (Iterator iter = global.keySet().iterator(); iter.hasNext();) {
- Object key = iter.next();
- if (override || (null == local.get(key))) { //
- Object value = global.get(key);
- if (null != value) {
- local.put(key, value);
- }
- }
- }
- }
-
- public void setSourcePathResources(Map map) {
- sourcePathResources = map;
- }
-
- /**
- * used to indicate whether to proceed after parsing config
- */
- public boolean shouldProceed() {
- return shouldProceed;
- }
-
- public void doNotProceed() {
- shouldProceed = false;
- }
-
- public String getLintMode() {
- return lintMode;
- }
-
- // options...
-
- public void setLintMode(String lintMode) {
- this.lintMode = lintMode;
- options.setLintMode(lintMode);
- }
-
- public boolean isNoWeave() {
- return options.noWeave;
- }
-
- public void setNoWeave(boolean noWeave) {
- options.noWeave = noWeave;
- }
-
- public boolean isXserializableAspects() {
- return options.xSerializableAspects;
- }
-
- public void setXserializableAspects(boolean xserializableAspects) {
- options.xSerializableAspects = xserializableAspects;
- }
-
- public boolean isXnoInline() {
- return options.xNoInline;
- }
-
- public void setXnoInline(boolean xnoInline) {
- options.xNoInline = xnoInline;
- }
-
- public boolean isXlazyTjp() {
- return options.xLazyThisJoinPoint;
- }
-
- public void setXlazyTjp(boolean b) {
- options.xLazyThisJoinPoint = b;
- }
-
- public void setXreweavable(boolean b) {
- options.xReweavable = b;
- }
-
- public boolean isXreweavable() {
- return options.xReweavable;
- }
-
- public void setXreweavableCompressClasses(boolean b) {
- options.xReweavableCompress = b;
- }
-
- public boolean getXreweavableCompressClasses() {
- return options.xReweavableCompress;
- }
-
- public boolean isGenerateJavadocsInModelMode() {
- return options.generateJavaDocsInModel;
- }
-
- public void setGenerateJavadocsInModelMode(
- boolean generateJavadocsInModelMode) {
- options.generateJavaDocsInModel = generateJavadocsInModelMode;
- }
-
- public boolean isEmacsSymMode() {
- return options.generateEmacsSymFiles;
- }
-
- public void setEmacsSymMode(boolean emacsSymMode) {
- options.generateEmacsSymFiles = emacsSymMode;
- }
-
- public boolean isGenerateModelMode() {
- return options.generateModel;
- }
-
- public void setGenerateModelMode(boolean structureModelMode) {
- options.generateModel = structureModelMode;
- }
-
-
- public void setShowWeavingInformation(boolean b) {
- options.showWeavingInformation = true;
- }
-
- public boolean getShowWeavingInformation() {
- return options.showWeavingInformation;
- }
-
- public void setProceedOnError(boolean b) {
- options.proceedOnError = b;
- }
-
- public boolean getProceedOnError() {
- return options.proceedOnError;
- }
-
- public void setBehaveInJava5Way(boolean b) {
- options.behaveInJava5Way = b;
- }
-
- public boolean getBehaveInJava5Way() {
- return options.behaveInJava5Way;
- }
- }
|