aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar shahan <shahan@google.com>2018-02-06 12:19:34 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-06 12:21:40 -0800
commit5e573b6d7227d0e0146f5ac63956848a1c366c21 (patch)
tree2b0f852d9e8c29741144574ceab0861eceeb7210 /src/main/java/com/google/devtools
parentf0b1b107d5c8e369ac18f4d5adf206b6f7dc6557 (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.java8
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();
}