diff options
-rw-r--r-- | java/com/google/turbine/binder/ConstEvaluator.java | 4 | ||||
-rw-r--r-- | javatests/com/google/turbine/binder/BinderErrorTest.java | 16 |
2 files changed, 20 insertions, 0 deletions
diff --git a/java/com/google/turbine/binder/ConstEvaluator.java b/java/com/google/turbine/binder/ConstEvaluator.java index 6db85e1..cfc63fc 100644 --- a/java/com/google/turbine/binder/ConstEvaluator.java +++ b/java/com/google/turbine/binder/ConstEvaluator.java @@ -35,6 +35,7 @@ import com.google.turbine.binder.lookup.MemberImportIndex; import com.google.turbine.binder.lookup.Scope; import com.google.turbine.binder.sym.ClassSymbol; import com.google.turbine.binder.sym.FieldSymbol; +import com.google.turbine.binder.sym.Symbol; import com.google.turbine.diag.SourceFile; import com.google.turbine.diag.TurbineError; import com.google.turbine.diag.TurbineError.ErrorKind; @@ -203,6 +204,9 @@ public strictfp class ConstEvaluator { if (result == null) { throw error(classTy.position(), ErrorKind.CANNOT_RESOLVE, flat.peekFirst()); } + if (result.sym().symKind() != Symbol.Kind.CLASS) { + throw error(classTy.position(), ErrorKind.UNEXPECTED_TYPE_PARAMETER, flat.peekFirst()); + } ClassSymbol classSym = (ClassSymbol) result.sym(); for (Ident bit : result.remaining()) { classSym = resolveNext(classTy.position(), classSym, bit); diff --git a/javatests/com/google/turbine/binder/BinderErrorTest.java b/javatests/com/google/turbine/binder/BinderErrorTest.java index 5e6b9f1..de2237d 100644 --- a/javatests/com/google/turbine/binder/BinderErrorTest.java +++ b/javatests/com/google/turbine/binder/BinderErrorTest.java @@ -519,6 +519,22 @@ public class BinderErrorTest { " ^", }, }, + { + { + "@interface Param {", + " Class<?> type();", + "}", + "class Foo<T> {", + " @Param(type = T.class)", + " public void bar() {}", + "}", + }, + { + "<>:5: error: unexpected type parameter T", + " @Param(type = T.class)", + " ^", + }, + }, }; return Arrays.asList((Object[][]) testCases); } |