blob: b55f54f08b20df3cedd60b8c3d5ad1feefd8f1cd [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.ir.conversion;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.utils.ThreadUtils;
import com.android.tools.r8.utils.ThrowingConsumer;
import java.util.Collection;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
/**
* A {@link MethodProcessor} that doesn't persist; rather just processes the given methods one-time,
* along with a default abstraction of concurrent processing.
*/
public class OneTimeMethodProcessor implements MethodProcessor {
private Collection<DexEncodedMethod> wave;
private OneTimeMethodProcessor(Collection<DexEncodedMethod> methodsToProcess) {
this.wave = methodsToProcess;
}
public static OneTimeMethodProcessor getInstance() {
return new OneTimeMethodProcessor(null);
}
public static OneTimeMethodProcessor getInstance(Collection<DexEncodedMethod> methodsToProcess) {
return new OneTimeMethodProcessor(methodsToProcess);
}
@Override
public Phase getPhase() {
return Phase.ONE_TIME;
}
@Override
public boolean isProcessedConcurrently(DexEncodedMethod method) {
return wave != null && wave.contains(method);
}
public <E extends Exception> void forEachWave(
ThrowingConsumer<DexEncodedMethod, E> consumer, ExecutorService executorService)
throws ExecutionException {
ThreadUtils.processItems(wave, consumer, executorService);
}
}