blob: d01873215f37534dc1df1801230984a5e728a8d7 [file] [log] [blame]
// Copyright (c) 2020, 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;
import com.android.tools.r8.TestBase.Backend;
import com.android.tools.r8.debug.DebugTestConfig;
import com.android.tools.r8.errors.Unimplemented;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.InternalOptions;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Collection;
import java.util.concurrent.ExecutionException;
import java.util.function.Consumer;
public class IntermediateCfD8TestBuilder
extends TestBuilder<D8TestRunResult, IntermediateCfD8TestBuilder> {
public static IntermediateCfD8TestBuilder create(TestState state, AndroidApiLevel apiLevel) {
assert state != null;
assert apiLevel != null;
return new IntermediateCfD8TestBuilder(state, apiLevel);
}
private final D8TestBuilder cf2cf;
private final D8TestBuilder cf2dex;
private IntermediateCfD8TestBuilder(TestState state, AndroidApiLevel apiLevel) {
super(state);
cf2cf = D8TestBuilder.create(state, Backend.CF).setMinApi(apiLevel);
cf2dex = D8TestBuilder.create(state, Backend.DEX).disableDesugaring().setMinApi(apiLevel);
}
public IntermediateCfD8TestBuilder addOptionsModification(Consumer<InternalOptions> fn) {
cf2cf.addOptionsModification(fn);
cf2dex.addOptionsModification(fn);
return self();
}
@Override
IntermediateCfD8TestBuilder self() {
return this;
}
@Override
public D8TestRunResult run(TestRuntime runtime, String mainClass, String... args)
throws CompilationFailedException, ExecutionException, IOException {
return cf2dex.addProgramFiles(cf2cf.compile().writeToZip()).run(runtime, mainClass, args);
}
@Override
public DebugTestConfig debugConfig() {
throw new Unimplemented("Unsupported debug config as of now...");
}
@Override
public IntermediateCfD8TestBuilder addProgramFiles(Collection<Path> files) {
cf2cf.addProgramFiles(files);
return self();
}
@Override
public IntermediateCfD8TestBuilder addProgramClassFileData(Collection<byte[]> classes) {
cf2cf.addProgramClassFileData(classes);
return self();
}
@Override
public IntermediateCfD8TestBuilder addProgramDexFileData(Collection<byte[]> data) {
cf2cf.addProgramDexFileData(data);
return self();
}
@Override
public IntermediateCfD8TestBuilder addLibraryFiles(Collection<Path> files) {
cf2cf.addLibraryFiles(files);
cf2dex.addLibraryFiles(files);
return self();
}
@Override
public IntermediateCfD8TestBuilder addLibraryClasses(Collection<Class<?>> classes) {
cf2cf.addLibraryClasses(classes);
cf2dex.addLibraryClasses(classes);
return self();
}
@Override
public IntermediateCfD8TestBuilder addClasspathClasses(Collection<Class<?>> classes) {
cf2cf.addClasspathClasses(classes);
cf2dex.addClasspathClasses(classes);
return self();
}
@Override
public IntermediateCfD8TestBuilder addClasspathFiles(Collection<Path> files) {
cf2cf.addClasspathFiles(files);
cf2dex.addClasspathFiles(files);
return self();
}
@Override
public IntermediateCfD8TestBuilder addRunClasspathFiles(Collection<Path> files) {
cf2dex.addRunClasspathFiles(files);
return self();
}
}