| // 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); |
| } |
| } |
| } |