blob: 94ffff713327fc49d70b713487311ae6957da25b [file] [log] [blame]
// Copyright (c) 2021, 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.tracereferences.internal;
import com.android.tools.r8.DiagnosticsHandler;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.FieldReference;
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.references.PackageReference;
import com.android.tools.r8.tracereferences.TraceReferencesConsumer;
import com.android.tools.r8.tracereferences.TraceReferencesConsumer.TracedClass;
import com.android.tools.r8.tracereferences.TraceReferencesConsumer.TracedField;
import com.android.tools.r8.tracereferences.TraceReferencesConsumer.TracedMethod;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class TraceReferencesResult {
private final Set<TracedClass> types;
private final Map<ClassReference, Set<TracedField>> fields;
private final Map<ClassReference, Set<TracedMethod>> methods;
private final Set<PackageReference> keepPackageNames;
TraceReferencesResult(
Set<TracedClass> types,
Map<ClassReference, Set<TracedField>> fields,
Map<ClassReference, Set<TracedMethod>> methods,
Set<PackageReference> keepPackageNames) {
this.types = types;
this.fields = fields;
this.methods = methods;
this.keepPackageNames = keepPackageNames;
}
public Set<TracedClass> getTracedClasses() {
return types;
}
public Map<ClassReference, Set<TracedField>> getTracedFields() {
return fields;
}
public Map<ClassReference, Set<TracedMethod>> getTracedMethods() {
return methods;
}
public Set<PackageReference> getTracedPackageNames() {
return keepPackageNames;
}
public static Builder builder() {
return new Builder();
}
public static class Builder implements TraceReferencesConsumer {
private final Set<TracedClass> types = new HashSet<>();
private final Map<ClassReference, Set<TracedField>> fields = new HashMap<>();
private final Map<ClassReference, Set<TracedMethod>> methods = new HashMap<>();
private final Set<PackageReference> keepPackageNames = new HashSet<>();
@Override
public void acceptType(TracedClass tracedClass, DiagnosticsHandler handler) {
types.add(tracedClass);
}
@Override
public void acceptField(TracedField tracedField, DiagnosticsHandler handler) {
FieldReference field = tracedField.getReference();
fields.computeIfAbsent(field.getHolderClass(), k -> new HashSet<>()).add(tracedField);
}
@Override
public void acceptMethod(TracedMethod tracedMethod, DiagnosticsHandler handler) {
MethodReference method = tracedMethod.getReference();
methods.computeIfAbsent(method.getHolderClass(), k -> new HashSet<>()).add(tracedMethod);
}
@Override
public void acceptPackage(PackageReference pkg, DiagnosticsHandler handler) {
keepPackageNames.add(pkg);
}
@Override
public void finished(DiagnosticsHandler handler) {}
public TraceReferencesResult build() {
return new TraceReferencesResult(types, fields, methods, keepPackageNames);
}
}
}