diff options
author | cnsun <cnsun@google.com> | 2017-04-29 01:04:00 +0200 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2017-05-01 18:08:35 -0700 |
commit | 885bce7f8d296b091d15c0007a7716f01c3fee33 (patch) | |
tree | b00536b4f977b89b697ff16a042d08b6d69d0998 | |
parent | acd4846b9693b50d0c42c22b4b16196ddf8f73b1 (diff) | |
download | desugar-885bce7f8d296b091d15c0007a7716f01c3fee33.tar.gz |
Bug fix. Enable Desugar to desugar try-with-resources multiple times.
RELNOTES: n/a
PiperOrigin-RevId: 154594200
GitOrigin-RevId: 198f00a930e9d5f52f7ee6be52bdaaf5b7999ee2
Change-Id: I3e1b0a53ae79c292ae3a7296b8b57538bc4e2d47
-rw-r--r-- | java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java b/java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java index 2429d2f..cde223e 100644 --- a/java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java +++ b/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); } |