| // 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.KmAnnotation; |
| import kotlinx.metadata.KmType; |
| import kotlinx.metadata.KmValueParameter; |
| import kotlinx.metadata.jvm.JvmExtensionsKt; |
| |
| // Provides access to Kotlin information about value parameter. |
| class KotlinValueParameterInfo { |
| // TODO(b/151193860): When to use original param name v.s. when to *not* use? |
| // Original parameter name. |
| final String name; |
| // Original parameter flag, e.g., has default value. |
| final int flag; |
| // Indicates whether the formal parameter is originally `vararg`. |
| final boolean isVararg; |
| // Original information about the type. |
| final KotlinTypeInfo type; |
| |
| // TODO(b/151194869): Should we treat them as normal annotations? E.g., shrinking and renaming? |
| // Annotations on the type of value parameter. |
| final List<KmAnnotation> annotations; |
| |
| private KotlinValueParameterInfo( |
| String name, |
| int flag, |
| boolean isVararg, |
| KotlinTypeInfo type, |
| List<KmAnnotation> annotations) { |
| this.name = name; |
| this.flag = flag; |
| this.isVararg = isVararg; |
| this.type = type; |
| this.annotations = annotations; |
| } |
| |
| static KotlinValueParameterInfo fromKmValueParameter(KmValueParameter kmValueParameter) { |
| if (kmValueParameter == null) { |
| return null; |
| } |
| KmType kmType = kmValueParameter.getType(); |
| return new KotlinValueParameterInfo( |
| kmValueParameter.getName(), |
| kmValueParameter.getFlags(), |
| kmValueParameter.getVarargElementType() != null, |
| KotlinTypeInfo.create(kmType), |
| kmType != null ? JvmExtensionsKt.getAnnotations(kmType) : ImmutableList.of()); |
| } |
| } |