aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar cnsun <cnsun@google.com>2017-04-29 01:04:00 +0200
committerGravatar Vladimir Moskva <vladmos@google.com>2017-04-30 23:13:54 +0200
commit198f00a930e9d5f52f7ee6be52bdaaf5b7999ee2 (patch)
tree51d3237fb68d3511bc84dbacce0b89abdb104cd8 /src
parent47577f8b4e28d4c3ceab7d25d2ffb5a98cf90114 (diff)
Bug fix. Enable Desugar to desugar try-with-resources multiple times.
RELNOTES: n/a PiperOrigin-RevId: 154594200
Diffstat (limited to 'src')
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java b/src/tools/android/java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java
index 2429d2f7b8..cde223e565 100644
--- a/src/tools/android/java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java
+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java
@@ -85,6 +85,11 @@ public class TryWithResourcesRewriter extends ClassVisitor {
private final ClassLoader classLoader;
private final AtomicInteger numOfTryWithResourcesInvoked;
+ /**
+ * Indicate whether the current class being desugared should be ignored. If the current class is
+ * one of the runtime extension classes, then it should be ignored.
+ */
+ private boolean shouldCurrentClassBeIgnored;
public TryWithResourcesRewriter(
ClassVisitor classVisitor,
@@ -96,10 +101,23 @@ public class TryWithResourcesRewriter extends ClassVisitor {
}
@Override
+ public void visit(
+ int version,
+ int access,
+ String name,
+ String signature,
+ String superName,
+ String[] interfaces) {
+ super.visit(version, access, name, signature, superName, interfaces);
+ shouldCurrentClassBeIgnored = THROWABLE_EXT_CLASS_INTERNAL_NAMES.contains(name);
+ }
+
+
+ @Override
public MethodVisitor visitMethod(
int access, String name, String desc, String signature, String[] exceptions) {
MethodVisitor visitor = super.cv.visitMethod(access, name, desc, signature, exceptions);
- return visitor == null || THROWABLE_EXT_CLASS_INTERNAL_NAMES.contains(name)
+ return visitor == null || shouldCurrentClassBeIgnored
? visitor
: new TryWithResourceVisitor(visitor, classLoader);
}