comparison graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/codewriter/OrganizedImports.java @ 7857:c8e1c5abf6ed

Organize imports now handles generic and array types properly.
author Christian Humer <christian.humer@gmail.com>
date Mon, 25 Feb 2013 13:59:43 +0100
parents 5e3d1a68664e
children 10d37f893471
comparison
equal deleted inserted replaced
7856:a4a8909a6096 7857:c8e1c5abf6ed
61 topLevelClass.accept(resolver, null); 61 topLevelClass.accept(resolver, null);
62 return organized; 62 return organized;
63 } 63 }
64 64
65 public String useImport(TypeMirror type) { 65 public String useImport(TypeMirror type) {
66 String simpleName = getSimpleName(type); 66 switch (type.getKind()) {
67 TypeMirror usedByType = simpleNamesUsed.get(type); 67 case BOOLEAN:
68 case BYTE:
69 case CHAR:
70 case DOUBLE:
71 case FLOAT:
72 case SHORT:
73 case INT:
74 case LONG:
75 case VOID:
76 return Utils.getSimpleName(type);
77 case DECLARED:
78 return createDeclaredTypeName((DeclaredType) type);
79 case ARRAY:
80 return useImport(((ArrayType) type).getComponentType()) + "[]";
81 case WILDCARD:
82 return createWildcardName((WildcardType) type);
83 case TYPEVAR:
84 return "?";
85 default:
86 throw new RuntimeException("Unknown type specified " + type.getKind() + " mirror: " + type);
87 }
88 }
89
90 private String createWildcardName(WildcardType type) {
91 StringBuilder b = new StringBuilder();
92 if (type.getExtendsBound() != null) {
93 b.append("? extends ").append(useImport(type.getExtendsBound()));
94 } else if (type.getSuperBound() != null) {
95 b.append("? super ").append(useImport(type.getExtendsBound()));
96 }
97 return b.toString();
98 }
99
100 private String createDeclaredTypeName(DeclaredType type) {
101 String name = type.asElement().getSimpleName().toString();
102
103 TypeMirror usedByType = simpleNamesUsed.get(name);
68 if (usedByType == null) { 104 if (usedByType == null) {
69 simpleNamesUsed.put(simpleName, type); 105 simpleNamesUsed.put(name, type);
70 usedByType = type; 106 usedByType = type;
71 } else if (!typeEquals(type, usedByType)) { 107 }
72 // we need a qualified name 108
73 return getQualifiedName(type); 109 if (typeEquals(type, usedByType)) {
74 } 110 addUsage(type, importUsage);
75 111 } else {
76 // we can use the simple name 112 name = getQualifiedName(type);
77 addUsage(type, importUsage); 113 }
78 return simpleName; 114
115 if (type.getTypeArguments().size() == 0) {
116 return name;
117 }
118
119 StringBuilder b = new StringBuilder(name);
120 b.append("<");
121 if (type.getTypeArguments().size() > 0) {
122 for (int i = 0; i < type.getTypeArguments().size(); i++) {
123 b.append(useImport(type.getTypeArguments().get(i)));
124 if (i < type.getTypeArguments().size() - 1) {
125 b.append(", ");
126 }
127 }
128 }
129 b.append(">");
130 return b.toString();
79 } 131 }
80 132
81 public String useStaticFieldImport(TypeMirror type, String fieldName) { 133 public String useStaticFieldImport(TypeMirror type, String fieldName) {
82 return useStaticImport(type, fieldName, ambiguousStaticFields, declaredStaticFields); 134 return useStaticImport(type, fieldName, ambiguousStaticFields, declaredStaticFields);
83 } 135 }