blob: c2d52851743cbf55b9729e8dfbb47063ed7399ed [file] [log] [blame]
// Copyright (c) 2022, 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.startup.utils;
import com.android.tools.r8.dex.MixedSectionLayoutStrategy;
import com.android.tools.r8.dex.VirtualFile;
import com.android.tools.r8.graph.DexAnnotation;
import com.android.tools.r8.graph.DexAnnotationDirectory;
import com.android.tools.r8.graph.DexAnnotationSet;
import com.android.tools.r8.graph.DexEncodedArray;
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.DexTypeList;
import com.android.tools.r8.graph.ParameterAnnotationsList;
import com.android.tools.r8.graph.ProgramMethod;
import java.util.Collection;
import java.util.function.BiFunction;
public abstract class MixedSectionLayoutInspector
implements BiFunction<MixedSectionLayoutStrategy, VirtualFile, MixedSectionLayoutStrategy> {
public void inspectAnnotationLayout(int virtualFile, Collection<DexAnnotation> layout) {
// Intentionally empty.
}
public void inspectAnnotationDirectoryLayout(
int virtualFile, Collection<DexAnnotationDirectory> layout) {
// Intentionally empty.
}
public void inspectAnnotationSetLayout(int virtualFile, Collection<DexAnnotationSet> layout) {
// Intentionally empty.
}
public void inspectAnnotationSetRefListLayout(
int virtualFile, Collection<ParameterAnnotationsList> layout) {
// Intentionally empty.
}
public void inspectClassDataLayout(int virtualFile, Collection<DexProgramClass> layout) {
// Intentionally empty.
}
public void inspectCodeLayout(int virtualFile, Collection<ProgramMethod> layout) {
// Intentionally empty.
}
public void inspectEncodedArrayLayout(int virtualFile, Collection<DexEncodedArray> layout) {
// Intentionally empty.
}
public void inspectStringDataLayout(int virtualFile, Collection<DexString> layout) {
// Intentionally empty.
}
public void inspectTypeListLayout(int virtualFile, Collection<DexTypeList> layout) {
// Intentionally empty.
}
@Override
public MixedSectionLayoutStrategy apply(
MixedSectionLayoutStrategy mixedSectionLayoutStrategy, VirtualFile virtualFile) {
return new MixedSectionLayoutStrategy() {
@Override
public Collection<DexAnnotation> getAnnotationLayout() {
Collection<DexAnnotation> layout = mixedSectionLayoutStrategy.getAnnotationLayout();
inspectAnnotationLayout(virtualFile.getId(), layout);
return layout;
}
@Override
public Collection<DexAnnotationDirectory> getAnnotationDirectoryLayout() {
Collection<DexAnnotationDirectory> layout =
mixedSectionLayoutStrategy.getAnnotationDirectoryLayout();
inspectAnnotationDirectoryLayout(virtualFile.getId(), layout);
return layout;
}
@Override
public Collection<DexAnnotationSet> getAnnotationSetLayout() {
Collection<DexAnnotationSet> layout = mixedSectionLayoutStrategy.getAnnotationSetLayout();
inspectAnnotationSetLayout(virtualFile.getId(), layout);
return layout;
}
@Override
public Collection<ParameterAnnotationsList> getAnnotationSetRefListLayout() {
Collection<ParameterAnnotationsList> layout =
mixedSectionLayoutStrategy.getAnnotationSetRefListLayout();
inspectAnnotationSetRefListLayout(virtualFile.getId(), layout);
return layout;
}
@Override
public Collection<DexProgramClass> getClassDataLayout() {
Collection<DexProgramClass> layout = mixedSectionLayoutStrategy.getClassDataLayout();
inspectClassDataLayout(virtualFile.getId(), layout);
return layout;
}
@Override
public Collection<ProgramMethod> getCodeLayout() {
Collection<ProgramMethod> layout = mixedSectionLayoutStrategy.getCodeLayout();
inspectCodeLayout(virtualFile.getId(), layout);
return layout;
}
@Override
public Collection<DexEncodedArray> getEncodedArrayLayout() {
Collection<DexEncodedArray> layout = mixedSectionLayoutStrategy.getEncodedArrayLayout();
inspectEncodedArrayLayout(virtualFile.getId(), layout);
return layout;
}
@Override
public Collection<DexString> getStringDataLayout() {
Collection<DexString> layout = mixedSectionLayoutStrategy.getStringDataLayout();
inspectStringDataLayout(virtualFile.getId(), layout);
return layout;
}
@Override
public Collection<DexTypeList> getTypeListLayout() {
Collection<DexTypeList> layout = mixedSectionLayoutStrategy.getTypeListLayout();
inspectTypeListLayout(virtualFile.getId(), layout);
return layout;
}
};
}
}