84 |
return filter ? filteredFields : unfilteredFields; |
return filter ? filteredFields : unfilteredFields; |
85 |
} |
} |
86 |
|
|
87 |
|
private static Set primitiveNames; |
88 |
|
static { |
89 |
|
primitiveNames = new HashSet(); |
90 |
|
primitiveNames.add("int"); |
91 |
|
primitiveNames.add("long"); |
92 |
|
primitiveNames.add("char"); |
93 |
|
primitiveNames.add("short"); |
94 |
|
primitiveNames.add("byte"); |
95 |
|
primitiveNames.add("float"); |
96 |
|
primitiveNames.add("double"); |
97 |
|
primitiveNames.add("boolean"); |
98 |
|
} |
99 |
|
|
100 |
|
private Map findClassCache = new HashMap(); |
101 |
|
|
102 |
|
public ClassDoc findClass(String className) |
103 |
|
{ |
104 |
|
String qualifiedName = Main.getRootDoc().resolveClassName(className, this); |
105 |
|
ClassDoc rc=Main.getRootDoc().classNamed(qualifiedName); |
106 |
|
|
107 |
|
if (null == rc) { |
108 |
|
for (ClassDoc cdi=this; cdi!=null; cdi=cdi.containingClass()) { |
109 |
|
for (ClassDoc sdi=cdi; sdi!=null; sdi=sdi.superclass()) { |
110 |
|
if (sdi instanceof ClassDocProxy) { |
111 |
|
ClassDoc realClass = Main.getRootDoc().classNamed(sdi.qualifiedName()); |
112 |
|
if (null != realClass) { |
113 |
|
sdi = realClass; |
114 |
|
} |
115 |
|
} |
116 |
|
rc=Main.getRootDoc().classNamed(sdi.qualifiedName()+"."+className); |
117 |
|
if (rc!=null) return rc; |
118 |
|
} |
119 |
|
} |
120 |
|
} |
121 |
|
|
122 |
|
return rc; |
123 |
|
} |
124 |
|
|
125 |
|
|
126 |
/** |
/** |
127 |
* Find a class within the context of this class. |
* Find a class within the context of this class. |
128 |
* |
* |
129 |
* @todo check this against java lang spec. (class id hiding) |
* @todo check this against java lang spec. (class id hiding) |
130 |
*/ |
*/ |
131 |
public ClassDoc findClass(String className) { |
public ClassDoc _findClass(String className) { |
132 |
|
|
133 |
//Debug.log(9,"findClass("+className+")"); |
//Debug.log(9,"findClass("+className+")"); |
134 |
ClassDoc rc; |
ClassDoc rc; |
148 |
rc=Main.getRootDoc().classNamed(importedClasses[i].qualifiedName()); |
rc=Main.getRootDoc().classNamed(importedClasses[i].qualifiedName()); |
149 |
if (rc!=null) return rc; |
if (rc!=null) return rc; |
150 |
} |
} |
151 |
|
if (null == importedClasses[i]) { |
152 |
|
System.err.println("importedClasses[" + i + "]=null"); |
153 |
|
} |
154 |
|
else if (null == className) { |
155 |
|
System.err.println("className=null"); |
156 |
|
} |
157 |
if (className.startsWith(importedClasses[i].name()+".")) { |
if (className.startsWith(importedClasses[i].name()+".")) { |
158 |
//Debug.log(9,"trying (by inner class) "+importedClasses[i].qualifiedName()+className.substring(importedClasses[i].name().length())); |
//Debug.log(9,"trying (by inner class) "+importedClasses[i].qualifiedName()+className.substring(importedClasses[i].name().length())); |
159 |
rc=Main.getRootDoc().classNamed(importedClasses[i].qualifiedName()+className.substring(importedClasses[i].name().length())); |
rc=Main.getRootDoc().classNamed(importedClasses[i].qualifiedName()+className.substring(importedClasses[i].name().length())); |
325 |
PackageDoc containingPackage, |
PackageDoc containingPackage, |
326 |
ClassDoc[] importedClasses, |
ClassDoc[] importedClasses, |
327 |
PackageDoc[] importedPackages, |
PackageDoc[] importedPackages, |
328 |
char[] source, int startIndex, int endIndex) throws ParseException, IOException { |
char[] source, int startIndex, int endIndex, |
329 |
|
List importStatementList) throws ParseException, IOException { |
330 |
|
|
331 |
String superclassName = "java.lang.Object"; |
String superclassName = "java.lang.Object"; |
332 |
|
|
335 |
importedClasses, |
importedClasses, |
336 |
importedPackages, |
importedPackages, |
337 |
null); |
null); |
338 |
|
rc.setImportStatementList(importStatementList); |
339 |
List implementedInterfaces = new ArrayList(); |
List implementedInterfaces = new ArrayList(); |
340 |
|
|
341 |
String word=""; |
String word=""; |
453 |
|
|
454 |
ClassDoc[] interfaces=new ClassDoc[implementedInterfaces.size()]; |
ClassDoc[] interfaces=new ClassDoc[implementedInterfaces.size()]; |
455 |
for (int i=0; i<interfaces.length; ++i) { |
for (int i=0; i<interfaces.length; ++i) { |
456 |
interfaces[i]=new ClassDocProxy((String)implementedInterfaces.get(i), rc); |
interfaces[i]=new ClassDocProxy((String)implementedInterfaces.get(i), rc); |
457 |
} |
} |
458 |
rc.setInterfaces(interfaces); |
rc.setInterfaces(interfaces); |
459 |
|
|
801 |
public ExecutableMemberDoc findExecutableRec(String nameAndSignature) { |
public ExecutableMemberDoc findExecutableRec(String nameAndSignature) { |
802 |
|
|
803 |
ExecutableMemberDoc rc; |
ExecutableMemberDoc rc; |
804 |
for (ClassDocImpl cdi=this; cdi!=null; ) { |
for (ClassDoc cdi=this; cdi!=null; ) { |
805 |
rc=cdi.findMethod(nameAndSignature); |
rc=findMethod(cdi, nameAndSignature); |
806 |
if (rc!=null) return rc; |
if (rc!=null) return rc; |
807 |
rc=cdi.findConstructor(nameAndSignature); |
rc=findConstructor(cdi, nameAndSignature); |
808 |
if (rc!=null) return rc; |
if (rc!=null) return rc; |
809 |
|
|
810 |
ClassDoc superclass = cdi.superclass(); |
ClassDoc superclass = cdi.superclass(); |
811 |
if (null == superclass) { |
if (null == superclass) { |
812 |
break; |
break; |
813 |
} |
} |
|
else if (superclass instanceof ClassDocImpl) { |
|
|
cdi=(ClassDocImpl) superclass; |
|
|
} |
|
814 |
else { |
else { |
815 |
Main.getRootDoc().printWarning("In context "+qualifiedName()+": superclass "+superclass.qualifiedName()+" hasn't been loaded."); |
cdi = superclass; |
|
break; |
|
816 |
} |
} |
817 |
} |
} |
818 |
return null; |
return null; |
819 |
} |
} |
820 |
|
|
821 |
public ConstructorDoc findConstructor(String nameAndSignature) { |
public static ConstructorDoc findConstructor(ClassDoc classDoc, String nameAndSignature) { |
822 |
int ndx=nameAndSignature.indexOf('('); |
int ndx=nameAndSignature.indexOf('('); |
823 |
if (ndx<=0) |
if (ndx<=0) |
824 |
return null; |
return null; |
825 |
else { |
else { |
826 |
String fullSignature = resolveSignature(nameAndSignature.substring(ndx)); |
String fullSignature = resolveSignature(classDoc, nameAndSignature.substring(ndx)); |
827 |
return findConstructor(nameAndSignature.substring(0,ndx), |
return findConstructor(classDoc, |
828 |
|
nameAndSignature.substring(0,ndx), |
829 |
fullSignature); |
fullSignature); |
830 |
} |
} |
831 |
} |
} |
832 |
|
|
833 |
public ConstructorDoc findConstructor(String name, String signature) { |
public static ConstructorDoc findConstructor(ClassDoc classDoc, String name, String signature) { |
834 |
|
ConstructorDoc[] filteredConstructors = classDoc.constructors(true); |
835 |
if (null != filteredConstructors) { |
if (null != filteredConstructors) { |
836 |
for (int i=0; i<filteredConstructors.length; ++i) { |
for (int i=0; i<filteredConstructors.length; ++i) { |
837 |
ConstructorDoc constructor = filteredConstructors[i]; |
ConstructorDoc constructor = filteredConstructors[i]; |
842 |
return null; |
return null; |
843 |
} |
} |
844 |
|
|
845 |
public MethodDoc findMethod(String nameAndSignature) { |
public static MethodDoc findMethod(ClassDoc classDoc, String nameAndSignature) { |
846 |
int ndx=nameAndSignature.indexOf('('); |
int ndx=nameAndSignature.indexOf('('); |
847 |
if (ndx<=0) { |
if (ndx<=0) { |
848 |
return null; |
return null; |
849 |
} |
} |
850 |
else { |
else { |
851 |
String name = nameAndSignature.substring(0,ndx); |
String name = nameAndSignature.substring(0,ndx); |
852 |
String fullSignature = resolveSignature(nameAndSignature.substring(ndx)); |
String fullSignature = resolveSignature(classDoc, nameAndSignature.substring(ndx)); |
853 |
return findMethod(name, fullSignature); |
return findMethod(classDoc, name, fullSignature); |
854 |
} |
} |
855 |
} |
} |
856 |
|
|
857 |
private String resolveSignature(String signature) |
private static String resolveSignature(ClassDoc classDoc, String signature) |
858 |
{ |
{ |
859 |
signature = signature.substring(1, signature.length() - 1).trim(); |
signature = signature.substring(1, signature.length() - 1).trim(); |
860 |
if (0 == signature.length()) { |
if (0 == signature.length()) { |
870 |
} |
} |
871 |
String dim = type.substring(ndx); |
String dim = type.substring(ndx); |
872 |
type = type.substring(0, ndx); |
type = type.substring(0, ndx); |
873 |
ClassDoc typeClass = findClass(type); |
ClassDoc typeClass = classDoc.findClass(type); |
874 |
if (fullSignature.length() > 1) { |
if (fullSignature.length() > 1) { |
875 |
fullSignature.append(","); |
fullSignature.append(","); |
876 |
} |
} |
886 |
return fullSignature.toString(); |
return fullSignature.toString(); |
887 |
} |
} |
888 |
|
|
889 |
public MethodDoc findMethod(String name, String signature) { |
public static MethodDoc findMethod(ClassDoc classDoc, String name, String signature) { |
890 |
|
MethodDoc[] filteredMethods = classDoc.methods(true); |
891 |
if (null != filteredMethods) { |
if (null != filteredMethods) { |
892 |
for (int i=0; i<filteredMethods.length; ++i) { |
for (int i=0; i<filteredMethods.length; ++i) { |
893 |
MethodDoc method = filteredMethods[i]; |
MethodDoc method = filteredMethods[i]; |
1066 |
return 1; |
return 1; |
1067 |
} |
} |
1068 |
} |
} |
1069 |
|
|
1070 |
|
private List importStatementList; |
1071 |
|
|
1072 |
|
public void setImportStatementList(List importStatementList) |
1073 |
|
{ |
1074 |
|
this.importStatementList = new LinkedList(); |
1075 |
|
this.importStatementList.addAll(importStatementList); |
1076 |
|
} |
1077 |
|
|
1078 |
|
public List getImportSpecifierList() |
1079 |
|
{ |
1080 |
|
return importStatementList; |
1081 |
|
} |
1082 |
} |
} |
1083 |
|
|