comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TypeSystemParser.java @ 18783:7d67a33e1bbb

Truffle-DSL: made type name verification more robust. Added some tests. (GRAAL-468 #resolve)
author Christian Humer <christian.humer@gmail.com>
date Mon, 05 Jan 2015 20:23:22 +0100
parents 3ea386a1036f
children 18c0f02fa4d2
comparison
equal deleted inserted replaced
18782:3ea386a1036f 18783:7d67a33e1bbb
278 typeSystem.addError("Method starting with the pattern expect${typeName} must not be declared manually."); 278 typeSystem.addError("Method starting with the pattern expect${typeName} must not be declared manually.");
279 return false; 279 return false;
280 } 280 }
281 281
282 private static void verifyNamesUnique(TypeSystemData typeSystem) { 282 private static void verifyNamesUnique(TypeSystemData typeSystem) {
283 List<TypeData> types = typeSystem.getTypes(); 283 Set<String> usedNames = new HashSet<>();
284 for (int i = 0; i < types.size(); i++) { 284 for (TypeData type : typeSystem.getTypes()) {
285 for (int j = i + 1; j < types.size(); j++) { 285 String boxedName = ElementUtils.getSimpleName(type.getBoxedType());
286 String name1 = ElementUtils.getSimpleName(types.get(i).getBoxedType()); 286 String primitiveName = ElementUtils.getSimpleName(type.getPrimitiveType());
287 String name2 = ElementUtils.getSimpleName(types.get(j).getBoxedType()); 287 if (usedNames.contains(boxedName)) {
288 if (name1.equalsIgnoreCase(name2)) { 288 typeSystem.addError("Two types result in the same boxed name: %s.", boxedName);
289 typeSystem.addError("Two types result in the same name: %s, %s.", name1, name2); 289 } else if (usedNames.contains(primitiveName)) {
290 } 290 typeSystem.addError("Two types result in the same primitive name: %s.", primitiveName);
291 } 291 }
292 usedNames.add(boxedName);
293 usedNames.add(primitiveName);
292 } 294 }
293 } 295 }
294 } 296 }