in ti/phase2/jars/compiler-xdoclet/src/java/org/apache/ti/compiler/xdoclet/XDocletCompilerUtils.java [88:160]
private static Object resolveTypeInstanceOrTypeDecl(String typeName, boolean allowUnknownType, XClass currentClass,
boolean returnTypeInstance) {
int arrayDimensions = 0;
if (typeName.endsWith(".class")) typeName = typeName.substring(0, typeName.length() - 6);
while (typeName.endsWith("[]")) {
typeName = typeName.substring(0, typeName.length() - 2);
++arrayDimensions;
}
if (currentClass == null) currentClass = PageFlowDocletSubTask.get().getCurrentSourceClass();
XJavaDoc xJavaDoc = currentClass.getXJavaDoc();
XClass originalResolvedType = getXClass(typeName, xJavaDoc);
XClass attemptedResolvedType = originalResolvedType;
if (isUnknownClass(attemptedResolvedType)) {
attemptedResolvedType = getXClass("java.lang." + typeName, xJavaDoc);
}
if (isUnknownClass(attemptedResolvedType)) {
// See if it was an imported class.
List importedClasses = currentClass.getImportedClasses();
String dotPrepended = '.' + typeName;
for (Iterator i = importedClasses.iterator(); i.hasNext();) {
XClass importedClass = (XClass) i.next();
if (importedClass.getQualifiedName().endsWith(dotPrepended)) {
attemptedResolvedType = getXClass(importedClass.getQualifiedName(), xJavaDoc);
break;
}
}
}
if (isUnknownClass(attemptedResolvedType)) {
// See if it was in an imported package.
List importedPackages = currentClass.getImportedPackages();
String dotPrepended = '.' + typeName;
for (Iterator i = importedPackages.iterator(); i.hasNext();) {
XPackage importedPackage = (XPackage) i.next();
XClass implicitImportedClass = getXClass(importedPackage.getName() + dotPrepended, xJavaDoc);
if (! isUnknownClass(implicitImportedClass)) {
attemptedResolvedType = implicitImportedClass;
break;
}
}
}
if (isUnknownClass(attemptedResolvedType)) {
// Try it with the full outer classname appended.
String outerClassName = currentClass.getQualifiedName();
attemptedResolvedType = getXClass(outerClassName + '.' + typeName, xJavaDoc);
}
if (isUnknownClass(attemptedResolvedType)) {
// Finally, it may be of the form <outer-class-short-name>.<inner-class-name>
String outerClassName = currentClass.getQualifiedName();
int lastDot = outerClassName.lastIndexOf('.');
outerClassName = lastDot != -1 ? outerClassName.substring(0, lastDot) : outerClassName;
attemptedResolvedType = getXClass(outerClassName + '.' + typeName, xJavaDoc);
}
if (isUnknownClass(attemptedResolvedType)) {
if (! allowUnknownType) return null;
if (returnTypeInstance) return WrapperFactory.get().getTypeInstance(originalResolvedType);
return WrapperFactory.get().getTypeDeclaration(originalResolvedType);
}
if (returnTypeInstance) return WrapperFactory.get().getTypeInstance(attemptedResolvedType, arrayDimensions);
return WrapperFactory.get().getTypeDeclaration(attemptedResolvedType);
}