blob: f659ad899836228708ef9ca7e3792cd53b55fd14 [file] [log] [blame]
// 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.ir.desugar;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibraryRetargeterPostProcessor;
import com.android.tools.r8.ir.desugar.desugaredlibrary.RetargetingInfo;
import java.util.Collections;
import java.util.List;
public abstract class CfPostProcessingDesugaringCollection {
public static CfPostProcessingDesugaringCollection create(
AppView<?> appView, RetargetingInfo retargetingInfo) {
if (appView.options().desugarState.isOn()) {
return NonEmptyCfPostProcessingDesugaringCollection.create(appView, retargetingInfo);
}
return empty();
}
static CfPostProcessingDesugaringCollection empty() {
return EmptyCfPostProcessingDesugaringCollection.getInstance();
}
public abstract void postProcessingDesugaring(
CfPostProcessingDesugaringEventConsumer eventConsumer);
public static class NonEmptyCfPostProcessingDesugaringCollection
extends CfPostProcessingDesugaringCollection {
private final List<CfPostProcessingDesugaring> desugarings;
public NonEmptyCfPostProcessingDesugaringCollection(
List<CfPostProcessingDesugaring> desugarings) {
this.desugarings = desugarings;
}
public static CfPostProcessingDesugaringCollection create(
AppView<?> appView, RetargetingInfo retargetingInfo) {
if (appView.options().desugaredLibraryConfiguration.getRetargetCoreLibMember().isEmpty()) {
return empty();
}
return new NonEmptyCfPostProcessingDesugaringCollection(
Collections.singletonList(
new DesugaredLibraryRetargeterPostProcessor(appView, retargetingInfo)));
}
@Override
public void postProcessingDesugaring(CfPostProcessingDesugaringEventConsumer eventConsumer) {
for (CfPostProcessingDesugaring desugaring : desugarings) {
desugaring.postProcessingDesugaring(eventConsumer);
}
}
}
public static class EmptyCfPostProcessingDesugaringCollection
extends CfPostProcessingDesugaringCollection {
private static final EmptyCfPostProcessingDesugaringCollection INSTANCE =
new EmptyCfPostProcessingDesugaringCollection();
private EmptyCfPostProcessingDesugaringCollection() {}
private static EmptyCfPostProcessingDesugaringCollection getInstance() {
return INSTANCE;
}
@Override
public void postProcessingDesugaring(CfPostProcessingDesugaringEventConsumer eventConsumer) {
// Intentionally empty.
}
}
}