blob: b04748c026ecb622f7429cef54c3c3701acb46af [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.graph.DexDefinition;
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.graph.DexReference;
import com.android.tools.r8.shaking.RootSetUtils.RootSet;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class DiscardedChecker {
private final Set<DexReference> checkDiscarded;
private final Iterable<DexProgramClass> classes;
public DiscardedChecker(RootSet rootSet, Iterable<DexProgramClass> classes) {
this.checkDiscarded = new HashSet<>(rootSet.checkDiscarded);
this.classes = classes;
}
public List<DexDefinition> run() {
List<DexDefinition> failed = new ArrayList<>(checkDiscarded.size());
// TODO(b/131668850): Lookup the definition based on the reference.
for (DexProgramClass clazz : classes) {
checkItem(clazz, failed);
clazz.forEachMethod(method -> checkItem(method, failed));
clazz.forEachField(field -> checkItem(field, failed));
}
return failed;
}
private void checkItem(DexDefinition item, List<DexDefinition> failed) {
DexReference reference = item.getReference();
if (checkDiscarded.contains(reference)) {
failed.add(item);
}
}
}