/* * 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.
*/ /* * Contributor(s): Thomas Ball
*/
/** * Closure: report all classes which this file references in one * way or another. Note: this utility won't find classes which are * dynamically loaded. * * @author Thomas Ball
*/ publicclass Closure {
String thisClass;
Set<String> closure;
Closure(String spec) {
thisClass = spec;
}
void buildClosure(boolean includeJDK) throws IOException { if (closure != null) return;
closure = new HashSet<String>();
Set<String> visited = new HashSet<String>();
Stack<ClassName> stk = new Stack<ClassName>();
ClassName thisCN = ClassName.getClassName(thisClass.replace('.', '/'));
stk.push(thisCN);
visited.add(thisCN.getExternalName());
while (!stk.empty()) { // Add class to closure.
ClassName cn = (ClassName)stk.pop();
InputStream is = findClassStream(cn.getType()); if (is == null) {
System.err.println("couldn't find class: " +
cn.getExternalName()); continue;
}
ClassFile cfile = new ClassFile(is);
closure.add(cfile.getName().getExternalName());
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.