blob: ef90173b2d563f74e03ad5ada6174cc70e4ea548 [file] [log] [blame]
// Copyright (c) 2018, 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.android.tools.r8.graph.DexClass;
import com.google.common.collect.HashBasedTable;
import java.util.BitSet;
import kotlinx.metadata.jvm.KotlinClassMetadata;
// Provides access to kotlin information.
public abstract class KotlinInfo<MetadataKind extends KotlinClassMetadata> {
MetadataKind metadata;
DexClass clazz;
final HashBasedTable<String, String, BitSet> nonNullparamHints = HashBasedTable.create();
KotlinInfo() {
}
KotlinInfo(MetadataKind metadata) {
this(metadata, null);
}
KotlinInfo(MetadataKind metadata, DexClass clazz) {
this.clazz = clazz;
processMetadata(metadata);
this.metadata = metadata;
}
// Subtypes will define how to process the given metadata.
abstract void processMetadata(MetadataKind metadata);
public enum Kind {
Class, File, Synthetic, Part, Facade
}
public abstract Kind getKind();
public boolean isClass() {
return false;
}
public KotlinClass asClass() {
return null;
}
public boolean isFile() {
return false;
}
public KotlinFile asFile() {
return null;
}
public boolean isSyntheticClass() {
return false;
}
public KotlinSyntheticClass asSyntheticClass() {
return null;
}
public boolean isClassPart() {
return false;
}
public KotlinClassPart asClassPart() {
return null;
}
public boolean isClassFacade() {
return false;
}
public KotlinClassFacade asClassFacade() {
return null;
}
public boolean hasNonNullParameterHints() {
return !nonNullparamHints.isEmpty();
}
public BitSet lookupNonNullParameterHint(String name, String descriptor) {
return nonNullparamHints.get(name, descriptor);
}
}