blob: 8f83517590b22fd145a787ae1ce96a460ccdc0a9 [file] [log] [blame]
/********************************************************************
* Copyright (c) 2007 Contributors. All rights reserved.
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0
* which accompanies this distribution and is available at
* http://eclipse.org/legal/epl-v10.html
*
* Contributors: IBM Corporation - initial API and implementation
* Helen Hawkins - initial version (bug 148190)
*******************************************************************/
package org.aspectj.ajde.core;
import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.aspectj.ajdt.internal.core.builder.CompilerConfigurationChangeFlags;
/**
* Interface that contains all the configuration required for the compiler to be able to perform a build
*/
public interface ICompilerConfiguration extends CompilerConfigurationChangeFlags {
/**
* Returns the table of the current custom java options.
* <p>
* For a complete description of the configurable options, see {@link org.aspectj.ajde.core.JavaOptions#getDefaultJavaOptions}
* or {@link org.aspectj.org.eclipse.jdt.core.IJavaProject#getOptions(boolean)}
* </p>
*
* @return table of current settings of all options (key type: <code>String</code>; value type: <code>String</code>)
* @see org.aspectj.ajde.core.JavaOptions#getDefaultJavaOptions or
* org.aspectj.org.eclipse.jdt.core.IJavaProject#getOptions(boolean)
*/
public Map<String,String> getJavaOptionsMap();
/**
* The non-standard options, typically prefaced with -X when used with a command line compiler. The default is no non-standard
* options. Options should be separated by a space, for example "-showWeaveInfo -XnoInline"
*/
public String getNonStandardOptions();
/**
* @return a list of those files to include in the build
*/
public List<String> getProjectSourceFiles();
/**
* @return a list of those files that should be used to configure a build
*/
public List<String> getProjectXmlConfigFiles();
/**
* Return a subset of those files we'd get on getProjectSourceFiles() - the subset that have changed since the last build. If
* someone else has already worked out what needs rebuilding, we don't need to do it again by checking all of the
* projectSourceFiles(). Returning an empty list means nothing has changed, returning null means you have no idea what changed
* and the compiler should work it out.
*
* @return a subset of those files that would be returned on getProjectSourceFiles() that have actually *changed*
*/
public List<File> getProjectSourceFilesChanged();
public String getClasspath();
public String getModulepath();
public String getModuleSourcepath();
/**
* @return the IOutputLocationManager associated with this compiler configuration
*/
public IOutputLocationManager getOutputLocationManager();
/**
* @return the set of input path elements for this compilation. Set members should be of the type java.io.File. An empty set or
* null is acceptable for this option. From -inpath
*/
public Set<File> getInpath();
/**
* @return the output jar file for the compilation results. Return null to leave classfiles unjar'd in output directory From
* -outjar
*/
public String getOutJar();
/**
* @return the set of aspect jar files to be used for the compilation. Returning null or an empty set disables this option. Set
* members should be of type java.io.File. From -aspectpath
*/
public Set<File> getAspectPath();
/**
* Get the set of non-Java resources for this compilation. Set members should be of type java.io.File. An empty set or null is
* acceptable for this option.
*
* @return map from unique resource name to absolute path to source resource (String to File)
*/
public Map<String,File> getSourcePathResources();
/**
* Returns a set of bit flags indicating what has changed in the configuration since it was previously read. This allows the
* compiler to avoid repeating computation for values that are the same as before.
*
* @return set of bit flags, see the constants in @link {@link CompilerConfigurationChangeFlags}. If unsure return EVERYTHING
*/
public int getConfigurationChanges();
/**
* Called by AspectJ once it has processed the configuration object and is ready to do a build. The configuration object may or
* may not be interested in this event. It probably will be if it is correctly tracking changes and answering
* getConfigurationChanges() with something other than EVERYTHING.
*/
public void configurationRead();
/**
* Return a List (Strings) of the directory elements on the classpath that are likely to contain modified .class files since the
* previous build and must be checked. This would be used in the situation where a project has a dependency on another project
* and the dependency is captured by inclusion of one project on the classpath for the other. When the first project is built,
* we need to check the classpath element on the second projects classpath that represents the bin folder of the first project.
* By explicitly returning a list here we can avoid checking EVERYTHING.
*
* @return a list of modified elements that should be checked (can be empty) or null if unknown (and in which case every
* classpath element will be checked)
*/
public List<String> getClasspathElementsWithModifiedContents();
//
// /**
// * @return the location where the state can be persisted across eclipse restarts. eg. f:/foo/bar/goo
// */
// public String getLocationForPersistingProjectState();
/**
* Return the encoding to use for this project. Return null if the platform default should be used. Example return value "UTF-8"
*/
public String getProjectEncoding();
/**
* @return the list of processor classes to execute
*/
public String getProcessor();
/**
* @return the processor path where the specified processor(s) can be found
*/
public String getProcessorPath();
}