| // Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| package com.android.tools.r8.shaking; |
| |
| import com.android.tools.r8.graph.AppInfoWithClassHierarchy; |
| import com.android.tools.r8.graph.AppView; |
| import com.android.tools.r8.graph.SubtypingInfo; |
| |
| class ConsequentRootSetBuilder extends RootSetBuilder { |
| |
| private final Enqueuer enqueuer; |
| |
| ConsequentRootSetBuilder( |
| AppView<? extends AppInfoWithClassHierarchy> appView, |
| SubtypingInfo subtypingInfo, |
| Enqueuer enqueuer) { |
| super(appView, subtypingInfo, null); |
| this.enqueuer = enqueuer; |
| } |
| |
| @Override |
| void handleMatchedAnnotation(AnnotationMatchResult annotationMatchResult) { |
| if (enqueuer.getMode().isInitialTreeShaking() |
| && annotationMatchResult.isConcreteAnnotationMatchResult()) { |
| enqueuer.retainAnnotationForFinalTreeShaking( |
| annotationMatchResult.asConcreteAnnotationMatchResult().getMatchedAnnotations()); |
| } |
| } |
| } |