| // 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.kotlin; |
| |
| import com.google.common.collect.ImmutableList; |
| import java.util.List; |
| import kotlinx.metadata.KmClassifier; |
| import kotlinx.metadata.KmType; |
| import kotlinx.metadata.KmTypeProjection; |
| |
| // Provides access to Kotlin information about a kotlin type. |
| public class KotlinTypeInfo { |
| |
| static final List<KotlinTypeProjectionInfo> EMPTY_ARGUMENTS = ImmutableList.of(); |
| |
| private final KmClassifier classifier; |
| private final List<KotlinTypeProjectionInfo> arguments; |
| |
| private KotlinTypeInfo(KmClassifier classifier, List<KotlinTypeProjectionInfo> arguments) { |
| this.classifier = classifier; |
| this.arguments = arguments; |
| } |
| |
| static KotlinTypeInfo create(KmType kmType) { |
| if (kmType == null) { |
| return null; |
| } |
| if (kmType.getArguments().isEmpty()) { |
| return new KotlinTypeInfo(kmType.classifier, EMPTY_ARGUMENTS); |
| } |
| ImmutableList.Builder<KotlinTypeProjectionInfo> arguments = new ImmutableList.Builder<>(); |
| for (KmTypeProjection argument : kmType.getArguments()) { |
| arguments.add(KotlinTypeProjectionInfo.create(argument)); |
| } |
| return new KotlinTypeInfo(kmType.classifier, arguments.build()); |
| } |
| |
| public boolean isTypeAlias() { |
| return classifier instanceof KmClassifier.TypeAlias; |
| } |
| |
| public KmClassifier.TypeAlias asTypeAlias() { |
| return (KmClassifier.TypeAlias) classifier; |
| } |
| |
| public List<KotlinTypeProjectionInfo> getArguments() { |
| return arguments; |
| } |
| } |