blob: b58a7b85eed85da464f046d8d41cc65cec7864a8 [file] [log] [blame]
// 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.graph;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class ProgramPackageCollection implements Iterable<ProgramPackage> {
protected final Map<String, ProgramPackage> packages;
protected ProgramPackageCollection(Map<String, ProgramPackage> packages) {
this.packages = packages;
}
public static ProgramPackageCollection createWithAllProgramClasses(AppView<?> appView) {
assert !appView.appInfo().getSyntheticItems().hasPendingSyntheticClasses();
ProgramPackageCollection programPackages = new ProgramPackageCollection(new HashMap<>());
for (DexProgramClass clazz : appView.appInfo().classes()) {
programPackages.addProgramClass(clazz);
}
return programPackages;
}
public static ProgramPackageCollection createEmpty() {
return new ProgramPackageCollection(new HashMap<>());
}
public boolean addProgramClass(DexProgramClass clazz) {
return packages
.computeIfAbsent(clazz.getType().getPackageDescriptor(), ProgramPackage::new)
.add(clazz);
}
public boolean contains(DexProgramClass clazz) {
ProgramPackage pkg = packages.get(clazz.getType().getPackageDescriptor());
return pkg != null && pkg.contains(clazz);
}
public boolean isEmpty() {
return packages.isEmpty();
}
@Override
public Iterator<ProgramPackage> iterator() {
return packages.values().iterator();
}
}