From aec5ec89e7386290efece3d731ea9342265b88cb Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Mon, 25 Mar 2019 17:24:07 +0300 Subject: [PATCH] FIR: Support deserialization for built-in classes content --- .../kotlin/fir/java/JavaSymbolProvider.kt | 8 +- .../kotlin/fir/resolve/FirSymbolProvider.kt | 4 + .../impl/FirCompositeSymbolProvider.kt | 12 + .../impl/FirDependenciesSymbolProviderImpl.kt | 12 + .../impl/FirLibrarySymbolProviderImpl.kt | 59 +- .../testData/builtIns/kotlin-collections.txt | 239 +++++ .../testData/builtIns/kotlin-ranges.txt | 105 ++ .../fir/resolve/testData/builtIns/kotlin.txt | 953 ++++++++++++++++++ .../BuiltInsDeserializationForFirTestCase.kt | 20 +- .../mppFakeOverrides/common/common.txt | 2 +- 10 files changed, 1398 insertions(+), 16 deletions(-) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt index ab2760ecf97..f417dd233a4 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt @@ -11,7 +11,10 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration import org.jetbrains.kotlin.fir.declarations.FirConstructor import org.jetbrains.kotlin.fir.declarations.FirRegularClass -import org.jetbrains.kotlin.fir.java.declarations.* +import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass +import org.jetbrains.kotlin.fir.java.declarations.FirJavaConstructor +import org.jetbrains.kotlin.fir.java.declarations.FirJavaField +import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod import org.jetbrains.kotlin.fir.resolve.AbstractFirSymbolProvider import org.jetbrains.kotlin.fir.resolve.constructType import org.jetbrains.kotlin.fir.symbols.CallableId @@ -22,6 +25,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl import org.jetbrains.kotlin.load.java.JavaClassFinder +import org.jetbrains.kotlin.load.java.JvmAnnotationNames import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName @@ -66,7 +70,7 @@ class JavaSymbolProvider( override fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol? { return classCache.lookupCacheOrCalculateWithPostCompute(classId, { val foundClass = findClass(classId) - if (foundClass == null) { + if (foundClass == null || foundClass.annotations.any { it.classId?.asSingleFqName() == JvmAnnotationNames.METADATA_FQ_NAME }) { null to null } else { FirClassSymbol(classId) to foundClass diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirSymbolProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirSymbolProvider.kt index 3be0713a280..95d8fd82e7e 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirSymbolProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/FirSymbolProvider.kt @@ -28,6 +28,10 @@ interface FirSymbolProvider { fun getCallableSymbols(callableId: CallableId): List fun getAllCallableNamesInPackage(fqName: FqName): Set = emptySet() + fun getClassNamesInPackage(fqName: FqName): Set = emptySet() + + fun getAllCallableNamesInClass(classId: ClassId): Set = emptySet() + fun getNestedClassesNamesInClass(classId: ClassId): Set = emptySet() fun getPackage(fqName: FqName): FqName? // TODO: Replace to symbol sometime diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirCompositeSymbolProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirCompositeSymbolProvider.kt index faff5af7a44..e9435220b63 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirCompositeSymbolProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirCompositeSymbolProvider.kt @@ -30,4 +30,16 @@ class FirCompositeSymbolProvider(val providers: List) : FirSy override fun getAllCallableNamesInPackage(fqName: FqName): Set { return providers.flatMapTo(mutableSetOf()) { it.getAllCallableNamesInPackage(fqName) } } + + override fun getClassNamesInPackage(fqName: FqName): Set { + return providers.flatMapTo(mutableSetOf()) { it.getClassNamesInPackage(fqName) } + } + + override fun getAllCallableNamesInClass(classId: ClassId): Set { + return providers.flatMapTo(mutableSetOf()) { it.getAllCallableNamesInClass(classId) } + } + + override fun getNestedClassesNamesInClass(classId: ClassId): Set { + return providers.flatMapTo(mutableSetOf()) { it.getNestedClassesNamesInClass(classId) } + } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirDependenciesSymbolProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirDependenciesSymbolProviderImpl.kt index 3e1d2732b99..9b8d58d0054 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirDependenciesSymbolProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirDependenciesSymbolProviderImpl.kt @@ -56,4 +56,16 @@ class FirDependenciesSymbolProviderImpl(val session: FirSession) : AbstractFirSy override fun getAllCallableNamesInPackage(fqName: FqName): Set { return dependencyProviders.flatMapTo(mutableSetOf()) { it.getAllCallableNamesInPackage(fqName) } } + + override fun getClassNamesInPackage(fqName: FqName): Set { + return dependencyProviders.flatMapTo(mutableSetOf()) { it.getClassNamesInPackage(fqName) } + } + + override fun getAllCallableNamesInClass(classId: ClassId): Set { + return dependencyProviders.flatMapTo(mutableSetOf()) { it.getAllCallableNamesInClass(classId) } + } + + override fun getNestedClassesNamesInClass(classId: ClassId): Set { + return dependencyProviders.flatMapTo(mutableSetOf()) { it.getNestedClassesNamesInClass(classId) } + } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt index 9a820c8f466..b2547896596 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt @@ -12,6 +12,9 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.SourceElement import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration +import org.jetbrains.kotlin.fir.declarations.FirDeclaration +import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl import org.jetbrains.kotlin.fir.deserialization.FirDeserializationComponents @@ -19,10 +22,7 @@ import org.jetbrains.kotlin.fir.deserialization.FirDeserializationContext import org.jetbrains.kotlin.fir.deserialization.FirTypeDeserializer import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.getOrPut -import org.jetbrains.kotlin.fir.symbols.CallableId -import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol -import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol -import org.jetbrains.kotlin.fir.symbols.ConeClassSymbol +import org.jetbrains.kotlin.fir.symbols.* import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl @@ -90,7 +90,6 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider } fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol? { - if (classId !in classDataFinder.allClassIds) return null return lookup.getOrPut(classId, { FirClassSymbol(classId) }) { symbol -> val classData = classDataFinder.findClassData(classId)!! @@ -130,7 +129,26 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider if (it == null) return@mapNotNullTo null FirResolvedTypeRefImpl(this@BuiltInsPackageFragment.session, null, it, false, emptyList()) } - // TODO: declarations (probably should be done later) + + val classTypeTable = TypeTable(classProto.typeTable) + val classDeserializer = FirDeserializationContext( + nameResolver, classTypeTable, + VersionRequirementTable.EMPTY, // TODO: + this@BuiltInsPackageFragment.session, + fqName, + null, + FirTypeDeserializer( + nameResolver, + classTypeTable, + classProto.typeParameterList, + null + ), + FirDeserializationComponents() + ).memberDeserializer + + // TODO: properties + nested classes + declarations += classData.classProto.functionList.map(classDeserializer::loadFunction) + } } } @@ -144,6 +162,10 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider fun getAllCallableNames(): Set { return packageProto.`package`.functionList.mapTo(mutableSetOf()) { nameResolver.getName(it.name) } } + + fun getAllClassNames(): Set { + return classDataFinder.allClassIds.mapTo(mutableSetOf()) { it.shortClassName } + } } override fun getPackage(fqName: FqName): FqName? { @@ -199,8 +221,9 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider override fun getCallableSymbols(callableId: CallableId): List { if (callableId.classId != null) { - // TODO: Support classes - return emptyList() + return getClassDeclarations(callableId.classId!!).filterIsInstance() + .filter { it.name == callableId.callableName } + .map { it.symbol } } return allPackageFragments[callableId.packageName]?.flatMap { @@ -213,4 +236,24 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider it.getAllCallableNames() } ?: emptySet() } + + override fun getClassNamesInPackage(fqName: FqName): Set { + return allPackageFragments[fqName]?.flatMapTo(mutableSetOf()) { + it.getAllClassNames() + } ?: emptySet() + } + + override fun getAllCallableNamesInClass(classId: ClassId): Set { + return getClassDeclarations(classId).filterIsInstance().mapTo(mutableSetOf()) { it.name } + } + + private fun getClassDeclarations(classId: ClassId): List { + @Suppress("UNCHECKED_CAST") + val classSymbol = getClassLikeSymbolByFqName(classId) as? FirBasedSymbol ?: return emptyList() + return classSymbol.fir.declarations + } + + override fun getNestedClassesNamesInClass(classId: ClassId): Set { + return getClassDeclarations(classId).filterIsInstance().mapTo(mutableSetOf()) { it.name } + } } diff --git a/compiler/fir/resolve/testData/builtIns/kotlin-collections.txt b/compiler/fir/resolve/testData/builtIns/kotlin-collections.txt index 8b137891791..b63fe322927 100644 --- a/compiler/fir/resolve/testData/builtIns/kotlin-collections.txt +++ b/compiler/fir/resolve/testData/builtIns/kotlin-collections.txt @@ -1 +1,240 @@ +public abstract class BooleanIterator : R|kotlin/collections/Iterator| { + public final operator fun next(): R|kotlin/Boolean| + + public abstract fun nextBoolean(): R|kotlin/Boolean| + +} + +public abstract class ByteIterator : R|kotlin/collections/Iterator| { + public final operator fun next(): R|kotlin/Byte| + + public abstract fun nextByte(): R|kotlin/Byte| + +} + +public abstract class CharIterator : R|kotlin/collections/Iterator| { + public final operator fun next(): R|kotlin/Char| + + public abstract fun nextChar(): R|kotlin/Char| + +} + + public abstract interface Collection : R|kotlin/collections/Iterable| { + public abstract operator fun contains(element: R|E|): R|kotlin/Boolean| + + public abstract fun containsAll(elements: R|kotlin/collections/Collection|): R|kotlin/Boolean| + + public abstract fun isEmpty(): R|kotlin/Boolean| + + public abstract operator fun iterator(): R|kotlin/collections/Iterator| + +} + +public abstract class DoubleIterator : R|kotlin/collections/Iterator| { + public final operator fun next(): R|kotlin/Double| + + public abstract fun nextDouble(): R|kotlin/Double| + +} + +public abstract class FloatIterator : R|kotlin/collections/Iterator| { + public final operator fun next(): R|kotlin/Float| + + public abstract fun nextFloat(): R|kotlin/Float| + +} + +public abstract class IntIterator : R|kotlin/collections/Iterator| { + public final operator fun next(): R|kotlin/Int| + + public abstract fun nextInt(): R|kotlin/Int| + +} + + public abstract interface Iterable : R|kotlin/Any| { + public abstract operator fun iterator(): R|kotlin/collections/Iterator| + +} + + public abstract interface Iterator : R|kotlin/Any| { + public abstract operator fun hasNext(): R|kotlin/Boolean| + + public abstract operator fun next(): R|T| + +} + + public abstract interface List : R|kotlin/collections/Collection| { + public abstract operator fun contains(element: R|E|): R|kotlin/Boolean| + + public abstract fun containsAll(elements: R|kotlin/collections/Collection|): R|kotlin/Boolean| + + public abstract operator fun get(index: R|kotlin/Int|): R|E| + + public abstract fun indexOf(element: R|E|): R|kotlin/Int| + + public abstract fun isEmpty(): R|kotlin/Boolean| + + public abstract operator fun iterator(): R|kotlin/collections/Iterator| + + public abstract fun lastIndexOf(element: R|E|): R|kotlin/Int| + + public abstract fun listIterator(): R|kotlin/collections/ListIterator| + + public abstract fun listIterator(index: R|kotlin/Int|): R|kotlin/collections/ListIterator| + + public abstract fun subList(fromIndex: R|kotlin/Int|, toIndex: R|kotlin/Int|): R|kotlin/collections/List| + +} + + public abstract interface ListIterator : R|kotlin/collections/Iterator| { + public abstract operator fun hasNext(): R|kotlin/Boolean| + + public abstract fun hasPrevious(): R|kotlin/Boolean| + + public abstract operator fun next(): R|T| + + public abstract fun nextIndex(): R|kotlin/Int| + + public abstract fun previous(): R|T| + + public abstract fun previousIndex(): R|kotlin/Int| + +} + +public abstract class LongIterator : R|kotlin/collections/Iterator| { + public final operator fun next(): R|kotlin/Long| + + public abstract fun nextLong(): R|kotlin/Long| + +} + + public abstract interface Map : R|kotlin/Any| { + public abstract fun containsKey(key: R|K|): R|kotlin/Boolean| + + public abstract fun containsValue(value: R|V|): R|kotlin/Boolean| + + public abstract operator fun get(key: R|K|): R|V| + + public open fun getOrDefault(key: R|K|, defaultValue: R|V|): R|V| + + public abstract fun isEmpty(): R|kotlin/Boolean| + +} + + public abstract interface MutableCollection : R|kotlin/collections/Collection|, R|kotlin/collections/MutableIterable| { + public abstract fun add(element: R|E|): R|kotlin/Boolean| + + public abstract fun addAll(elements: R|kotlin/collections/Collection|): R|kotlin/Boolean| + + public abstract fun clear(): R|kotlin/Unit| + + public abstract operator fun iterator(): R|kotlin/collections/MutableIterator| + + public abstract fun remove(element: R|E|): R|kotlin/Boolean| + + public abstract fun removeAll(elements: R|kotlin/collections/Collection|): R|kotlin/Boolean| + + public abstract fun retainAll(elements: R|kotlin/collections/Collection|): R|kotlin/Boolean| + +} + + public abstract interface MutableIterable : R|kotlin/collections/Iterable| { + public abstract operator fun iterator(): R|kotlin/collections/MutableIterator| + +} + + public abstract interface MutableIterator : R|kotlin/collections/Iterator| { + public abstract fun remove(): R|kotlin/Unit| + +} + + public abstract interface MutableList : R|kotlin/collections/List|, R|kotlin/collections/MutableCollection| { + public abstract fun add(element: R|E|): R|kotlin/Boolean| + + public abstract fun add(index: R|kotlin/Int|, element: R|E|): R|kotlin/Unit| + + public abstract fun addAll(index: R|kotlin/Int|, elements: R|kotlin/collections/Collection|): R|kotlin/Boolean| + + public abstract fun addAll(elements: R|kotlin/collections/Collection|): R|kotlin/Boolean| + + public abstract fun clear(): R|kotlin/Unit| + + public abstract fun listIterator(): R|kotlin/collections/MutableListIterator| + + public abstract fun listIterator(index: R|kotlin/Int|): R|kotlin/collections/MutableListIterator| + + public abstract fun remove(element: R|E|): R|kotlin/Boolean| + + public abstract fun removeAll(elements: R|kotlin/collections/Collection|): R|kotlin/Boolean| + + public abstract fun removeAt(index: R|kotlin/Int|): R|E| + + public abstract fun retainAll(elements: R|kotlin/collections/Collection|): R|kotlin/Boolean| + + public abstract operator fun set(index: R|kotlin/Int|, element: R|E|): R|E| + + public abstract fun subList(fromIndex: R|kotlin/Int|, toIndex: R|kotlin/Int|): R|kotlin/collections/MutableList| + +} + + public abstract interface MutableListIterator : R|kotlin/collections/ListIterator|, R|kotlin/collections/MutableIterator| { + public abstract fun add(element: R|T|): R|kotlin/Unit| + + public abstract operator fun hasNext(): R|kotlin/Boolean| + + public abstract operator fun next(): R|T| + + public abstract fun remove(): R|kotlin/Unit| + + public abstract fun set(element: R|T|): R|kotlin/Unit| + +} + + public abstract interface MutableMap : R|kotlin/collections/Map| { + public abstract fun clear(): R|kotlin/Unit| + + public abstract fun put(key: R|K|, value: R|V|): R|V| + + public abstract fun putAll(from: R|kotlin/collections/Map|): R|kotlin/Unit| + + public abstract fun remove(key: R|K|): R|V| + + public open fun remove(key: R|K|, value: R|V|): R|kotlin/Boolean| + +} + + public abstract interface MutableSet : R|kotlin/collections/Set|, R|kotlin/collections/MutableCollection| { + public abstract fun add(element: R|E|): R|kotlin/Boolean| + + public abstract fun addAll(elements: R|kotlin/collections/Collection|): R|kotlin/Boolean| + + public abstract fun clear(): R|kotlin/Unit| + + public abstract operator fun iterator(): R|kotlin/collections/MutableIterator| + + public abstract fun remove(element: R|E|): R|kotlin/Boolean| + + public abstract fun removeAll(elements: R|kotlin/collections/Collection|): R|kotlin/Boolean| + + public abstract fun retainAll(elements: R|kotlin/collections/Collection|): R|kotlin/Boolean| + +} + + public abstract interface Set : R|kotlin/collections/Collection| { + public abstract operator fun contains(element: R|E|): R|kotlin/Boolean| + + public abstract fun containsAll(elements: R|kotlin/collections/Collection|): R|kotlin/Boolean| + + public abstract fun isEmpty(): R|kotlin/Boolean| + + public abstract operator fun iterator(): R|kotlin/collections/Iterator| + +} + +public abstract class ShortIterator : R|kotlin/collections/Iterator| { + public final operator fun next(): R|kotlin/Short| + + public abstract fun nextShort(): R|kotlin/Short| + +} diff --git a/compiler/fir/resolve/testData/builtIns/kotlin-ranges.txt b/compiler/fir/resolve/testData/builtIns/kotlin-ranges.txt index 8b137891791..c673160c4e4 100644 --- a/compiler/fir/resolve/testData/builtIns/kotlin-ranges.txt +++ b/compiler/fir/resolve/testData/builtIns/kotlin-ranges.txt @@ -1 +1,106 @@ +public open class CharProgression : R|kotlin/collections/Iterable| { + public open operator fun equals(other: R|kotlin/Any|): R|kotlin/Boolean| + + public open fun hashCode(): R|kotlin/Int| + + public open fun isEmpty(): R|kotlin/Boolean| + + public open operator fun iterator(): R|kotlin/collections/CharIterator| + + public open fun toString(): R|kotlin/String| + +} + +internal final class CharProgressionIterator : R|kotlin/collections/CharIterator| { + public open operator fun hasNext(): R|kotlin/Boolean| + + public open fun nextChar(): R|kotlin/Char| + +} + +public final class CharRange : R|kotlin/ranges/CharProgression|, R|kotlin/ranges/ClosedRange| { + public open operator fun contains(value: R|kotlin/Char|): R|kotlin/Boolean| + + public open operator fun equals(other: R|kotlin/Any|): R|kotlin/Boolean| + + public open fun hashCode(): R|kotlin/Int| + + public open fun isEmpty(): R|kotlin/Boolean| + + public open fun toString(): R|kotlin/String| + +} + + public abstract interface ClosedRange : R|kotlin/Any| { + public open operator fun contains(value: R|T|): R|kotlin/Boolean| + + public open fun isEmpty(): R|kotlin/Boolean| + +} + +public open class IntProgression : R|kotlin/collections/Iterable| { + public open operator fun equals(other: R|kotlin/Any|): R|kotlin/Boolean| + + public open fun hashCode(): R|kotlin/Int| + + public open fun isEmpty(): R|kotlin/Boolean| + + public open operator fun iterator(): R|kotlin/collections/IntIterator| + + public open fun toString(): R|kotlin/String| + +} + +internal final class IntProgressionIterator : R|kotlin/collections/IntIterator| { + public open operator fun hasNext(): R|kotlin/Boolean| + + public open fun nextInt(): R|kotlin/Int| + +} + +public final class IntRange : R|kotlin/ranges/IntProgression|, R|kotlin/ranges/ClosedRange| { + public open operator fun contains(value: R|kotlin/Int|): R|kotlin/Boolean| + + public open operator fun equals(other: R|kotlin/Any|): R|kotlin/Boolean| + + public open fun hashCode(): R|kotlin/Int| + + public open fun isEmpty(): R|kotlin/Boolean| + + public open fun toString(): R|kotlin/String| + +} + +public open class LongProgression : R|kotlin/collections/Iterable| { + public open operator fun equals(other: R|kotlin/Any|): R|kotlin/Boolean| + + public open fun hashCode(): R|kotlin/Int| + + public open fun isEmpty(): R|kotlin/Boolean| + + public open operator fun iterator(): R|kotlin/collections/LongIterator| + + public open fun toString(): R|kotlin/String| + +} + +internal final class LongProgressionIterator : R|kotlin/collections/LongIterator| { + public open operator fun hasNext(): R|kotlin/Boolean| + + public open fun nextLong(): R|kotlin/Long| + +} + +public final class LongRange : R|kotlin/ranges/LongProgression|, R|kotlin/ranges/ClosedRange| { + public open operator fun contains(value: R|kotlin/Long|): R|kotlin/Boolean| + + public open operator fun equals(other: R|kotlin/Any|): R|kotlin/Boolean| + + public open fun hashCode(): R|kotlin/Int| + + public open fun isEmpty(): R|kotlin/Boolean| + + public open fun toString(): R|kotlin/String| + +} diff --git a/compiler/fir/resolve/testData/builtIns/kotlin.txt b/compiler/fir/resolve/testData/builtIns/kotlin.txt index 202d65d2045..1b8aed395d1 100644 --- a/compiler/fir/resolve/testData/builtIns/kotlin.txt +++ b/compiler/fir/resolve/testData/builtIns/kotlin.txt @@ -28,3 +28,956 @@ public final operator fun R|kotlin/String|.plus(other: R|kotlin/Any|): R|kotlin/ public final fun R|kotlin/Any|.toString(): R|kotlin/String| +public abstract interface Annotation : R|kotlin/Any| { +} + +public open class Any { + public open operator fun equals(other: R|kotlin/Any|): R|kotlin/Boolean| + + public open fun hashCode(): R|kotlin/Int| + + public open fun toString(): R|kotlin/String| + +} + + public final class Array : R|kotlin/Any| { + public final operator fun get(index: R|kotlin/Int|): R|T| + + public final operator fun iterator(): R|kotlin/collections/Iterator| + + public final operator fun set(index: R|kotlin/Int|, value: R|T|): R|kotlin/Unit| + +} + +public final class Boolean : R|kotlin/Comparable| { + public final infix fun and(other: R|kotlin/Boolean|): R|kotlin/Boolean| + + public open operator fun compareTo(other: R|kotlin/Boolean|): R|kotlin/Int| + + public final operator fun not(): R|kotlin/Boolean| + + public final infix fun or(other: R|kotlin/Boolean|): R|kotlin/Boolean| + + public final infix fun xor(other: R|kotlin/Boolean|): R|kotlin/Boolean| + +} + +public final class BooleanArray : R|kotlin/Any| { + public final operator fun get(index: R|kotlin/Int|): R|kotlin/Boolean| + + public final operator fun iterator(): R|kotlin/collections/BooleanIterator| + + public final operator fun set(index: R|kotlin/Int|, value: R|kotlin/Boolean|): R|kotlin/Unit| + +} + +public final class Byte : R|kotlin/Number|, R|kotlin/Comparable| { + public open operator fun compareTo(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Double|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Float|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Long|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun dec(): R|kotlin/Byte| + + public final operator fun div(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun div(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun div(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun div(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun div(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun div(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun inc(): R|kotlin/Byte| + + public final operator fun minus(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun minus(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun minus(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun minus(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun minus(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun minus(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun mod(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun mod(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun mod(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun mod(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun mod(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun mod(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun plus(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun plus(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun plus(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun plus(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun plus(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun plus(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun rangeTo(other: R|kotlin/Byte|): R|kotlin/ranges/IntRange| + + public final operator fun rangeTo(other: R|kotlin/Int|): R|kotlin/ranges/IntRange| + + public final operator fun rangeTo(other: R|kotlin/Long|): R|kotlin/ranges/LongRange| + + public final operator fun rangeTo(other: R|kotlin/Short|): R|kotlin/ranges/IntRange| + + public final operator fun rem(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun rem(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun rem(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun rem(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun rem(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun rem(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun times(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun times(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun times(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun times(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun times(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun times(other: R|kotlin/Short|): R|kotlin/Int| + + public open fun toByte(): R|kotlin/Byte| + + public open fun toChar(): R|kotlin/Char| + + public open fun toDouble(): R|kotlin/Double| + + public open fun toFloat(): R|kotlin/Float| + + public open fun toInt(): R|kotlin/Int| + + public open fun toLong(): R|kotlin/Long| + + public open fun toShort(): R|kotlin/Short| + + public final operator fun unaryMinus(): R|kotlin/Int| + + public final operator fun unaryPlus(): R|kotlin/Int| + +} + +public final class ByteArray : R|kotlin/Any| { + public final operator fun get(index: R|kotlin/Int|): R|kotlin/Byte| + + public final operator fun iterator(): R|kotlin/collections/ByteIterator| + + public final operator fun set(index: R|kotlin/Int|, value: R|kotlin/Byte|): R|kotlin/Unit| + +} + +public final class Char : R|kotlin/Comparable| { + public open operator fun compareTo(other: R|kotlin/Char|): R|kotlin/Int| + + public final operator fun dec(): R|kotlin/Char| + + public final operator fun inc(): R|kotlin/Char| + + public final operator fun minus(other: R|kotlin/Char|): R|kotlin/Int| + + public final operator fun minus(other: R|kotlin/Int|): R|kotlin/Char| + + public final operator fun plus(other: R|kotlin/Int|): R|kotlin/Char| + + public final operator fun rangeTo(other: R|kotlin/Char|): R|kotlin/ranges/CharRange| + + public final fun toByte(): R|kotlin/Byte| + + public final fun toChar(): R|kotlin/Char| + + public final fun toDouble(): R|kotlin/Double| + + public final fun toFloat(): R|kotlin/Float| + + public final fun toInt(): R|kotlin/Int| + + public final fun toLong(): R|kotlin/Long| + + public final fun toShort(): R|kotlin/Short| + +} + +public final class CharArray : R|kotlin/Any| { + public final operator fun get(index: R|kotlin/Int|): R|kotlin/Char| + + public final operator fun iterator(): R|kotlin/collections/CharIterator| + + public final operator fun set(index: R|kotlin/Int|, value: R|kotlin/Char|): R|kotlin/Unit| + +} + +public abstract interface CharSequence : R|kotlin/Any| { + public abstract operator fun get(index: R|kotlin/Int|): R|kotlin/Char| + + public abstract fun subSequence(startIndex: R|kotlin/Int|, endIndex: R|kotlin/Int|): R|kotlin/CharSequence| + +} + +public abstract interface Cloneable : R|kotlin/Any| { + protected open fun clone(): R|kotlin/Any| + +} + + public abstract interface Comparable : R|kotlin/Any| { + public abstract operator fun compareTo(other: R|T|): R|kotlin/Int| + +} + +public final annotation class Deprecated : R|kotlin/Annotation| { +} + +public final enum class DeprecationLevel : R|kotlin/Enum| { +} + +public final class Double : R|kotlin/Number|, R|kotlin/Comparable| { + public final operator fun compareTo(other: R|kotlin/Byte|): R|kotlin/Int| + + public open operator fun compareTo(other: R|kotlin/Double|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Float|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Long|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun dec(): R|kotlin/Double| + + public final operator fun div(other: R|kotlin/Byte|): R|kotlin/Double| + + public final operator fun div(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun div(other: R|kotlin/Float|): R|kotlin/Double| + + public final operator fun div(other: R|kotlin/Int|): R|kotlin/Double| + + public final operator fun div(other: R|kotlin/Long|): R|kotlin/Double| + + public final operator fun div(other: R|kotlin/Short|): R|kotlin/Double| + + public final operator fun inc(): R|kotlin/Double| + + public final operator fun minus(other: R|kotlin/Byte|): R|kotlin/Double| + + public final operator fun minus(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun minus(other: R|kotlin/Float|): R|kotlin/Double| + + public final operator fun minus(other: R|kotlin/Int|): R|kotlin/Double| + + public final operator fun minus(other: R|kotlin/Long|): R|kotlin/Double| + + public final operator fun minus(other: R|kotlin/Short|): R|kotlin/Double| + + public final operator fun mod(other: R|kotlin/Byte|): R|kotlin/Double| + + public final operator fun mod(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun mod(other: R|kotlin/Float|): R|kotlin/Double| + + public final operator fun mod(other: R|kotlin/Int|): R|kotlin/Double| + + public final operator fun mod(other: R|kotlin/Long|): R|kotlin/Double| + + public final operator fun mod(other: R|kotlin/Short|): R|kotlin/Double| + + public final operator fun plus(other: R|kotlin/Byte|): R|kotlin/Double| + + public final operator fun plus(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun plus(other: R|kotlin/Float|): R|kotlin/Double| + + public final operator fun plus(other: R|kotlin/Int|): R|kotlin/Double| + + public final operator fun plus(other: R|kotlin/Long|): R|kotlin/Double| + + public final operator fun plus(other: R|kotlin/Short|): R|kotlin/Double| + + public final operator fun rem(other: R|kotlin/Byte|): R|kotlin/Double| + + public final operator fun rem(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun rem(other: R|kotlin/Float|): R|kotlin/Double| + + public final operator fun rem(other: R|kotlin/Int|): R|kotlin/Double| + + public final operator fun rem(other: R|kotlin/Long|): R|kotlin/Double| + + public final operator fun rem(other: R|kotlin/Short|): R|kotlin/Double| + + public final operator fun times(other: R|kotlin/Byte|): R|kotlin/Double| + + public final operator fun times(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun times(other: R|kotlin/Float|): R|kotlin/Double| + + public final operator fun times(other: R|kotlin/Int|): R|kotlin/Double| + + public final operator fun times(other: R|kotlin/Long|): R|kotlin/Double| + + public final operator fun times(other: R|kotlin/Short|): R|kotlin/Double| + + public open fun toByte(): R|kotlin/Byte| + + public open fun toChar(): R|kotlin/Char| + + public open fun toDouble(): R|kotlin/Double| + + public open fun toFloat(): R|kotlin/Float| + + public open fun toInt(): R|kotlin/Int| + + public open fun toLong(): R|kotlin/Long| + + public open fun toShort(): R|kotlin/Short| + + public final operator fun unaryMinus(): R|kotlin/Double| + + public final operator fun unaryPlus(): R|kotlin/Double| + +} + +public final class DoubleArray : R|kotlin/Any| { + public final operator fun get(index: R|kotlin/Int|): R|kotlin/Double| + + public final operator fun iterator(): R|kotlin/collections/DoubleIterator| + + public final operator fun set(index: R|kotlin/Int|, value: R|kotlin/Double|): R|kotlin/Unit| + +} + +public final annotation class DslMarker : R|kotlin/Annotation| { +} + + public abstract class Enum : R|kotlin/Comparable| { + protected final fun clone(): R|kotlin/Any| + + public final operator fun compareTo(other: R|E|): R|kotlin/Int| + + public final operator fun equals(other: R|kotlin/Any|): R|kotlin/Boolean| + + public final fun hashCode(): R|kotlin/Int| + + public open fun toString(): R|kotlin/String| + +} + +public final annotation class ExtensionFunctionType : R|kotlin/Annotation| { +} + +public final class Float : R|kotlin/Number|, R|kotlin/Comparable| { + public final operator fun compareTo(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Double|): R|kotlin/Int| + + public open operator fun compareTo(other: R|kotlin/Float|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Long|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun dec(): R|kotlin/Float| + + public final operator fun div(other: R|kotlin/Byte|): R|kotlin/Float| + + public final operator fun div(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun div(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun div(other: R|kotlin/Int|): R|kotlin/Float| + + public final operator fun div(other: R|kotlin/Long|): R|kotlin/Float| + + public final operator fun div(other: R|kotlin/Short|): R|kotlin/Float| + + public final operator fun inc(): R|kotlin/Float| + + public final operator fun minus(other: R|kotlin/Byte|): R|kotlin/Float| + + public final operator fun minus(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun minus(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun minus(other: R|kotlin/Int|): R|kotlin/Float| + + public final operator fun minus(other: R|kotlin/Long|): R|kotlin/Float| + + public final operator fun minus(other: R|kotlin/Short|): R|kotlin/Float| + + public final operator fun mod(other: R|kotlin/Byte|): R|kotlin/Float| + + public final operator fun mod(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun mod(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun mod(other: R|kotlin/Int|): R|kotlin/Float| + + public final operator fun mod(other: R|kotlin/Long|): R|kotlin/Float| + + public final operator fun mod(other: R|kotlin/Short|): R|kotlin/Float| + + public final operator fun plus(other: R|kotlin/Byte|): R|kotlin/Float| + + public final operator fun plus(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun plus(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun plus(other: R|kotlin/Int|): R|kotlin/Float| + + public final operator fun plus(other: R|kotlin/Long|): R|kotlin/Float| + + public final operator fun plus(other: R|kotlin/Short|): R|kotlin/Float| + + public final operator fun rem(other: R|kotlin/Byte|): R|kotlin/Float| + + public final operator fun rem(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun rem(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun rem(other: R|kotlin/Int|): R|kotlin/Float| + + public final operator fun rem(other: R|kotlin/Long|): R|kotlin/Float| + + public final operator fun rem(other: R|kotlin/Short|): R|kotlin/Float| + + public final operator fun times(other: R|kotlin/Byte|): R|kotlin/Float| + + public final operator fun times(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun times(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun times(other: R|kotlin/Int|): R|kotlin/Float| + + public final operator fun times(other: R|kotlin/Long|): R|kotlin/Float| + + public final operator fun times(other: R|kotlin/Short|): R|kotlin/Float| + + public open fun toByte(): R|kotlin/Byte| + + public open fun toChar(): R|kotlin/Char| + + public open fun toDouble(): R|kotlin/Double| + + public open fun toFloat(): R|kotlin/Float| + + public open fun toInt(): R|kotlin/Int| + + public open fun toLong(): R|kotlin/Long| + + public open fun toShort(): R|kotlin/Short| + + public final operator fun unaryMinus(): R|kotlin/Float| + + public final operator fun unaryPlus(): R|kotlin/Float| + +} + +public final class FloatArray : R|kotlin/Any| { + public final operator fun get(index: R|kotlin/Int|): R|kotlin/Float| + + public final operator fun iterator(): R|kotlin/collections/FloatIterator| + + public final operator fun set(index: R|kotlin/Int|, value: R|kotlin/Float|): R|kotlin/Unit| + +} + + public abstract interface Function : R|kotlin/Any| { +} + +public final class Int : R|kotlin/Number|, R|kotlin/Comparable| { + public final infix fun and(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Double|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Float|): R|kotlin/Int| + + public open operator fun compareTo(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Long|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun dec(): R|kotlin/Int| + + public final operator fun div(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun div(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun div(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun div(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun div(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun div(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun inc(): R|kotlin/Int| + + public final fun inv(): R|kotlin/Int| + + public final operator fun minus(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun minus(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun minus(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun minus(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun minus(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun minus(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun mod(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun mod(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun mod(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun mod(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun mod(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun mod(other: R|kotlin/Short|): R|kotlin/Int| + + public final infix fun or(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun plus(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun plus(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun plus(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun plus(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun plus(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun plus(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun rangeTo(other: R|kotlin/Byte|): R|kotlin/ranges/IntRange| + + public final operator fun rangeTo(other: R|kotlin/Int|): R|kotlin/ranges/IntRange| + + public final operator fun rangeTo(other: R|kotlin/Long|): R|kotlin/ranges/LongRange| + + public final operator fun rangeTo(other: R|kotlin/Short|): R|kotlin/ranges/IntRange| + + public final operator fun rem(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun rem(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun rem(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun rem(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun rem(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun rem(other: R|kotlin/Short|): R|kotlin/Int| + + public final infix fun shl(bitCount: R|kotlin/Int|): R|kotlin/Int| + + public final infix fun shr(bitCount: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun times(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun times(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun times(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun times(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun times(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun times(other: R|kotlin/Short|): R|kotlin/Int| + + public open fun toByte(): R|kotlin/Byte| + + public open fun toChar(): R|kotlin/Char| + + public open fun toDouble(): R|kotlin/Double| + + public open fun toFloat(): R|kotlin/Float| + + public open fun toInt(): R|kotlin/Int| + + public open fun toLong(): R|kotlin/Long| + + public open fun toShort(): R|kotlin/Short| + + public final operator fun unaryMinus(): R|kotlin/Int| + + public final operator fun unaryPlus(): R|kotlin/Int| + + public final infix fun ushr(bitCount: R|kotlin/Int|): R|kotlin/Int| + + public final infix fun xor(other: R|kotlin/Int|): R|kotlin/Int| + +} + +public final class IntArray : R|kotlin/Any| { + public final operator fun get(index: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun iterator(): R|kotlin/collections/IntIterator| + + public final operator fun set(index: R|kotlin/Int|, value: R|kotlin/Int|): R|kotlin/Unit| + +} + +public final class Long : R|kotlin/Number|, R|kotlin/Comparable| { + public final infix fun and(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun compareTo(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Double|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Float|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Int|): R|kotlin/Int| + + public open operator fun compareTo(other: R|kotlin/Long|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun dec(): R|kotlin/Long| + + public final operator fun div(other: R|kotlin/Byte|): R|kotlin/Long| + + public final operator fun div(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun div(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun div(other: R|kotlin/Int|): R|kotlin/Long| + + public final operator fun div(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun div(other: R|kotlin/Short|): R|kotlin/Long| + + public final operator fun inc(): R|kotlin/Long| + + public final fun inv(): R|kotlin/Long| + + public final operator fun minus(other: R|kotlin/Byte|): R|kotlin/Long| + + public final operator fun minus(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun minus(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun minus(other: R|kotlin/Int|): R|kotlin/Long| + + public final operator fun minus(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun minus(other: R|kotlin/Short|): R|kotlin/Long| + + public final operator fun mod(other: R|kotlin/Byte|): R|kotlin/Long| + + public final operator fun mod(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun mod(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun mod(other: R|kotlin/Int|): R|kotlin/Long| + + public final operator fun mod(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun mod(other: R|kotlin/Short|): R|kotlin/Long| + + public final infix fun or(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun plus(other: R|kotlin/Byte|): R|kotlin/Long| + + public final operator fun plus(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun plus(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun plus(other: R|kotlin/Int|): R|kotlin/Long| + + public final operator fun plus(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun plus(other: R|kotlin/Short|): R|kotlin/Long| + + public final operator fun rangeTo(other: R|kotlin/Byte|): R|kotlin/ranges/LongRange| + + public final operator fun rangeTo(other: R|kotlin/Int|): R|kotlin/ranges/LongRange| + + public final operator fun rangeTo(other: R|kotlin/Long|): R|kotlin/ranges/LongRange| + + public final operator fun rangeTo(other: R|kotlin/Short|): R|kotlin/ranges/LongRange| + + public final operator fun rem(other: R|kotlin/Byte|): R|kotlin/Long| + + public final operator fun rem(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun rem(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun rem(other: R|kotlin/Int|): R|kotlin/Long| + + public final operator fun rem(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun rem(other: R|kotlin/Short|): R|kotlin/Long| + + public final infix fun shl(bitCount: R|kotlin/Int|): R|kotlin/Long| + + public final infix fun shr(bitCount: R|kotlin/Int|): R|kotlin/Long| + + public final operator fun times(other: R|kotlin/Byte|): R|kotlin/Long| + + public final operator fun times(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun times(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun times(other: R|kotlin/Int|): R|kotlin/Long| + + public final operator fun times(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun times(other: R|kotlin/Short|): R|kotlin/Long| + + public open fun toByte(): R|kotlin/Byte| + + public open fun toChar(): R|kotlin/Char| + + public open fun toDouble(): R|kotlin/Double| + + public open fun toFloat(): R|kotlin/Float| + + public open fun toInt(): R|kotlin/Int| + + public open fun toLong(): R|kotlin/Long| + + public open fun toShort(): R|kotlin/Short| + + public final operator fun unaryMinus(): R|kotlin/Long| + + public final operator fun unaryPlus(): R|kotlin/Long| + + public final infix fun ushr(bitCount: R|kotlin/Int|): R|kotlin/Long| + + public final infix fun xor(other: R|kotlin/Long|): R|kotlin/Long| + +} + +public final class LongArray : R|kotlin/Any| { + public final operator fun get(index: R|kotlin/Int|): R|kotlin/Long| + + public final operator fun iterator(): R|kotlin/collections/LongIterator| + + public final operator fun set(index: R|kotlin/Int|, value: R|kotlin/Long|): R|kotlin/Unit| + +} + +public final class Nothing { +} + +public abstract class Number : R|kotlin/Any| { + public abstract fun toByte(): R|kotlin/Byte| + + public abstract fun toChar(): R|kotlin/Char| + + public abstract fun toDouble(): R|kotlin/Double| + + public abstract fun toFloat(): R|kotlin/Float| + + public abstract fun toInt(): R|kotlin/Int| + + public abstract fun toLong(): R|kotlin/Long| + + public abstract fun toShort(): R|kotlin/Short| + +} + +public final annotation class ParameterName : R|kotlin/Annotation| { +} + +public final annotation class PublishedApi : R|kotlin/Annotation| { +} + +public final annotation class ReplaceWith : R|kotlin/Annotation| { +} + +public final class Short : R|kotlin/Number|, R|kotlin/Comparable| { + public final operator fun compareTo(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Double|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Float|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun compareTo(other: R|kotlin/Long|): R|kotlin/Int| + + public open operator fun compareTo(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun dec(): R|kotlin/Short| + + public final operator fun div(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun div(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun div(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun div(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun div(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun div(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun inc(): R|kotlin/Short| + + public final operator fun minus(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun minus(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun minus(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun minus(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun minus(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun minus(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun mod(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun mod(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun mod(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun mod(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun mod(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun mod(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun plus(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun plus(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun plus(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun plus(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun plus(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun plus(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun rangeTo(other: R|kotlin/Byte|): R|kotlin/ranges/IntRange| + + public final operator fun rangeTo(other: R|kotlin/Int|): R|kotlin/ranges/IntRange| + + public final operator fun rangeTo(other: R|kotlin/Long|): R|kotlin/ranges/LongRange| + + public final operator fun rangeTo(other: R|kotlin/Short|): R|kotlin/ranges/IntRange| + + public final operator fun rem(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun rem(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun rem(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun rem(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun rem(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun rem(other: R|kotlin/Short|): R|kotlin/Int| + + public final operator fun times(other: R|kotlin/Byte|): R|kotlin/Int| + + public final operator fun times(other: R|kotlin/Double|): R|kotlin/Double| + + public final operator fun times(other: R|kotlin/Float|): R|kotlin/Float| + + public final operator fun times(other: R|kotlin/Int|): R|kotlin/Int| + + public final operator fun times(other: R|kotlin/Long|): R|kotlin/Long| + + public final operator fun times(other: R|kotlin/Short|): R|kotlin/Int| + + public open fun toByte(): R|kotlin/Byte| + + public open fun toChar(): R|kotlin/Char| + + public open fun toDouble(): R|kotlin/Double| + + public open fun toFloat(): R|kotlin/Float| + + public open fun toInt(): R|kotlin/Int| + + public open fun toLong(): R|kotlin/Long| + + public open fun toShort(): R|kotlin/Short| + + public final operator fun unaryMinus(): R|kotlin/Int| + + public final operator fun unaryPlus(): R|kotlin/Int| + +} + +public final class ShortArray : R|kotlin/Any| { + public final operator fun get(index: R|kotlin/Int|): R|kotlin/Short| + + public final operator fun iterator(): R|kotlin/collections/ShortIterator| + + public final operator fun set(index: R|kotlin/Int|, value: R|kotlin/Short|): R|kotlin/Unit| + +} + +public final annotation class SinceKotlin : R|kotlin/Annotation| { +} + +public final class String : R|kotlin/Comparable|, R|kotlin/CharSequence| { + public open operator fun compareTo(other: R|kotlin/String|): R|kotlin/Int| + + public open operator fun get(index: R|kotlin/Int|): R|kotlin/Char| + + public final operator fun plus(other: R|kotlin/Any|): R|kotlin/String| + + public open fun subSequence(startIndex: R|kotlin/Int|, endIndex: R|kotlin/Int|): R|kotlin/CharSequence| + +} + +public final annotation class Suppress : R|kotlin/Annotation| { +} + +public open class Throwable : R|kotlin/Any| { +} + +public final object Unit : R|kotlin/Any| { + public open fun toString(): R|kotlin/String| + +} + +public final annotation class UnsafeVariance : R|kotlin/Annotation| { +} + diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/BuiltInsDeserializationForFirTestCase.kt b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/BuiltInsDeserializationForFirTestCase.kt index b203db9b11e..275ff3605a5 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/BuiltInsDeserializationForFirTestCase.kt +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/BuiltInsDeserializationForFirTestCase.kt @@ -11,6 +11,8 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol +import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.KotlinTestUtils @@ -22,31 +24,39 @@ class BuiltInsDeserializationForFirTestCase : AbstractFirResolveWithSessionTestC return createEnvironmentWithJdk(ConfigurationKind.ALL, TestJdkKind.FULL_JDK) } - fun testCallables() { + fun testBuiltInPackagesContent() { for (packageFqName in listOf( KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME, KotlinBuiltIns.COLLECTIONS_PACKAGE_FQ_NAME, KotlinBuiltIns.RANGES_PACKAGE_FQ_NAME )) { - checkCallablesInPackage(packageFqName) + checkPackageContent(packageFqName) } } - private fun checkCallablesInPackage(packageFqName: FqName) { + private fun checkPackageContent(packageFqName: FqName) { val session = createSession(project, GlobalSearchScope.allScope(project)) val provider = session.getService(FirSymbolProvider::class) - val names = provider.getAllCallableNamesInPackage(packageFqName) val builder = StringBuilder() val firRenderer = FirRenderer(builder) - for (name in names) { + for (name in provider.getAllCallableNamesInPackage(packageFqName)) { for (symbol in provider.getCallableSymbols(CallableId(packageFqName, null, name))) { (symbol as FirCallableSymbol).fir.accept(firRenderer) builder.appendln() } } + for (name in provider.getClassNamesInPackage(packageFqName)) { + val classLikeSymbol = + provider.getClassLikeSymbolByFqName(ClassId.topLevel(packageFqName.child(name))) as FirClassSymbol? + ?: continue + classLikeSymbol.fir.accept(firRenderer) + builder.appendln() + } + + KotlinTestUtils.assertEqualsToFile( File("compiler/fir/resolve/testData/builtIns/" + packageFqName.asString().replace('.', '-') + ".txt"), builder.toString() diff --git a/idea/testData/fir/multiModule/mppFakeOverrides/common/common.txt b/idea/testData/fir/multiModule/mppFakeOverrides/common/common.txt index 80722690bd4..947010b550b 100644 --- a/idea/testData/fir/multiModule/mppFakeOverrides/common/common.txt +++ b/idea/testData/fir/multiModule/mppFakeOverrides/common/common.txt @@ -17,7 +17,7 @@ FILE: common.kt } public open fun baz(arg: R|kotlin/CharSequence|): R|kotlin/String| { - ^baz R|/arg|.#() + ^baz R|/arg|.R|kotlin/Any.toString|() } }