changeset 11184:b7f90ff38d4b

Truffle-DSL: Added a useful message to type casts in generated type system classes. (GRAAL-355 #resolve)
author Christian Humer <christian.humer@gmail.com>
date Mon, 29 Jul 2013 19:20:33 +0200
parents 0f5ff66a949d
children 5daaa0821406
files graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/typesystem/TypeSystemCodeGenerator.java
diffstat 1 files changed, 8 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/typesystem/TypeSystemCodeGenerator.java	Mon Jul 29 18:46:43 2013 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/typesystem/TypeSystemCodeGenerator.java	Mon Jul 29 19:20:33 2013 +0200
@@ -77,7 +77,7 @@
         @Override
         public CodeTypeElement create(TypeSystemData typeSystem) {
             String name = typeName(typeSystem);
-            CodeTypeElement clazz = createClass(typeSystem, modifiers(PUBLIC), name, typeSystem.getTemplateType().asType(), false);
+            CodeTypeElement clazz = createClass(typeSystem, modifiers(PUBLIC, FINAL), name, typeSystem.getTemplateType().asType(), false);
 
             clazz.add(createConstructorUsingFields(modifiers(PROTECTED), clazz));
             CodeVariableElement singleton = createSingleton(clazz);
@@ -141,6 +141,11 @@
             CodeExecutableElement method = new CodeExecutableElement(modifiers(PUBLIC), getContext().getType(boolean.class), TypeSystemCodeGenerator.isTypeMethodName(type));
             method.addParameter(new CodeVariableElement(getContext().getType(Object.class), LOCAL_VALUE));
 
+            DeclaredType suppressWarnings = (DeclaredType) getContext().getType(SuppressWarnings.class);
+            CodeAnnotationMirror annotationMirror = new CodeAnnotationMirror(suppressWarnings);
+            annotationMirror.setElementValue(annotationMirror.findExecutableElement("value"), new CodeAnnotationValue("static-method"));
+            method.getAnnotationMirrors().add(annotationMirror);
+
             CodeTreeBuilder body = method.createBuilder();
             body.startReturn().instanceOf(LOCAL_VALUE, type.getBoxedType()).end();
 
@@ -156,7 +161,8 @@
             method.addParameter(new CodeVariableElement(getContext().getType(Object.class), LOCAL_VALUE));
 
             CodeTreeBuilder body = method.createBuilder();
-            body.startAssert().startCall(isTypeMethodName(type)).string(LOCAL_VALUE).end().end();
+            String assertMessage = typeName(getModel()) + "." + asTypeMethodName(type) + ": " + Utils.getSimpleName(type.getBoxedType()) + " expected";
+            body.startAssert().startCall(isTypeMethodName(type)).string(LOCAL_VALUE).end().string(" : ").doubleQuote(assertMessage).end();
             body.startReturn().cast(type.getPrimitiveType(), body.create().string(LOCAL_VALUE).getTree()).end();
 
             return method;