diff options
author | 2018-02-06 12:19:34 -0800 | |
---|---|---|
committer | 2018-02-06 12:21:40 -0800 | |
commit | 5e573b6d7227d0e0146f5ac63956848a1c366c21 (patch) | |
tree | 2b0f852d9e8c29741144574ceab0861eceeb7210 /src/main/java/com/google/devtools | |
parent | f0b1b107d5c8e369ac18f4d5adf206b6f7dc6557 (diff) |
@AutoCodec support for superclasses having generic parameters.
PiperOrigin-RevId: 184720361
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java index 9da4420e9f..f0fe3c0e1a 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java @@ -24,6 +24,7 @@ import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; import com.google.devtools.build.lib.skyframe.serialization.PolymorphicHelper; import com.google.devtools.build.lib.skyframe.serialization.SerializationException; import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationCodeGenerator.Marshaller; +import com.squareup.javapoet.ClassName; import com.squareup.javapoet.JavaFile; import com.squareup.javapoet.MethodSpec; import com.squareup.javapoet.TypeName; @@ -506,7 +507,7 @@ public class AutoCodecProcessor extends AbstractProcessor { "this.$L_offset = $T.getInstance().objectFieldOffset($T.class.getDeclaredField(\"$L\"))", param.getSimpleName(), UnsafeProvider.class, - field.declaringClassType, + ClassName.get(field.declaringClassType), param.getSimpleName()); constructor.nextControlFlow("catch ($T e)", NoSuchFieldException.class); constructor.addStatement("throw new $T(e)", IllegalStateException.class); @@ -550,8 +551,11 @@ public class AutoCodecProcessor extends AbstractProcessor { return Optional.of(new FieldValueAndClass(field.get(), type)); } if (type.getSuperclass().getKind() != TypeKind.NONE) { + // Applies the erased superclass type so that it can be used in `T.class`. return getFieldByNameRecursive( - env.getElementUtils().getTypeElement(type.getSuperclass().toString()), name); + (TypeElement) + env.getTypeUtils().asElement(env.getTypeUtils().erasure(type.getSuperclass())), + name); } return Optional.empty(); } |