blob: 15614574e54dfc047fbed8806b25843e25c74378 [file] [log] [blame]
// Copyright (c) 2019, 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.retrace;
import com.android.tools.r8.naming.ClassNameMapper;
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.TypeReference;
import com.android.tools.r8.utils.Box;
public class RetraceBaseImpl implements RetraceBase {
private final ClassNameMapper classNameMapper;
private RetraceBaseImpl(ClassNameMapper classNameMapper) {
this.classNameMapper = classNameMapper;
}
public static RetraceBase create(ClassNameMapper classNameMapper) {
return new RetraceBaseImpl(classNameMapper);
}
@Override
public RetraceMethodResult retrace(MethodReference methodReference) {
return retrace(methodReference.getHolderClass()).lookupMethod(methodReference.getMethodName());
}
@Override
public RetraceFieldResult retrace(FieldReference fieldReference) {
return retrace(fieldReference.getHolderClass()).lookupField(fieldReference.getFieldName());
}
@Override
public RetraceClassResult retrace(ClassReference classReference) {
return RetraceClassResult.create(
classReference, classNameMapper.getClassNaming(classReference.getTypeName()));
}
@Override
public RetraceSourceFileResult retraceSourceFile(
ClassReference classReference, String sourceFile) {
Box<RetraceSourceFileResult> retracedSourceFile = new Box<>();
retrace(classReference)
.forEach(element -> retracedSourceFile.set(element.retraceSourceFile(sourceFile)));
return retracedSourceFile.get();
}
@Override
public RetraceTypeResult retrace(TypeReference typeReference) {
return new RetraceTypeResult(typeReference, this);
}
}