blob: d87a697f6dfae8915db70f0a17821a650ff19915 [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.royale.compiler.projects;
import java.io.File;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.royale.compiler.common.IFileSpecificationGetter;
import org.apache.royale.compiler.units.ICompilationUnit;
import org.apache.royale.compiler.units.IInvisibleCompilationUnit;
import org.apache.royale.swc.ISWC;
/**
* Base interface for all project types that use a source manager and library
* manager to create ICompilationUnits.
*/
public interface IASProject extends ICompilerProject
{
/**
* Sets the source path for the project. Calling this method can invalidate
* a significant amount of incremental compilation results.
*
* @param path List of directories that should be searched for source files.
*/
void setSourcePath(List<File> path);
/**
* Get the list of source paths set.
*
* @return a list of source paths.
*/
List<File> getSourcePath();
/**
* Sets the include sources list for the project. Source files in this list
* are unconditionally added to the symbol table. Calling this method can
* invalidate a significant amount of incremental compilation results.
*
* @param files
*/
void setIncludeSources(File[] files) throws InterruptedException;
/**
* Adds a new include source file to the project. Include source file's are
* files that should always be compiled into the project.
*
* @param file File to add.
* @throws InterruptedException
*/
void addIncludeSourceFile(File file) throws InterruptedException;
/**
* Adds a new include source file to the project. Include source file's are
* files that should always be compiled into the project.
*
* @param file File to add.
* @param overrideSourcePath Set to true to add the file to the source list
* even if it exists on the source path.
* @throws InterruptedException
*/
void addIncludeSourceFile(File file, boolean overrideSourcePath) throws InterruptedException;
/**
* Removes an include source file to the project.
*
* @see #addIncludeSourceFile(File)
* @param file File to remove.
* @throws InterruptedException
*/
void removeIncludeSourceFile(File file) throws InterruptedException;
/**
* Attach the source directory to a SWC library.
*
* @param library SWC library
* @param sourceDir directory that contains the source for the SWC library
*/
void attachInternalLibrarySourcePath(File library, File sourceDir);
/**
* Attach the source directory to an external SWC library.
*
* @param library SWC library
* @param sourceDir directory that contains the source for the SWC library
*/
void attachExternalLibrarySourcePath(File library, File sourceDir);
/**
* Get the Directory for the specified library.
*
* @return Full path to the specified library, or
* null if there is no attached source directory for the specified library.
*/
String getAttachedSourceDirectory(String libraryFilename);
/**
* Removes any calculated data related to a collection of libraries. Used by incremental
* compilation when swc files have been modified.
*
* @param swcFiles Collection of SWC files to invalidate.
* @return true if a library referenced by this project was invalidated
*/
boolean invalidateLibraries(Collection<File> swcFiles);
/**
* Removes any calculated data related to a SWC. Used by incremental
* compilation when library projects have changed
*
* @param swc ISWC to invalidate
*/
void invalidateLibrary(ISWC swc);
/**
* @return Set of projects which depend on this project
*/
Set<IASProject> getDependingProjects();
/**
* Adds a new project dependency to this project.
*
* @param project {@link IASProject} dependency to add to this project.
* @param swcFilename The SWC filename the project dependency generates
*/
void addProjectDependeny(IASProject project, String swcFilename);
/**
* Removes a project dependency from this project.
*
* @param project {@link IASProject} to remove from this projects dependencies.
*/
void removeProjectDependeny(IASProject project);
/**
* Resets the set of projects that this project depends on.
*
* @param dependencies The new map of {@link IASProject}s that
* this project depends on. The value to the map is the SWC filename the
* IASProject generates.
*/
void setDependencies(Map<IASProject, String> dependencies);
/**
* The libraries used to compile source files in a project. The order of
* the libraries sets the priority of class definitions when name and the
* timestamp of a class are equal. Libraries at the beginning of the
* list have a higher priority than libraries at the end of the list.
*
* @param libraries The libraries in priority order, may not be null.
*/
void setLibraries(List<File> libraries);
/**
* The libraries available to compiler source in this project.
*
* @return the libraries are returned in priority order from highest to
* lowest. The list may not be modified.
*/
List<ISWC> getLibraries();
/**
* Returns the compatibility version encoded as an integer.
* @return the compatibility version encoded as an integer. Null if
* compatibility version has not been set.
*/
Integer getCompatibilityVersion();
/**
* Returns the compatibility version encoded as a string.
* @return the compatibility version encoded as a string. Null if
* compatibility version has not been set.
*/
String getCompatibilityVersionString();
/**
* Creates an {@link IInvisibleCompilationUnit} for the specified absolute
* file name.
*
* @param absoluteFileName The name of the file to create an
* {@link IInvisibleCompilationUnit} for.
* @param fileSpecGetter A {@link IFileSpecificationGetter} that can be used
* by the new {@link IInvisibleCompilationUnit} to open files.
* @return A new {@link IInvisibleCompilationUnit} or null if the specified.
* file name is not found on the current source path of this
* {@link IASProject}.
*/
IInvisibleCompilationUnit createInvisibleCompilationUnit(String absoluteFileName, IFileSpecificationGetter fileSpecGetter);
/**
* Creates an {@link IInvisibleCompilationUnit} for the specified absolute
* file name, specifying a qualified name.
*
* This version of createInvisibleCompilationUnit() is called when creating a
* {@link IInvisibleCompilationUnit} for a source file which isn't contained
* within the source path, as the qualified name of the {@link IInvisibleCompilationUnit}
* to be created can't be computed automatically. This happens when creating a
* {@link IInvisibleCompilationUnit} for an external file.
*
* @param rootSourceFile The name of the file to create an
* {@link IInvisibleCompilationUnit} for.
* @param fileSpecGetter A {@link IFileSpecificationGetter} that can be used
* by the new {@link IInvisibleCompilationUnit} to open files.
* @param qName The qualified name of the {@link IInvisibleCompilationUnit}
* @return A new {@link IInvisibleCompilationUnit} or null if the specified.
* file name is not found on the current source path of this
* {@link IASProject}.
*/
IInvisibleCompilationUnit createInvisibleCompilationUnit(String rootSourceFile, IFileSpecificationGetter fileSpecGetter, String qName);
/**
* Determines if the specified file extension ( without the dot eg:
* {@code as}, not {@code .as} ) corresponds to a source file type that this
* project can create {@link ICompilationUnit}s for.
*
* @param fileExtension The file extension to check without a dot, for
* example {@code mxml}.
* @return true if the file type associated with the specified file
* extension is supported by this project, false otherwise.
*/
boolean isSupportedSourceFileType(String fileExtension);
/**
* Iterate through the source path list looking for the specified file.
*
* @param file filename to look for
* @return Absolute path to the file, or null if file not found
*/
String getSourceFileFromSourcePath(String file);
}