changeset 16007:23ae0cbcb2ae

OptionProcessor needs to find the type parameter of an OptionValue field declaration
author Doug Simon <doug.simon@oracle.com>
date Tue, 03 Jun 2014 17:11:40 +0200
parents 66a9286203a2
children 76f40e11c820
files graal/com.oracle.graal.options/src/com/oracle/graal/options/OptionProcessor.java
diffstat 1 files changed, 10 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.options/src/com/oracle/graal/options/OptionProcessor.java	Tue Jun 03 11:51:27 2014 +0200
+++ b/graal/com.oracle.graal.options/src/com/oracle/graal/options/OptionProcessor.java	Tue Jun 03 17:11:40 2014 +0200
@@ -107,7 +107,15 @@
             optionName = fieldName;
         }
 
-        String optionType = declaredFieldType.getTypeArguments().get(0).toString();
+        DeclaredType declaredOptionValueType = declaredFieldType;
+        while (!types.isSameType(types.erasure(declaredOptionValueType), types.erasure(optionValueType))) {
+            List<? extends TypeMirror> directSupertypes = types.directSupertypes(declaredFieldType);
+            assert !directSupertypes.isEmpty();
+            declaredOptionValueType = (DeclaredType) directSupertypes.get(0);
+        }
+
+        assert !declaredOptionValueType.getTypeArguments().isEmpty();
+        String optionType = declaredOptionValueType.getTypeArguments().get(0).toString();
         if (optionType.startsWith("java.lang.")) {
             optionType = optionType.substring("java.lang.".length());
         }
@@ -318,3 +326,4 @@
         return true;
     }
 }
+