@Override public String resolveType(final String type) { String original = type; String result = type; // Strip away any characters that might hinder the type matching process if (Types.isArray(result)) { original = Types.stripArray(result); result = Types.stripArray(result); } if (Types.isGeneric(result)) { original = Types.stripGenerics(result); result = Types.stripGenerics(result); } if (Types.isPrimitive(result)) { return result; } // Check for direct import matches first since they are the fastest and least work-intensive if (Types.isSimpleName(result)) { if (!hasImport(type) && Types.isJavaLang(type)) { result = "java.lang." + result; } if (result.equals(original)) { for (Import imprt : getImports()) { if (Types.areEquivalent(result, imprt.getQualifiedName())) { result = imprt.getQualifiedName(); break; } } } } // If we didn't match any imports directly, we might have a wild-card/on-demand import. if (Types.isSimpleName(result)) { for (Import imprt : getImports()) { if (imprt.isWildcard()) { // TODO warn if no wild-card resolvers are configured // TODO Test wild-card/on-demand import resolving for (WildcardImportResolver r : getImportResolvers()) { result = r.resolve(this, result); if (Types.isQualified(result)) break; } } } } // No import matches and no wild-card/on-demand import matches means this class is in the same // package. if (Types.isSimpleName(result)) { if (getPackage() != null) result = getPackage() + "." + result; } return result; }
@Command("list-imports") @RequiresResource(JavaResource.class) public void listImports(final PipeOut out) throws FileNotFoundException { List<Import> imports = resource.getJavaSource().getImports(); for (Import i : imports) { String str = "import " + (i.isStatic() ? "static " : "") + i.getQualifiedName() + ";"; str = JavaColorizer.format(out, str); out.println(str); } }
@Override public O removeImport(final String name) { for (Import i : getImports()) { if (i.getQualifiedName().equals(name)) { removeImport(i); break; } } return (O) this; }
@Override public Import getImport(final String className) { List<Import> imports = getImports(); for (Import imprt : imports) { if (imprt.getQualifiedName().equals(className) || imprt.getSimpleName().equals(className)) { return imprt; } } return null; }
@Override public boolean hasImport(final Import imprt) { return hasImport(imprt.getQualifiedName()); }
@Override public Import getImport(final Import imprt) { return getImport(imprt.getQualifiedName()); }
@Override public Import addImport(final Import imprt) { return addImport(imprt.getQualifiedName()).setStatic(imprt.isStatic()); }