aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/android/java/com/google/devtools/build/android/desugar
diff options
context:
space:
mode:
authorGravatar cnsun <cnsun@google.com>2017-06-09 23:15:35 +0200
committerGravatar Yun Peng <pcloudy@google.com>2017-06-12 11:22:19 +0200
commit221c2b686ebaec4f80355f2966d7e4f6f859a0e1 (patch)
treebd1f6542caa870fc379f52a8560161bd099dc839 /src/tools/android/java/com/google/devtools/build/android/desugar
parent68028317c1d3d831a24f90e2b25d1410ce045c54 (diff)
Extract FieldInfo as a top-level class. In the following CL, I will use this
class in DefaultMethodClassFixer to fix the bug b/38255926 RELNOTES: n/a PiperOrigin-RevId: 158561127
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build/android/desugar')
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/desugar/FieldInfo.java29
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/desugar/HeaderClassLoader.java29
2 files changed, 45 insertions, 13 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/FieldInfo.java b/src/tools/android/java/com/google/devtools/build/android/desugar/FieldInfo.java
new file mode 100644
index 0000000000..c281039f61
--- /dev/null
+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/FieldInfo.java
@@ -0,0 +1,29 @@
+// Copyright 2016 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.android.desugar;
+
+import com.google.auto.value.AutoValue;
+
+/** A value class to store the fields information. */
+@AutoValue
+public abstract class FieldInfo {
+
+ static FieldInfo create(String owner, String name, String desc) {
+ return new AutoValue_FieldInfo(owner, name, desc);
+ }
+
+ public abstract String owner();
+ public abstract String name();
+ public abstract String desc();
+}
diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/HeaderClassLoader.java b/src/tools/android/java/com/google/devtools/build/android/desugar/HeaderClassLoader.java
index 1c7a92f8ce..5be41cfcf6 100644
--- a/src/tools/android/java/com/google/devtools/build/android/desugar/HeaderClassLoader.java
+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/HeaderClassLoader.java
@@ -83,16 +83,29 @@ class HeaderClassLoader extends ClassLoader {
private static class NonPrimitiveFieldCollector extends ClassVisitor {
final ImmutableList.Builder<FieldInfo> declaredNonPrimitiveFields = ImmutableList.builder();
+ private String internalName;
public NonPrimitiveFieldCollector() {
super(Opcodes.ASM5);
}
@Override
+ public void visit(
+ int version,
+ int access,
+ String name,
+ String signature,
+ String superName,
+ String[] interfaces) {
+ super.visit(version, access, name, signature, superName, interfaces);
+ this.internalName = name;
+ }
+
+ @Override
public FieldVisitor visitField(
int access, String name, String desc, String signature, Object value) {
if (isNonPrimitiveType(desc)) {
- declaredNonPrimitiveFields.add(new FieldInfo(name, desc));
+ declaredNonPrimitiveFields.add(FieldInfo.create(internalName, name, desc));
}
return null;
}
@@ -103,15 +116,6 @@ class HeaderClassLoader extends ClassLoader {
}
}
- private static final class FieldInfo {
- final String name;
- final String desc;
-
- private FieldInfo(String name, String desc) {
- this.name = name;
- this.desc = desc;
- }
- }
/**
* Class visitor that stubs in missing code attributes, and erases the body of the static
@@ -169,14 +173,12 @@ class HeaderClassLoader extends ClassLoader {
private static class InterfaceInitializerEraser extends MethodVisitor {
private final MethodVisitor dest;
- private final String internalName;
private final ImmutableList<FieldInfo> interfaceFields;
public InterfaceInitializerEraser(
MethodVisitor mv, String internalName, ImmutableList<FieldInfo> interfaceFields) {
super(Opcodes.ASM5);
dest = mv;
- this.internalName = internalName;
this.interfaceFields = interfaceFields;
}
@@ -189,7 +191,8 @@ class HeaderClassLoader extends ClassLoader {
public void visitEnd() {
for (FieldInfo fieldInfo : interfaceFields) {
dest.visitInsn(Opcodes.ACONST_NULL);
- dest.visitFieldInsn(Opcodes.PUTSTATIC, internalName, fieldInfo.name, fieldInfo.desc);
+ dest.visitFieldInsn(
+ Opcodes.PUTSTATIC, fieldInfo.owner(), fieldInfo.name(), fieldInfo.desc());
}
dest.visitInsn(Opcodes.RETURN);
dest.visitMaxs(0, 0);