# HG changeset patch # User Christian Humer # Date 1361797183 -3600 # Node ID c8e1c5abf6ed2e785ae270ffd99f59bffc42d14a # Parent a4a8909a6096e8e21d781f75653cfbd962d437db Organize imports now handles generic and array types properly. diff -r a4a8909a6096 -r c8e1c5abf6ed graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/codewriter/OrganizedImports.java --- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/codewriter/OrganizedImports.java Mon Feb 25 13:14:39 2013 +0100 +++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/codewriter/OrganizedImports.java Mon Feb 25 13:59:43 2013 +0100 @@ -63,19 +63,71 @@ } public String useImport(TypeMirror type) { - String simpleName = getSimpleName(type); - TypeMirror usedByType = simpleNamesUsed.get(type); + switch (type.getKind()) { + case BOOLEAN: + case BYTE: + case CHAR: + case DOUBLE: + case FLOAT: + case SHORT: + case INT: + case LONG: + case VOID: + return Utils.getSimpleName(type); + case DECLARED: + return createDeclaredTypeName((DeclaredType) type); + case ARRAY: + return useImport(((ArrayType) type).getComponentType()) + "[]"; + case WILDCARD: + return createWildcardName((WildcardType) type); + case TYPEVAR: + return "?"; + default: + throw new RuntimeException("Unknown type specified " + type.getKind() + " mirror: " + type); + } + } + + private String createWildcardName(WildcardType type) { + StringBuilder b = new StringBuilder(); + if (type.getExtendsBound() != null) { + b.append("? extends ").append(useImport(type.getExtendsBound())); + } else if (type.getSuperBound() != null) { + b.append("? super ").append(useImport(type.getExtendsBound())); + } + return b.toString(); + } + + private String createDeclaredTypeName(DeclaredType type) { + String name = type.asElement().getSimpleName().toString(); + + TypeMirror usedByType = simpleNamesUsed.get(name); if (usedByType == null) { - simpleNamesUsed.put(simpleName, type); + simpleNamesUsed.put(name, type); usedByType = type; - } else if (!typeEquals(type, usedByType)) { - // we need a qualified name - return getQualifiedName(type); } - // we can use the simple name - addUsage(type, importUsage); - return simpleName; + if (typeEquals(type, usedByType)) { + addUsage(type, importUsage); + } else { + name = getQualifiedName(type); + } + + if (type.getTypeArguments().size() == 0) { + return name; + } + + StringBuilder b = new StringBuilder(name); + b.append("<"); + if (type.getTypeArguments().size() > 0) { + for (int i = 0; i < type.getTypeArguments().size(); i++) { + b.append(useImport(type.getTypeArguments().get(i))); + if (i < type.getTypeArguments().size() - 1) { + b.append(", "); + } + } + } + b.append(">"); + return b.toString(); } public String useStaticFieldImport(TypeMirror type, String fieldName) {