diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/depend/DependencyAnalyzer.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/depend/DependencyAnalyzer.java | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/depend/DependencyAnalyzer.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/depend/DependencyAnalyzer.java new file mode 100644 index 00000000..1415e2e4 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/depend/DependencyAnalyzer.java @@ -0,0 +1,130 @@ +/* + * 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.tools.ant.util.depend; +import java.io.File; +import java.io.IOException; +import java.util.Enumeration; + +import org.apache.tools.ant.types.Path; + +/** + * A dependency analyzer analyzes dependencies between Java classes to + * determine the minimal set of classes which are required by a set of + * "root" classes. Different implementations of this interface can + * use different strategies and libraries to determine the required set. For + * example, some analyzers will use class files while others might use + * source files. Analyzer specific configuration is catered for through a + * generic configure method + * + */ +public interface DependencyAnalyzer { + /** + * Add a source path to the source path used by this analyzer. The + * elements in the given path contain the source files for the classes + * being analyzed. Not all analyzers will use this information. + * + * @param sourcePath The Path instance specifying the source path + * elements. + */ + void addSourcePath(Path sourcePath); + + /** + * Add a classpath to the classpath being used by the analyzer. The + * classpath contains the binary classfiles for the classes being + * analyzed The elements may either be the directories or jar files.Not + * all analyzers will use this information. + * + * @param classpath the Path instance specifying the classpath elements + */ + void addClassPath(Path classpath); + + /** + * Add a root class. The root classes are used to drive the + * determination of dependency information. The analyzer will start at + * the root classes and add dependencies from there. + * + * @param classname the name of the class in Java dot notation. + */ + void addRootClass(String classname); + + /** + * Get the list of files in the file system upon which the root classes + * depend. The files will be either the classfiles or jar files upon + * which the root classes depend. + * + * @return an enumeration of File instances. + */ + Enumeration<File> getFileDependencies(); + + /** + * Get the list of classes upon which root classes depend. This is a + * list of Java classnames in dot notation. + * + * @return an enumeration of Strings, each being the name of a Java + * class in dot notation. + */ + Enumeration<String> getClassDependencies(); + + + /** + * Reset the dependency list. This will reset the determined + * dependencies and the also list of root classes. + */ + void reset(); + + /** + * Configure an aspect of the analyzer. The set of aspects that are + * supported is specific to each analyzer instance. + * + * @param name the name of the aspect being configured + * @param info the configuration information. + */ + void config(String name, Object info); + + /** + * Set the closure flag. If this flag is true the analyzer will traverse + * all class relationships until it has collected the entire set of + * direct and indirect dependencies + * + * @param closure true if dependencies should be traversed to determine + * indirect dependencies. + */ + void setClosure(boolean closure); + + + /** + * Get the file that contains the class definition + * + * @param classname the name of the required class + * @return the file instance, zip or class, containing the + * class or null if the class could not be found. + * @exception IOException if the files in the classpath cannot be read. + */ + File getClassContainer(String classname) throws IOException; + + /** + * Get the file that contains the class source. + * + * @param classname the name of the required class + * @return the file instance, zip or java, containing the + * source or null if the source for the class could not be found. + * @exception IOException if the files in the sourcepath cannot be read. + */ + File getSourceContainer(String classname) throws IOException; +} + |