blob: 971e4696dac50e736d658f23a9e822c9003952b4 [file] [log] [blame]
// Copyright (c) 2017, 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.errors.CompilationError;
import com.android.tools.r8.graph.DexApplication;
import com.android.tools.r8.graph.DexItem;
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.shaking.RootSetBuilder.RootSet;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.StringDiagnostic;
import java.util.Set;
public class DiscardedChecker {
private final Set<DexItem> checkDiscarded;
private final DexApplication application;
private boolean fail = false;
private final InternalOptions options;
public DiscardedChecker(RootSet rootSet, DexApplication application, InternalOptions options) {
this.checkDiscarded = rootSet.checkDiscarded;
this.application = application;
this.options = options;
}
public void run() {
for (DexProgramClass clazz : application.classes()) {
checkItem(clazz);
clazz.forEachMethod(this::checkItem);
clazz.forEachField(this::checkItem);
}
if (fail) {
throw new CompilationError("Discard checks failed.");
}
}
private void checkItem(DexItem item) {
if (checkDiscarded.contains(item)) {
options.reporter.info(
new StringDiagnostic("Item " + item.toSourceString() + " was not discarded."));
fail = true;
}
}
}