Mercurial > hg > graal-jvmci-8
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 } |