summaryrefslogtreecommitdiffstats
path: root/jack
diff options
context:
space:
mode:
authorYohann Roussel <yroussel@google.com>2014-09-26 16:22:44 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-09-26 16:22:44 +0000
commitd66b14ea80614277f0875fef9da7a262de55dc1f (patch)
treeb16291dca66d6fa29b66f69aace1fca53940ae76 /jack
parentb07070a1e0b10ffd24eee9b6a597e94840fa9604 (diff)
parentb10005e61966de589b67e2f2ff1c2d6b6597926f (diff)
downloadtoolchain_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.java10
-rw-r--r--jack/src/com/android/jack/frontend/VirtualMethodsMarker.java18
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() {