blob: 19ac9935309aff742f596243f2d9b6873fcfa364 [file]
// Copyright (c) 2025, 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.naming;
import com.android.tools.r8.graph.DexMember;
import com.android.tools.r8.graph.PrunedItems;
import com.android.tools.r8.graph.lens.GraphLens;
import com.android.tools.r8.threading.TaskCollection;
import com.android.tools.r8.utils.SetUtils;
import java.util.Set;
import java.util.concurrent.ExecutionException;
public class IdentifierNameStringCollection {
private final Set<DexMember<?, ?>> explicit;
private final Set<DexMember<?, ?>> implicit;
public IdentifierNameStringCollection(
Set<DexMember<?, ?>> explicit, Set<DexMember<?, ?>> implicit) {
this.explicit = explicit;
this.implicit = implicit;
}
public boolean contains(DexMember<?, ?> member) {
return explicit.contains(member) || implicit.contains(member);
}
public boolean containsExplicit(DexMember<?, ?> member) {
return explicit.contains(member);
}
public IdentifierNameStringCollection prune(PrunedItems prunedItems, TaskCollection<?> tasks)
throws ExecutionException {
if (prunedItems.hasRemovedMembers()) {
tasks.submit(
() -> {
prunedItems.getRemovedFields().forEach(this::prune);
prunedItems.getRemovedMethods().forEach(this::prune);
});
}
return this;
}
private void prune(DexMember<?, ?> member) {
explicit.remove(member);
implicit.remove(member);
}
public IdentifierNameStringCollection rewrittenWithLens(GraphLens lens) {
return new IdentifierNameStringCollection(
rewrittenWithLens(lens, explicit), rewrittenWithLens(lens, implicit));
}
private static Set<DexMember<?, ?>> rewrittenWithLens(
GraphLens lens, Set<DexMember<?, ?>> members) {
return SetUtils.mapIdentityHashSet(members, lens::rewriteReference);
}
}