starting to work on type resolution

git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@337 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
Tom Copeland
2002-07-13 00:24:19 +00:00
parent 59ee7c0fb1
commit 06862eaa4f
2 changed files with 87 additions and 0 deletions

View File

@ -0,0 +1,33 @@
/*
* User: tom
* Date: Jul 12, 2002
* Time: 8:10:10 PM
*/
package test.net.sourceforge.pmd;
import junit.framework.TestCase;
import net.sourceforge.pmd.TypeSet;
public class TypeSetTest extends TestCase {
public TypeSetTest(String name) {
super(name);
}
public void testASTCompilationUnitPackage() {
TypeSet t = new TypeSet();
t.setASTCompilationUnitPackage("java.lang.");
assertEquals("java.lang.", t.getASTCompilationUnitPackage());
}
public void testAddImport() {
TypeSet t = new TypeSet();
t.addImport("java.io.File");
}
public void testFindClass() throws Throwable {
TypeSet t = new TypeSet();
t.setASTCompilationUnitPackage("net.sourceforge.pmd.");
Class clazz = t.findClass("String");
assertEquals(String.class, clazz);
}
}

View File

@ -0,0 +1,54 @@
/*
* User: tom
* Date: Jul 12, 2002
* Time: 8:08:53 PM
*/
package net.sourceforge.pmd;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
/**
* Keeps track of the types encountered in a ASTCompilationUnit
*/
public class TypeSet {
private String pkg;
private Set imports = new HashSet();
public void setASTCompilationUnitPackage(String pkg) {
this.pkg = pkg;
}
public String getASTCompilationUnitPackage() {
return pkg;
}
public void addImport(String importString) {
imports.add(importString);
}
public Class findClass(String name) throws ClassNotFoundException {
// is it explicitly imported?
for (Iterator i = imports.iterator(); i.hasNext();) {
String importStmt = (String)i.next();
if (importStmt.endsWith(name)) {
return Class.forName(name);
}
}
// is it in the current package?
try {
return Class.forName(pkg + name);
} catch (ClassNotFoundException cnfe) {
}
// is it in an implicity imported package - i.e., java.lang?
// TODO reference the relevant JLS section
try {
return Class.forName("java.lang." + name);
} catch (ClassNotFoundException cnfe) {
}
throw new ClassNotFoundException("Type " + name + " not found");
}
}