001: /*
002: * Spoon - http://spoon.gforge.inria.fr/
003: * Copyright (C) 2006 INRIA Futurs <renaud.pawlak@inria.fr>
004: *
005: * This software is governed by the CeCILL-C License under French law and
006: * abiding by the rules of distribution of free software. You can use, modify
007: * and/or redistribute the software under the terms of the CeCILL-C license as
008: * circulated by CEA, CNRS and INRIA at http://www.cecill.info.
009: *
010: * This program is distributed in the hope that it will be useful, but WITHOUT
011: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
012: * FITNESS FOR A PARTICULAR PURPOSE. See the CeCILL-C License for more details.
013: *
014: * The fact that you are presently reading this means that you have had
015: * knowledge of the CeCILL-C license and that you accept its terms.
016: */
017:
018: package spoon.processing;
019:
020: import java.io.File;
021: import java.io.IOException;
022: import java.util.List;
023: import java.util.Set;
024:
025: import spoon.support.builder.CtResource;
026:
027: /**
028: * This interface defines the API to build a Spoon meta-model from input sources
029: * given as files. You should add your sources, and use {@link #build()}
030: * to create the Spoon meta-model. Once the meta-model is built and stored in
031: * the factory, it can be processed by using a
032: * {@link spoon.processing.ProcessingManager}. As an example of use, take a
033: * look at the {@link spoon.Launcher} implementation.
034: */
035: public interface Builder extends FactoryAccessor {
036: /**
037: * Adds a file/directory to be built. By default, the files could be Java
038: * source files or Jar files. Directories are processed recursively.
039: *
040: * @param source
041: * file or directory to add
042: */
043: void addInputSource(File source) throws IOException;
044:
045: /**
046: * Adds a file/directory (as a CtResource) to be built. By default, the
047: * files could be Java source files or Jar files. Directories are processed
048: * recursively.
049: *
050: * @param source
051: * file or directory to add
052: */
053: void addInputSource(CtResource source) throws IOException;
054:
055: /**
056: * Gets all the files/directories given as input sources to this builder
057: * (see {@link #addInputSource(File)}).
058: */
059: Set<File> getInputSources();
060:
061: /**
062: * Adds a file/directory to be used to build templates. By default, the
063: * files should be Java source files or Jar files containing the sources.
064: * Directories are processed recursively. Templates are set apart from the
065: * program to be processed for logical reasons. However, if a template was
066: * needed to be processed, it could be added as an input source.
067: *
068: * @param source
069: * file or directory to add
070: */
071: void addTemplateSource(File source) throws IOException;
072:
073: /**
074: * Adds a file/directory (as a CtResource) to be used to build templates. By
075: * default, the files should be Java source files or Jar files containing
076: * the sources. Directories are processed recursively. Templates are set
077: * apart from the program to be processed for logical reasons. However, if a
078: * template was needed to be processed, it could be added as an input
079: * source.
080: *
081: * @param source
082: * file or directory to add
083: */
084: void addTemplateSource(CtResource source) throws IOException;
085:
086: /**
087: * Gets all the files/directories given as template sources to this builder
088: * (see {@link #addTemplateSource(File)}).
089: */
090: Set<File> getTemplateSources();
091:
092: /**
093: * Builds the program's model with the current factory and stores the result
094: * into this factory. Note that this method can only be used once on a given
095: * factory. If more attempts are made, it throws an exception.
096: *
097: * @return true if the Java was successfully compiled with the core Java
098: * compiler, false if some errors were encountered while compiling
099: *
100: * @exception Exception
101: * when a building problem occurs
102: */
103: boolean build() throws Exception;
104:
105: /**
106: * This method should be called before starting the compilation in order to
107: * perform plateform specific initializations. Override the method in
108: * subclasses do add new initializations.
109: */
110: void initCompiler();
111:
112: /**
113: * Gets the list of problems that may have been reported by the compiler
114: * when building the model.
115: */
116: List<String> getProblems();
117:
118: }
|