diff options
author | Yohann Roussel <yroussel@google.com> | 2014-09-26 16:22:44 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-09-26 16:22:44 +0000 |
commit | d66b14ea80614277f0875fef9da7a262de55dc1f (patch) | |
tree | b16291dca66d6fa29b66f69aace1fca53940ae76 /jack | |
parent | b07070a1e0b10ffd24eee9b6a597e94840fa9604 (diff) | |
parent | b10005e61966de589b67e2f2ff1c2d6b6597926f (diff) | |
download | toolchain_jack-d66b14ea80614277f0875fef9da7a262de55dc1f.zip toolchain_jack-d66b14ea80614277f0875fef9da7a262de55dc1f.tar.gz toolchain_jack-d66b14ea80614277f0875fef9da7a262de55dc1f.tar.bz2 |
Merge "Clone VirtualMethodsMarker when possible" into ub-jack
Diffstat (limited to 'jack')
-rw-r--r-- | jack/src/com/android/jack/frontend/MethodIdMerger.java | 10 | ||||
-rw-r--r-- | jack/src/com/android/jack/frontend/VirtualMethodsMarker.java | 18 |
2 files changed, 23 insertions, 5 deletions
diff --git a/jack/src/com/android/jack/frontend/MethodIdMerger.java b/jack/src/com/android/jack/frontend/MethodIdMerger.java index 0132102..e434cf7 100644 --- a/jack/src/com/android/jack/frontend/MethodIdMerger.java +++ b/jack/src/com/android/jack/frontend/MethodIdMerger.java @@ -92,14 +92,18 @@ public class MethodIdMerger extends JVisitor { private void handleDefinedClassOrInterface(@Nonnull JDefinedClassOrInterface node) { ensureHierarchyVisited(node); - VirtualMethodsMarker virtualMethods = new VirtualMethodsMarker(); - JClass zuper = getSuper(node); while (zuper instanceof JPhantomClassOrInterface) { zuper = getSuper(zuper); } + + VirtualMethodsMarker virtualMethods; if (zuper != null) { - addIds(virtualMethods, (JNode) zuper); + VirtualMethodsMarker superMarker = ((JNode) zuper).getMarker(VirtualMethodsMarker.class); + assert superMarker != null; + virtualMethods = superMarker.clone(); + } else { + virtualMethods = new VirtualMethodsMarker(); } for (JInterface interfaze : node.getImplements()) { diff --git a/jack/src/com/android/jack/frontend/VirtualMethodsMarker.java b/jack/src/com/android/jack/frontend/VirtualMethodsMarker.java index 9af83d5..9697b40 100644 --- a/jack/src/com/android/jack/frontend/VirtualMethodsMarker.java +++ b/jack/src/com/android/jack/frontend/VirtualMethodsMarker.java @@ -42,7 +42,7 @@ import javax.annotation.Nonnull; */ @Description("Set of virtual methods visible in the marked type.") @ValidOn({JDefinedClassOrInterface.class, JPhantomClassOrInterface.class}) -public class VirtualMethodsMarker implements Marker, Iterable<JMethodId> { +public class VirtualMethodsMarker implements Marker, Iterable<JMethodId>, Cloneable { /** * A remover for {@link VirtualMethodsMarker} @@ -118,13 +118,27 @@ public class VirtualMethodsMarker implements Marker, Iterable<JMethodId> { }; @Nonnull - private final TreeSet<JMethodId> virtualMethods; + private TreeSet<JMethodId> virtualMethods; public VirtualMethodsMarker() { virtualMethods = new TreeSet<JMethodId>(methodIdComparator); } + @SuppressWarnings("unchecked") + @Nonnull + @Override + public VirtualMethodsMarker clone() { + VirtualMethodsMarker clone; + try { + clone = (VirtualMethodsMarker) super.clone(); + clone.virtualMethods = (TreeSet<JMethodId>) virtualMethods.clone(); + return clone; + } catch (CloneNotSupportedException e) { + throw new AssertionError(); + } + } + @Nonnull @Override public Marker cloneIfNeeded() { |