diff options
Diffstat (limited to 'jack/src/com/android/jack/analysis/tracer/Tracer.java')
-rw-r--r-- | jack/src/com/android/jack/analysis/tracer/Tracer.java | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/jack/src/com/android/jack/analysis/tracer/Tracer.java b/jack/src/com/android/jack/analysis/tracer/Tracer.java index 90f73445..d4d03d55 100644 --- a/jack/src/com/android/jack/analysis/tracer/Tracer.java +++ b/jack/src/com/android/jack/analysis/tracer/Tracer.java @@ -59,6 +59,8 @@ import com.android.jack.ir.ast.JVariable; import com.android.jack.ir.ast.JVisitor; import com.android.jack.ir.ast.marker.ThrownExceptionMarker; import com.android.jack.lookup.JMethodLookupException; +import com.android.jack.reporting.Reporter.Severity; +import com.android.jack.shrob.shrink.PartialTypeHierarchy; import com.android.sched.item.Description; import com.android.sched.marker.LocalMarkerManager; import com.android.sched.util.log.LoggerFactory; @@ -193,15 +195,23 @@ public class Tracer extends JVisitor { } } + PartialTypeHierarchy pth = t.getMarker(PartialTypeHierarchy.class); + if (pth != null) { + Jack.getSession().getReporter().report(Severity.NON_FATAL, pth); + } for (JMethod method : t.getMethods()) { // Clinit and constructor without parameters must always be trace without taking into // account seed. if ((JMethod.isClinit(method) || isNullaryConstructor(method))) { trace(method); - } else if (brush.startTraceSeed(method)) { - trace(method); - brush.setMustTraceOverridingMethods(method); - brush.endTraceSeed(method); + } else { + // To be safe, Jack is conservative when there is partial type hierarchy. + // It considers all methods of the type as seed. + if (brush.startTraceSeed(method) || pth != null) { + trace(method); + brush.setMustTraceOverridingMethods(method); + brush.endTraceSeed(method); + } } } |