FIR: add implicit primary constructors, add delegated types to them
So #KT-24088 In Progress
This commit is contained in:
@@ -37,6 +37,10 @@ class RawFirBuilder(val session: FirSession) {
|
||||
|
||||
private val implicitUnitType = FirImplicitUnitType(session, null)
|
||||
|
||||
private val implicitAnyType = FirImplicitAnyType(session, null)
|
||||
|
||||
private val implicitEnumType = FirImplicitEnumType(session, null)
|
||||
|
||||
fun buildFirFile(file: KtFile): FirFile {
|
||||
return file.accept(Visitor(), Unit) as FirFile
|
||||
}
|
||||
@@ -204,13 +208,15 @@ class RawFirBuilder(val session: FirSession) {
|
||||
|
||||
private fun KtClassOrObject.extractSuperTypeListEntriesTo(container: FirClassImpl) {
|
||||
var superTypeCallEntry: KtSuperTypeCallEntry? = null
|
||||
var delegatedSuperType: FirType? = null
|
||||
for (superTypeListEntry in superTypeListEntries) {
|
||||
when (superTypeListEntry) {
|
||||
is KtSuperTypeEntry -> {
|
||||
container.superTypes += superTypeListEntry.typeReference.toFirOrErrorType()
|
||||
}
|
||||
is KtSuperTypeCallEntry -> {
|
||||
container.superTypes += superTypeListEntry.calleeExpression.typeReference.toFirOrErrorType()
|
||||
delegatedSuperType = superTypeListEntry.calleeExpression.typeReference.toFirOrErrorType()
|
||||
container.superTypes += delegatedSuperType
|
||||
superTypeCallEntry = superTypeListEntry
|
||||
}
|
||||
is KtDelegatedSuperTypeEntry -> {
|
||||
@@ -222,31 +228,40 @@ class RawFirBuilder(val session: FirSession) {
|
||||
}
|
||||
}
|
||||
}
|
||||
val firPrimaryConstructor = primaryConstructor?.toFirConstructor(superTypeCallEntry) ?: return
|
||||
fun isEnum() = this is KtClass && this.isEnum()
|
||||
if (this is KtClass && this.isInterface()) return
|
||||
if (!this.hasPrimaryConstructor()) return
|
||||
val firPrimaryConstructor = primaryConstructor.toFirConstructor(
|
||||
superTypeCallEntry,
|
||||
delegatedSuperType = delegatedSuperType ?: (if (isEnum()) implicitEnumType else implicitAnyType),
|
||||
owner = this
|
||||
)
|
||||
container.declarations += firPrimaryConstructor
|
||||
}
|
||||
|
||||
private fun KtPrimaryConstructor.toFirConstructor(superTypeCallEntry: KtSuperTypeCallEntry?): FirConstructor {
|
||||
private fun KtPrimaryConstructor?.toFirConstructor(
|
||||
superTypeCallEntry: KtSuperTypeCallEntry?,
|
||||
delegatedSuperType: FirType,
|
||||
owner: KtClassOrObject
|
||||
): FirConstructor {
|
||||
val constructorCallee = superTypeCallEntry?.calleeExpression
|
||||
val firDelegatedCall = constructorCallee?.let {
|
||||
FirDelegatedConstructorCallImpl(
|
||||
session,
|
||||
constructorCallee,
|
||||
FirErrorTypeImpl(session, constructorCallee, "Not implemented yet"),
|
||||
isThis = false
|
||||
).apply {
|
||||
// TODO: arguments are not needed for light classes, but will be needed later
|
||||
//superTypeCallEntry.extractArgumentsTo(this)
|
||||
}
|
||||
val firDelegatedCall = FirDelegatedConstructorCallImpl(
|
||||
session,
|
||||
constructorCallee ?: (this ?: owner),
|
||||
delegatedSuperType,
|
||||
isThis = false
|
||||
).apply {
|
||||
// TODO: arguments are not needed for light classes, but will be needed later
|
||||
//superTypeCallEntry.extractArgumentsTo(this)
|
||||
}
|
||||
val firConstructor = FirPrimaryConstructorImpl(
|
||||
session,
|
||||
this,
|
||||
visibility,
|
||||
this ?: owner,
|
||||
this?.visibility ?: Visibilities.UNKNOWN,
|
||||
firDelegatedCall
|
||||
)
|
||||
extractAnnotationsTo(firConstructor)
|
||||
extractValueParametersTo(firConstructor)
|
||||
this?.extractAnnotationsTo(firConstructor)
|
||||
this?.extractValueParametersTo(firConstructor)
|
||||
return firConstructor
|
||||
}
|
||||
|
||||
|
||||
+15
-9
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.fir.symbols.*
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.impl.*
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
|
||||
class FirTypeResolverImpl : FirTypeResolver {
|
||||
@@ -56,7 +57,9 @@ class FirTypeResolverImpl : FirTypeResolver {
|
||||
}
|
||||
}
|
||||
|
||||
private val implicitUnitTypeSymbols = mutableMapOf<FirSession, ConeSymbol>()
|
||||
private data class NameInSession(val session: FirSession, val name: Name)
|
||||
|
||||
private val implicitBuiltinTypeSymbols = mutableMapOf<NameInSession, ConeSymbol>()
|
||||
|
||||
override fun resolveToSymbol(
|
||||
type: FirType,
|
||||
@@ -91,14 +94,17 @@ class FirTypeResolverImpl : FirTypeResolver {
|
||||
// TODO: Imports
|
||||
resolvedSymbol ?: qualifierResolver.resolveSymbol(type.qualifier)
|
||||
}
|
||||
is FirImplicitUnitType -> implicitUnitTypeSymbols[type.session] ?: run {
|
||||
var resolvedSymbol: ConeSymbol? = null
|
||||
scope.processClassifiersByName(KotlinBuiltIns.FQ_NAMES.unit.shortName(), position) {
|
||||
resolvedSymbol = (it as ConeClassLikeSymbol)
|
||||
resolvedSymbol == null
|
||||
is FirImplicitBuiltinType -> {
|
||||
val nameInSession = NameInSession(type.session, type.name)
|
||||
implicitBuiltinTypeSymbols[nameInSession] ?: run {
|
||||
var resolvedSymbol: ConeSymbol? = null
|
||||
scope.processClassifiersByName(type.name, position) {
|
||||
resolvedSymbol = (it as ConeClassLikeSymbol)
|
||||
resolvedSymbol == null
|
||||
}
|
||||
implicitBuiltinTypeSymbols[nameInSession] = resolvedSymbol!!
|
||||
resolvedSymbol
|
||||
}
|
||||
implicitUnitTypeSymbols[type.session] = resolvedSymbol!!
|
||||
resolvedSymbol
|
||||
}
|
||||
else -> null
|
||||
}
|
||||
@@ -129,7 +135,7 @@ class FirTypeResolverImpl : FirTypeResolver {
|
||||
type.returnType.coneTypeUnsafe()
|
||||
)
|
||||
}
|
||||
is FirImplicitUnitType -> {
|
||||
is FirImplicitBuiltinType -> {
|
||||
resolveToSymbol(type, scope, position)!!.toConeKotlinType(emptyList())!!
|
||||
}
|
||||
is FirDynamicType, is FirImplicitType, is FirDelegatedType -> {
|
||||
|
||||
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitType
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||
import org.jetbrains.kotlin.name.SpecialNames
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
@@ -387,10 +387,12 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
|
||||
override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall) {
|
||||
if (delegatedConstructorCall.isSuper) {
|
||||
print(": super")
|
||||
print(": super<")
|
||||
} else if (delegatedConstructorCall.isThis) {
|
||||
print(": this")
|
||||
print(": this<")
|
||||
}
|
||||
delegatedConstructorCall.constructedType.accept(this)
|
||||
print(">")
|
||||
visitCall(delegatedConstructorCall)
|
||||
}
|
||||
|
||||
@@ -411,7 +413,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
}
|
||||
|
||||
override fun visitImplicitType(implicitType: FirImplicitType) {
|
||||
print(if (implicitType is FirImplicitUnitType) "kotlin.Unit" else "<implicit>")
|
||||
print(if (implicitType is FirImplicitBuiltinType) "kotlin.${implicitType.name}" else "<implicit>")
|
||||
}
|
||||
|
||||
override fun visitTypeWithNullability(typeWithNullability: FirTypeWithNullability) {
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.types.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.types.FirImplicitType
|
||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
sealed class FirImplicitBuiltinType(
|
||||
override val session: FirSession,
|
||||
override val psi: PsiElement?,
|
||||
val name: Name
|
||||
) : FirImplicitType {
|
||||
override val annotations: List<FirAnnotationCall>
|
||||
get() = emptyList()
|
||||
|
||||
constructor(session: FirSession, psi: PsiElement?, name: FqNameUnsafe) : this(session, psi, name.shortName())
|
||||
}
|
||||
|
||||
class FirImplicitUnitType(
|
||||
session: FirSession,
|
||||
psi: PsiElement?
|
||||
) : FirImplicitBuiltinType(session, psi, KotlinBuiltIns.FQ_NAMES.unit)
|
||||
|
||||
class FirImplicitAnyType(
|
||||
session: FirSession,
|
||||
psi: PsiElement?
|
||||
) : FirImplicitBuiltinType(session, psi, KotlinBuiltIns.FQ_NAMES.any)
|
||||
|
||||
class FirImplicitEnumType(
|
||||
session: FirSession,
|
||||
psi: PsiElement?
|
||||
) : FirImplicitBuiltinType(session, psi, KotlinBuiltIns.FQ_NAMES._enum)
|
||||
@@ -1,19 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.types.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.types.FirImplicitType
|
||||
|
||||
class FirImplicitUnitType(
|
||||
override val session: FirSession,
|
||||
override val psi: PsiElement?
|
||||
) : FirImplicitType {
|
||||
override val annotations: List<FirAnnotationCall>
|
||||
get() = emptyList()
|
||||
}
|
||||
@@ -1,5 +1,9 @@
|
||||
FILE: F.kt
|
||||
public? open class A {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
public? final class B : A {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
|
||||
@@ -1,12 +1,20 @@
|
||||
FILE: NestedOfAliasedType.kt
|
||||
public? abstract class A {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
public? abstract class Nested {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final typealias TA = A
|
||||
public? final class B : TA {
|
||||
public? constructor(): super<TA>()
|
||||
|
||||
public? final class NestedInB : Nested {
|
||||
public? constructor(): super<Nested>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,14 +1,24 @@
|
||||
FILE: NestedSuperType.kt
|
||||
public? abstract class My {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
public? abstract class NestedOne : My {
|
||||
public? constructor(): super<My>()
|
||||
|
||||
public? abstract class NestedTwo : NestedOne {
|
||||
public? constructor(): super<NestedOne>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final class Your : My {
|
||||
public? constructor(): super<My>()
|
||||
|
||||
public? final class NestedThree : NestedOne {
|
||||
public? constructor(): super<NestedOne>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
FILE: complexTypes.kt
|
||||
<T, out S> public? final class C {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
<R, in P> public? final inner class D {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
FILE: derivedClass.kt
|
||||
<T> public? open class Base {
|
||||
public? constructor(x: T)
|
||||
public? constructor(x: T): super<kotlin.Any>()
|
||||
|
||||
public? final? property x(val): T
|
||||
public? get(): T
|
||||
|
||||
}
|
||||
<T : Any> public? final class Derived : Base<T> {
|
||||
public? constructor(x: T): super()
|
||||
public? constructor(x: T): super<Base<T>>()
|
||||
|
||||
}
|
||||
<T : Any> public? final? function create(x: T): Derived<T> {
|
||||
|
||||
+17
-1
@@ -1,17 +1,25 @@
|
||||
FILE: enums.kt
|
||||
public? final enum class Order {
|
||||
public? constructor(): super<kotlin.Enum>()
|
||||
|
||||
public? final enum entry FIRST {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
|
||||
public? final enum entry SECOND {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
|
||||
public? final enum entry THIRD {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final enum class Planet {
|
||||
public? constructor(m: Double, r: Double)
|
||||
public? constructor(m: Double, r: Double): super<kotlin.Enum>()
|
||||
|
||||
public? final? property m(val): Double
|
||||
public? get(): Double
|
||||
@@ -20,18 +28,24 @@ FILE: enums.kt
|
||||
public? get(): Double
|
||||
|
||||
public? final enum entry MERCURY : Planet {
|
||||
public? constructor(): super<Planet>()
|
||||
|
||||
public? open? override function sayHello(): kotlin.Unit {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public? final enum entry VENERA : Planet {
|
||||
public? constructor(): super<Planet>()
|
||||
|
||||
public? open? override function sayHello(): kotlin.Unit {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public? final enum entry EARTH : Planet {
|
||||
public? constructor(): super<Planet>()
|
||||
|
||||
public? open? override function sayHello(): kotlin.Unit {
|
||||
}
|
||||
|
||||
@@ -43,6 +57,8 @@ FILE: enums.kt
|
||||
public? abstract function sayHello(): kotlin.Unit
|
||||
|
||||
public? final companion object Companion {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
public? final? const property G(val): <implicit> = STUB
|
||||
public? get(): <implicit>
|
||||
|
||||
|
||||
@@ -2,16 +2,22 @@ FILE: enums2.kt
|
||||
public? abstract interface Some {
|
||||
}
|
||||
public? final object O1 : Some {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
public? final object O2 : Some {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
public? final enum class SomeEnum {
|
||||
public? constructor(x: Some)
|
||||
public? constructor(x: Some): super<kotlin.Enum>()
|
||||
|
||||
public? final? property x(val): Some
|
||||
public? get(): Some
|
||||
|
||||
public? final enum entry FIRST : SomeEnum {
|
||||
public? constructor(): super<SomeEnum>()
|
||||
|
||||
public? open? override function check(y: Some): Boolean {
|
||||
STUB
|
||||
}
|
||||
@@ -19,6 +25,8 @@ FILE: enums2.kt
|
||||
}
|
||||
|
||||
public? final enum entry SECOND : SomeEnum {
|
||||
public? constructor(): super<SomeEnum>()
|
||||
|
||||
public? open? override function check(y: Some): Boolean {
|
||||
STUB
|
||||
}
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
FILE: expectActual.kt
|
||||
public? final expect class MyClass {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
public? final? expect function foo(): String
|
||||
public? final? expect property x(val): Int
|
||||
public? get(): Int
|
||||
public? final actual class MyClass {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
public? final? actual function foo(): <implicit> {
|
||||
STUB
|
||||
|
||||
@@ -5,6 +5,8 @@ FILE: genericFunctions.kt
|
||||
STUB
|
||||
}
|
||||
public? abstract class Summator {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
<T> public? abstract function plus(first: T, second: T): T
|
||||
|
||||
}
|
||||
|
||||
@@ -1,18 +1,22 @@
|
||||
FILE: nestedClass.kt
|
||||
public? abstract class Base {
|
||||
public? constructor(s: String)
|
||||
public? constructor(s: String): super<kotlin.Any>()
|
||||
|
||||
public? final? property s(val): String
|
||||
public? get(): String
|
||||
|
||||
}
|
||||
public? final class Outer {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
public? final class Derived : Base {
|
||||
public? constructor(s: String): super()
|
||||
public? constructor(s: String): super<Base>()
|
||||
|
||||
}
|
||||
|
||||
public? final object Obj : Base {
|
||||
public? constructor(): super<Base>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
class NoPrimary {
|
||||
val x: String
|
||||
|
||||
constructor(x: String) {
|
||||
this.x = x
|
||||
}
|
||||
|
||||
constructor(): this("")
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
FILE: noPrimaryConstructor.kt
|
||||
public? final class NoPrimary {
|
||||
public? final? property x(val): String
|
||||
public? get(): String
|
||||
|
||||
public? constructor(x: String): this<<ERROR TYPE: Not implemented yet>>() {
|
||||
}
|
||||
|
||||
public? constructor(): this<<ERROR TYPE: Not implemented yet>>()
|
||||
|
||||
}
|
||||
@@ -7,6 +7,8 @@ FILE: simpleClass.kt
|
||||
|
||||
}
|
||||
public? final class SomeClass : SomeInterface {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
private final? property baz(val): <implicit> = STUB
|
||||
public? get(): <implicit>
|
||||
|
||||
@@ -26,4 +28,6 @@ FILE: simpleClass.kt
|
||||
|
||||
}
|
||||
public? final inline class InlineClass {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
|
||||
@@ -3,4 +3,6 @@ FILE: simpleTypeAlias.kt
|
||||
}
|
||||
public? final typealias C = B
|
||||
public? final class D : C {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
FILE: typeAliasWithGeneric.kt
|
||||
public? open class A {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
<S, T : A> public? abstract interface B {
|
||||
}
|
||||
<T> public? final typealias C = B<T, A>
|
||||
public? final class D : C<A> {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
|
||||
@@ -2,7 +2,11 @@ FILE: typeParameterVsNested.kt
|
||||
public? abstract interface Some {
|
||||
}
|
||||
<T : Some> public? abstract class My {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
public? final inner class T {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
|
||||
public? abstract property x(val): T
|
||||
@@ -17,6 +21,8 @@ FILE: typeParameterVsNested.kt
|
||||
public? get(): test.My.T
|
||||
|
||||
public? final class Some : T {
|
||||
public? constructor(): super<T>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,8 +8,12 @@ FILE: typeParameters.kt
|
||||
public? final typealias StringList = List<out String>
|
||||
public? final typealias AnyList = List<*>
|
||||
<out T : Any> public? abstract class AbstractList : List<T> {
|
||||
public? constructor(): super<kotlin.Any>()
|
||||
|
||||
}
|
||||
public? final class SomeList : AbstractList<Int> {
|
||||
public? constructor(): super<AbstractList<Int>>()
|
||||
|
||||
public? open? override function get(index: Int): Int {
|
||||
STUB
|
||||
}
|
||||
|
||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
||||
open class A
|
||||
|
||||
|
||||
class B : A
|
||||
class B : A()
|
||||
Vendored
+4
@@ -1,5 +1,9 @@
|
||||
FILE: F.kt
|
||||
public? open class A {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
}
|
||||
public? final class B : R|A| {
|
||||
public? constructor(): super<R|A|>()
|
||||
|
||||
}
|
||||
|
||||
@@ -1,12 +1,20 @@
|
||||
FILE: NestedOfAliasedType.kt
|
||||
public? abstract class A {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
public? abstract class Nested {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final typealias TA = R|A|
|
||||
public? final class B : R|TA = A| {
|
||||
public? constructor(): super<R|TA = A|>()
|
||||
|
||||
public? final class NestedInB : R|A.Nested| {
|
||||
public? constructor(): super<R|A.Nested|>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,14 +1,24 @@
|
||||
FILE: NestedSuperType.kt
|
||||
public? abstract class My {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
public? abstract class NestedOne : R|p/My| {
|
||||
public? constructor(): super<R|p/My|>()
|
||||
|
||||
public? abstract class NestedTwo : R|p/My.NestedOne| {
|
||||
public? constructor(): super<R|p/My.NestedOne|>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final class Your : R|p/My| {
|
||||
public? constructor(): super<R|p/My|>()
|
||||
|
||||
public? final class NestedThree : R|p/My.NestedOne| {
|
||||
public? constructor(): super<R|p/My.NestedOne|>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
FILE: TwoDeclarationsInSameFile.kt
|
||||
public? open class A {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
}
|
||||
public? final class B : R|p/A| {
|
||||
public? constructor(): super<R|p/A|>()
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
FILE: lists.kt
|
||||
public? abstract class MyStringList : R|kotlin/collections/List<kotlin/String>| {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
}
|
||||
public? abstract class MyMutableStringList : R|kotlin/collections/MutableList<kotlin/String>| {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
}
|
||||
public? final? function convert R|kotlin/collections/List<kotlin/String>|.(): R|MyStringList| {
|
||||
STUB
|
||||
|
||||
+12
@@ -1,7 +1,13 @@
|
||||
FILE: companion.kt
|
||||
public? abstract class Some {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
public? final companion object Companion {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
public? final class InCompanion {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -11,8 +17,14 @@ FILE: companion.kt
|
||||
|
||||
}
|
||||
public? abstract class Another {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
public? final companion object NamedCompanion {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
public? final class InCompanion {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,13 +1,13 @@
|
||||
FILE: derivedClass.kt
|
||||
<T> public? open class Base {
|
||||
public? constructor(x: R|T|)
|
||||
public? constructor(x: R|T|): super<R|kotlin/Any|>()
|
||||
|
||||
public? final? property x(val): R|T|
|
||||
public? get(): R|T|
|
||||
|
||||
}
|
||||
<T : R|kotlin/Any|> public? final class Derived : R|Base<T>| {
|
||||
public? constructor(x: R|T|): super()
|
||||
public? constructor(x: R|T|): super<R|Base<T>|>()
|
||||
|
||||
}
|
||||
<T : R|kotlin/Any|> public? final? function create(x: R|T|): R|Derived<T>| {
|
||||
|
||||
+9
-1
@@ -2,16 +2,22 @@ FILE: enum.kt
|
||||
public? abstract interface Some {
|
||||
}
|
||||
public? final object O1 : R|Some| {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
}
|
||||
public? final object O2 : R|Some| {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
}
|
||||
public? final enum class SomeEnum {
|
||||
public? constructor(x: R|Some|)
|
||||
public? constructor(x: R|Some|): super<R|kotlin/Enum|>()
|
||||
|
||||
public? final? property x(val): R|Some|
|
||||
public? get(): R|Some|
|
||||
|
||||
public? final enum entry FIRST : R|SomeEnum| {
|
||||
public? constructor(): super<R|SomeEnum|>()
|
||||
|
||||
public? open? override function check(y: R|Some|): R|kotlin/Boolean| {
|
||||
STUB
|
||||
}
|
||||
@@ -19,6 +25,8 @@ FILE: enum.kt
|
||||
}
|
||||
|
||||
public? final enum entry SECOND : R|SomeEnum| {
|
||||
public? constructor(): super<R|SomeEnum|>()
|
||||
|
||||
public? open? override function check(y: R|Some|): R|kotlin/Boolean| {
|
||||
STUB
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@ FILE: genericFunctions.kt
|
||||
STUB
|
||||
}
|
||||
public? abstract class Summator {
|
||||
public? constructor(): super<R|Any|>()
|
||||
|
||||
<T> public? abstract function plus(first: R|T|, second: R|T|): R|T|
|
||||
|
||||
}
|
||||
|
||||
+4
-2
@@ -1,6 +1,8 @@
|
||||
FILE: Annotations.kt
|
||||
@FILE:R|annotations/Simple|()
|
||||
@R|annotations/WithInt|(STUB) public? abstract class First {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
@R|annotations/Simple|() public? abstract function foo(@R|annotations/WithString|(STUB) arg: @R|annotations/Simple|() R|kotlin/Double|): R|kotlin/Unit|
|
||||
|
||||
@R|annotations/Complex|(STUB, STUB) public? abstract property v(val): R|kotlin/String|
|
||||
@@ -8,7 +10,7 @@ FILE: Annotations.kt
|
||||
|
||||
}
|
||||
@R|annotations/WithString|(STUB) public? final class Second : @R|annotations/WithInt|(STUB) R|test/First| {
|
||||
public? constructor(y: R|kotlin/Char|): super()
|
||||
public? constructor(y: R|kotlin/Char|): super<@R|annotations/WithInt|(STUB) R|test/First|>()
|
||||
|
||||
public? final? property y(val): R|kotlin/Char|
|
||||
public? get(): R|kotlin/Char|
|
||||
@@ -21,7 +23,7 @@ FILE: Annotations.kt
|
||||
STUB
|
||||
}
|
||||
|
||||
@R|annotations/WithString|(STUB) public? constructor(): this()
|
||||
@R|annotations/WithString|(STUB) public? constructor(): this<R|error: Not implemented yet|>()
|
||||
|
||||
}
|
||||
@R|annotations/WithInt|(STUB) @R|annotations/WithInt|(STUB) public? final typealias Third = @R|annotations/Simple|() R|test/Second|
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
FILE: NestedSuperType.kt
|
||||
public? final class A : R|b/B| {
|
||||
public? constructor(): super<R|b/B|>()
|
||||
|
||||
public? final class NestedInA1 : R|b/B.NestedInB| {
|
||||
public? constructor(): super<R|b/B.NestedInB|>()
|
||||
|
||||
}
|
||||
|
||||
public? final class NestedInA2 : R|c/C.NestedInC| {
|
||||
public? constructor(): super<R|c/C.NestedInC|>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,6 +2,6 @@ package a
|
||||
|
||||
import b.TA
|
||||
|
||||
class MyClass : TA
|
||||
class MyClass : TA()
|
||||
|
||||
// analyzePriority: 0
|
||||
@@ -1,3 +1,5 @@
|
||||
FILE: TypeAliasExpansion.kt
|
||||
public? final class MyClass : R|b/TA = b/A| {
|
||||
public? constructor(): super<R|b/TA = b/A|>()
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
FILE: sealedStarImport.kt
|
||||
public? abstract class Factory {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
public? abstract function createTest(): R|error: Symbol not found|
|
||||
|
||||
public? abstract function createObj(): R|test/Test.O|
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package a
|
||||
import b.MyClass as HisClass
|
||||
|
||||
class YourClass : HisClass
|
||||
class YourClass : HisClass()
|
||||
@@ -1,3 +1,5 @@
|
||||
FILE: simpleAliasedImport.kt
|
||||
public? final class YourClass : R|b/MyClass| {
|
||||
public? constructor(): super<R|b/MyClass|>()
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package a
|
||||
import b.MyClass
|
||||
|
||||
class YourClass : MyClass
|
||||
class YourClass : MyClass()
|
||||
@@ -1,3 +1,5 @@
|
||||
FILE: simpleImport.kt
|
||||
public? final class YourClass : R|b/MyClass| {
|
||||
public? constructor(): super<R|b/MyClass|>()
|
||||
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
FILE: simpleImportNested.kt
|
||||
public? final class YourClass : R|a/MyClass.MyNested| {
|
||||
public? constructor(): super<R|a/MyClass.MyNested|>()
|
||||
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
FILE: simpleImportOuter.kt
|
||||
public? final class My : R|a/Outer.Nested| {
|
||||
public? constructor(): super<R|a/Outer.Nested|>()
|
||||
|
||||
}
|
||||
|
||||
+6
-2
@@ -1,18 +1,22 @@
|
||||
FILE: nestedClass.kt
|
||||
public? abstract class Base {
|
||||
public? constructor(s: R|kotlin/String|)
|
||||
public? constructor(s: R|kotlin/String|): super<R|kotlin/Any|>()
|
||||
|
||||
public? final? property s(val): R|kotlin/String|
|
||||
public? get(): R|kotlin/String|
|
||||
|
||||
}
|
||||
public? final class Outer {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
public? final class Derived : R|Base| {
|
||||
public? constructor(s: R|kotlin/String|): super()
|
||||
public? constructor(s: R|kotlin/String|): super<R|Base|>()
|
||||
|
||||
}
|
||||
|
||||
public? final object Obj : R|Base| {
|
||||
public? constructor(): super<R|Base|>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@ FILE: simpleClass.kt
|
||||
|
||||
}
|
||||
public? final class SomeClass : R|SomeInterface| {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
private final? property baz(val): R|error: Not supported: FirImplicitTypeImpl| = STUB
|
||||
public? get(): R|error: Not supported: FirImplicitTypeImpl|
|
||||
|
||||
|
||||
@@ -3,4 +3,6 @@ FILE: simpleTypeAlias.kt
|
||||
}
|
||||
public? final typealias C = R|B|
|
||||
public? final class D : R|C = B| {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@ FILE: functionX.kt
|
||||
public? final? property y(val): R|kotlin/Function1<kotlin/String, kotlin/String>| = STUB
|
||||
public? get(): R|kotlin/Function1<kotlin/String, kotlin/String>|
|
||||
public? final class MyFunction : R|kotlin/Function2<kotlin/Int, kotlin/String, kotlin/Unit>| {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
public? open? override function invoke(p1: R|kotlin/Int|, p2: R|kotlin/String|): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
FILE: typeAliasWithGeneric.kt
|
||||
public? open class A {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
}
|
||||
<S, T : R|A|> public? abstract interface B {
|
||||
}
|
||||
public? final class D : R|C<A> = B<T, A>| {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
}
|
||||
<T> public? final typealias C = R|B<T, A>|
|
||||
|
||||
@@ -2,7 +2,11 @@ FILE: typeParameterVsNested.kt
|
||||
public? abstract interface Some {
|
||||
}
|
||||
<T : R|test/Some|> public? abstract class My {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
public? final inner class T {
|
||||
public? constructor(): super<R|kotlin/Any|>()
|
||||
|
||||
}
|
||||
|
||||
public? abstract property x(val): R|T|
|
||||
@@ -17,6 +21,8 @@ FILE: typeParameterVsNested.kt
|
||||
public? get(): R|test/My.T|
|
||||
|
||||
public? final class Some : R|test/My.T| {
|
||||
public? constructor(): super<R|T|>()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+6
@@ -96,6 +96,12 @@ public class RawFirBuilderTestCaseGenerated extends AbstractRawFirBuilderTestCas
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/NestedSuperType.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("noPrimaryConstructor.kt")
|
||||
public void testNoPrimaryConstructor() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/rawBuilder/declarations/noPrimaryConstructor.kt");
|
||||
doRawFirTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("simpleClass.kt")
|
||||
public void testSimpleClass() throws Exception {
|
||||
runTest("compiler/testData/fir/rawBuilder/declarations/simpleClass.kt");
|
||||
|
||||
Reference in New Issue
Block a user