FIR resolve: support star imports, enum entries
This commit is contained in:
+9
-1
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.descriptors
|
package org.jetbrains.kotlin.descriptors
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvedClass
|
import org.jetbrains.kotlin.fir.declarations.FirResolvedClass
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirResolvedEnumEntry
|
||||||
import org.jetbrains.kotlin.fir.descriptors.ConeClassDescriptor
|
import org.jetbrains.kotlin.fir.descriptors.ConeClassDescriptor
|
||||||
import org.jetbrains.kotlin.fir.descriptors.ConeClassifierDescriptor
|
import org.jetbrains.kotlin.fir.descriptors.ConeClassifierDescriptor
|
||||||
import org.jetbrains.kotlin.fir.descriptors.ConeTypeParameterDescriptor
|
import org.jetbrains.kotlin.fir.descriptors.ConeTypeParameterDescriptor
|
||||||
@@ -17,4 +18,11 @@ class ConeClassDescriptorImpl(
|
|||||||
override val classId: ClassId,
|
override val classId: ClassId,
|
||||||
override val superTypes: List<ConeKotlinType>,
|
override val superTypes: List<ConeKotlinType>,
|
||||||
override val nestedClassifiers: List<ConeClassifierDescriptor>
|
override val nestedClassifiers: List<ConeClassifierDescriptor>
|
||||||
) : ConeClassDescriptor, AbstractFirBasedDescriptor<FirResolvedClass>()
|
) : ConeClassDescriptor, AbstractFirBasedDescriptor<FirResolvedClass>()
|
||||||
|
|
||||||
|
class ConeEnumEntryDescriptorImpl(
|
||||||
|
override val typeParameters: List<ConeTypeParameterDescriptor>,
|
||||||
|
override val classId: ClassId,
|
||||||
|
override val superTypes: List<ConeKotlinType>,
|
||||||
|
override val nestedClassifiers: List<ConeClassifierDescriptor>
|
||||||
|
) : ConeClassDescriptor, AbstractFirBasedDescriptor<FirResolvedEnumEntry>()
|
||||||
+12
-7
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirDescriptorOwner
|
|||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedClassImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedClassImpl
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedEnumEntryImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedTypeAliasImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedTypeAliasImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedTypeParameterImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedTypeParameterImpl
|
||||||
import org.jetbrains.kotlin.fir.descriptors.ConeClassifierDescriptor
|
import org.jetbrains.kotlin.fir.descriptors.ConeClassifierDescriptor
|
||||||
@@ -55,14 +56,18 @@ class FirClassifierResolveTransformer : FirTransformer<Nothing?>() {
|
|||||||
val nestedClassifiers =
|
val nestedClassifiers =
|
||||||
klass.declarations.filterIsInstance<FirDescriptorOwner<*>>().mapNotNull { it.descriptor as? ConeClassifierDescriptor }
|
klass.declarations.filterIsInstance<FirDescriptorOwner<*>>().mapNotNull { it.descriptor as? ConeClassifierDescriptor }
|
||||||
|
|
||||||
val descriptor = ConeClassDescriptorImpl(
|
val classId = ClassId(packageFqName, actualClassName, false)
|
||||||
typeParameters,
|
|
||||||
ClassId(packageFqName, actualClassName, false),
|
|
||||||
superTypes,
|
|
||||||
nestedClassifiers
|
|
||||||
)
|
|
||||||
|
|
||||||
return FirResolvedClassImpl(klass, descriptor).compose()
|
return when (klass) {
|
||||||
|
is FirEnumEntry -> {
|
||||||
|
val descriptor = ConeEnumEntryDescriptorImpl(typeParameters, classId, superTypes, nestedClassifiers)
|
||||||
|
FirResolvedEnumEntryImpl(klass, descriptor).compose()
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
val descriptor = ConeClassDescriptorImpl(typeParameters, classId, superTypes, nestedClassifiers)
|
||||||
|
FirResolvedClassImpl(klass, descriptor).compose()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformResolvedClass(resolvedClass: FirResolvedClass, data: Nothing?): CompositeTransformResult<FirDeclaration> {
|
override fun transformResolvedClass(resolvedClass: FirResolvedClass, data: Nothing?): CompositeTransformResult<FirDeclaration> {
|
||||||
|
|||||||
+6
-3
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirElement
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirImport
|
import org.jetbrains.kotlin.fir.declarations.FirImport
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedPackageStarImport
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
||||||
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
|
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
@@ -33,6 +34,10 @@ class FirImportResolveTransformer : FirTransformer<Nothing?>() {
|
|||||||
val lastPart = mutableListOf<String>()
|
val lastPart = mutableListOf<String>()
|
||||||
var firstPart = fqName
|
var firstPart = fqName
|
||||||
|
|
||||||
|
if (import.isAllUnder && firProvider.getFirFilesByPackage(firstPart).isNotEmpty()) {
|
||||||
|
return FirResolvedPackageStarImport(import, firstPart).compose()
|
||||||
|
}
|
||||||
|
|
||||||
while (!firstPart.isRoot) {
|
while (!firstPart.isRoot) {
|
||||||
lastPart.add(0, firstPart.shortName().asString())
|
lastPart.add(0, firstPart.shortName().asString())
|
||||||
firstPart = firstPart.parent()
|
firstPart = firstPart.parent()
|
||||||
@@ -44,9 +49,7 @@ class FirImportResolveTransformer : FirTransformer<Nothing?>() {
|
|||||||
return FirResolvedImportImpl(import, resolvedFqName).compose()
|
return FirResolvedImportImpl(import, resolvedFqName).compose()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return import.compose()
|
|
||||||
} else {
|
|
||||||
return import.compose()
|
|
||||||
}
|
}
|
||||||
|
return import.compose()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+3
-1
@@ -39,8 +39,10 @@ class FirTypeResolveTransformer(val superTypesOnly: Boolean = false) : FirTransf
|
|||||||
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
|
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
|
||||||
scope = FirCompositeScope(
|
scope = FirCompositeScope(
|
||||||
mutableListOf(
|
mutableListOf(
|
||||||
|
// from high priority to low priority
|
||||||
FirExplicitImportingScope(file.imports),
|
FirExplicitImportingScope(file.imports),
|
||||||
FirSelfImportingScope(file.packageFqName, file.session)
|
FirSelfImportingScope(file.packageFqName, file.session),
|
||||||
|
FirStarImportingScope(file.imports)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
packageFqName = file.packageFqName
|
packageFqName = file.packageFqName
|
||||||
|
|||||||
+2
-3
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.scopes.impl
|
package org.jetbrains.kotlin.fir.scopes.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirImport
|
import org.jetbrains.kotlin.fir.declarations.FirImport
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeSymbol
|
||||||
@@ -15,9 +15,8 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
class FirExplicitImportingScope(imports: List<FirImport>) : FirScope {
|
class FirExplicitImportingScope(imports: List<FirImport>) : FirScope {
|
||||||
|
|
||||||
// TODO: Resolve imports! Instead of computing it resolution results here
|
|
||||||
private val simpleImports =
|
private val simpleImports =
|
||||||
imports.filterIsInstance<FirResolvedImport>()
|
imports.filterIsInstance<FirResolvedImportImpl>()
|
||||||
.filter { !it.isAllUnder }
|
.filter { !it.isAllUnder }
|
||||||
.groupBy { it.aliasName ?: it.resolvedFqName.shortClassName }
|
.groupBy { it.aliasName ?: it.resolvedFqName.shortClassName }
|
||||||
|
|
||||||
|
|||||||
+39
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* 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.scopes.impl
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirImport
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.ConeSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.toSymbol
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
|
class FirStarImportingScope(imports: List<FirImport>) : FirScope {
|
||||||
|
|
||||||
|
private val starImports = imports.filterIsInstance<FirResolvedImport>().filter { it.isAllUnder }
|
||||||
|
|
||||||
|
override fun processClassifiersByName(
|
||||||
|
name: Name,
|
||||||
|
position: FirPosition,
|
||||||
|
processor: (ConeSymbol) -> Boolean
|
||||||
|
): Boolean {
|
||||||
|
for (import in starImports) {
|
||||||
|
val relativeClassName = import.relativeClassName
|
||||||
|
val symbol = if (relativeClassName == null) {
|
||||||
|
ClassId(import.packageFqName, name)
|
||||||
|
} else {
|
||||||
|
ClassId(import.packageFqName, relativeClassName.child(name), false)
|
||||||
|
}.toSymbol()
|
||||||
|
if (!processor(symbol)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -182,6 +182,11 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitResolvedEnumEntry(resolvedEnumEntry: FirResolvedEnumEntry) {
|
||||||
|
print("(resolved) ")
|
||||||
|
visitEnumEntry(resolvedEnumEntry)
|
||||||
|
}
|
||||||
|
|
||||||
override fun visitEnumEntry(enumEntry: FirEnumEntry) {
|
override fun visitEnumEntry(enumEntry: FirEnumEntry) {
|
||||||
visitClass(enumEntry)
|
visitClass(enumEntry)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,4 +14,9 @@ interface FirResolvedClass : FirClass, FirDescriptorOwner<FirResolvedClass> {
|
|||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
visitor.visitResolvedClass(this, data)
|
visitor.visitResolvedClass(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface FirResolvedEnumEntry : FirEnumEntry, FirDescriptorOwner<FirResolvedEnumEntry> {
|
||||||
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitResolvedEnumEntry(this, data)
|
||||||
}
|
}
|
||||||
@@ -7,9 +7,14 @@ package org.jetbrains.kotlin.fir.declarations
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
interface FirResolvedImport : FirImport {
|
interface FirResolvedImport : FirImport {
|
||||||
val resolvedFqName: ClassId
|
val packageFqName: FqName
|
||||||
|
|
||||||
|
val relativeClassName: FqName?
|
||||||
|
|
||||||
|
val resolvedFqName: ClassId?
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
visitor.visitResolvedImport(this, data)
|
visitor.visitResolvedImport(this, data)
|
||||||
|
|||||||
+30
@@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* 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.declarations.impl
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.FirBasedDescriptor
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirResolvedEnumEntry
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||||
|
|
||||||
|
class FirResolvedEnumEntryImpl(
|
||||||
|
val delegate: FirEnumEntry,
|
||||||
|
override val descriptor: FirBasedDescriptor<FirResolvedEnumEntry>
|
||||||
|
) : FirResolvedEnumEntry, FirEnumEntry by delegate {
|
||||||
|
|
||||||
|
init {
|
||||||
|
descriptor.bind(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun accept(visitor: FirVisitorVoid) {
|
||||||
|
super<FirResolvedEnumEntry>.accept(visitor)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R {
|
||||||
|
return super<FirResolvedEnumEntry>.accept(visitor, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
+7
@@ -9,11 +9,18 @@ import org.jetbrains.kotlin.fir.declarations.FirImport
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
|
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
class FirResolvedImportImpl(
|
class FirResolvedImportImpl(
|
||||||
val delegate: FirImport,
|
val delegate: FirImport,
|
||||||
override val resolvedFqName: ClassId
|
override val resolvedFqName: ClassId
|
||||||
) : FirResolvedImport, FirImport by delegate {
|
) : FirResolvedImport, FirImport by delegate {
|
||||||
|
override val packageFqName: FqName
|
||||||
|
get() = resolvedFqName.packageFqName
|
||||||
|
|
||||||
|
override val relativeClassName: FqName
|
||||||
|
get() = resolvedFqName.relativeClassName
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
visitor.visitResolvedImport(this, data)
|
visitor.visitResolvedImport(this, data)
|
||||||
}
|
}
|
||||||
+26
@@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* 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.declarations.impl
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirImport
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
|
class FirResolvedPackageStarImport(
|
||||||
|
val delegate: FirImport,
|
||||||
|
override val packageFqName: FqName
|
||||||
|
) : FirResolvedImport, FirImport by delegate {
|
||||||
|
override val relativeClassName: FqName?
|
||||||
|
get() = null
|
||||||
|
|
||||||
|
override val resolvedFqName: ClassId?
|
||||||
|
get() = null
|
||||||
|
|
||||||
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitResolvedImport(this, data)
|
||||||
|
}
|
||||||
+12
-4
@@ -66,6 +66,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformClass(enumEntry, data)
|
return transformClass(enumEntry, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun transformResolvedEnumEntry(resolvedEnumEntry: FirResolvedEnumEntry, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
|
return transformEnumEntry(resolvedEnumEntry, data)
|
||||||
|
}
|
||||||
|
|
||||||
open fun transformResolvedClass(resolvedClass: FirResolvedClass, data: D): CompositeTransformResult<FirDeclaration> {
|
open fun transformResolvedClass(resolvedClass: FirResolvedClass, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
return transformClass(resolvedClass, data)
|
return transformClass(resolvedClass, data)
|
||||||
}
|
}
|
||||||
@@ -214,6 +218,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformElement(element, data)
|
return transformElement(element, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): CompositeTransformResult<FirElement> {
|
||||||
|
return transformEnumEntry(enumEntry, data)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitExpression(expression: FirExpression, data: D): CompositeTransformResult<FirElement> {
|
final override fun visitExpression(expression: FirExpression, data: D): CompositeTransformResult<FirElement> {
|
||||||
return transformExpression(expression, data)
|
return transformExpression(expression, data)
|
||||||
}
|
}
|
||||||
@@ -270,10 +278,6 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformDelegatedConstructorCall(delegatedConstructorCall, data)
|
return transformDelegatedConstructorCall(delegatedConstructorCall, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): CompositeTransformResult<FirElement> {
|
|
||||||
return transformEnumEntry(enumEntry, data)
|
|
||||||
}
|
|
||||||
|
|
||||||
final override fun visitResolvedClass(resolvedClass: FirResolvedClass, data: D): CompositeTransformResult<FirElement> {
|
final override fun visitResolvedClass(resolvedClass: FirResolvedClass, data: D): CompositeTransformResult<FirElement> {
|
||||||
return transformResolvedClass(resolvedClass, data)
|
return transformResolvedClass(resolvedClass, data)
|
||||||
}
|
}
|
||||||
@@ -306,6 +310,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformAnonymousInitializer(anonymousInitializer, data)
|
return transformAnonymousInitializer(anonymousInitializer, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitResolvedEnumEntry(resolvedEnumEntry: FirResolvedEnumEntry, data: D): CompositeTransformResult<FirElement> {
|
||||||
|
return transformResolvedEnumEntry(resolvedEnumEntry, data)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitBody(body: FirBody, data: D): CompositeTransformResult<FirElement> {
|
final override fun visitBody(body: FirBody, data: D): CompositeTransformResult<FirElement> {
|
||||||
return transformBody(body, data)
|
return transformBody(body, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,6 +66,10 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
return visitClass(enumEntry, data)
|
return visitClass(enumEntry, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun visitResolvedEnumEntry(resolvedEnumEntry: FirResolvedEnumEntry, data: D): R {
|
||||||
|
return visitEnumEntry(resolvedEnumEntry, data)
|
||||||
|
}
|
||||||
|
|
||||||
open fun visitResolvedClass(resolvedClass: FirResolvedClass, data: D): R {
|
open fun visitResolvedClass(resolvedClass: FirResolvedClass, data: D): R {
|
||||||
return visitClass(resolvedClass, data)
|
return visitClass(resolvedClass, data)
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-4
@@ -66,6 +66,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitClass(enumEntry, null)
|
visitClass(enumEntry, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun visitResolvedEnumEntry(resolvedEnumEntry: FirResolvedEnumEntry) {
|
||||||
|
visitEnumEntry(resolvedEnumEntry, null)
|
||||||
|
}
|
||||||
|
|
||||||
open fun visitResolvedClass(resolvedClass: FirResolvedClass) {
|
open fun visitResolvedClass(resolvedClass: FirResolvedClass) {
|
||||||
visitClass(resolvedClass, null)
|
visitClass(resolvedClass, null)
|
||||||
}
|
}
|
||||||
@@ -214,6 +218,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitElement(element)
|
visitElement(element)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: Nothing?) {
|
||||||
|
visitEnumEntry(enumEntry)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitExpression(expression: FirExpression, data: Nothing?) {
|
final override fun visitExpression(expression: FirExpression, data: Nothing?) {
|
||||||
visitExpression(expression)
|
visitExpression(expression)
|
||||||
}
|
}
|
||||||
@@ -270,10 +278,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitDelegatedConstructorCall(delegatedConstructorCall)
|
visitDelegatedConstructorCall(delegatedConstructorCall)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: Nothing?) {
|
|
||||||
visitEnumEntry(enumEntry)
|
|
||||||
}
|
|
||||||
|
|
||||||
final override fun visitResolvedClass(resolvedClass: FirResolvedClass, data: Nothing?) {
|
final override fun visitResolvedClass(resolvedClass: FirResolvedClass, data: Nothing?) {
|
||||||
visitResolvedClass(resolvedClass)
|
visitResolvedClass(resolvedClass)
|
||||||
}
|
}
|
||||||
@@ -306,6 +310,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitAnonymousInitializer(anonymousInitializer)
|
visitAnonymousInitializer(anonymousInitializer)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitResolvedEnumEntry(resolvedEnumEntry: FirResolvedEnumEntry, data: Nothing?) {
|
||||||
|
visitResolvedEnumEntry(resolvedEnumEntry)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitBody(body: FirBody, data: Nothing?) {
|
final override fun visitBody(body: FirBody, data: Nothing?) {
|
||||||
visitBody(body)
|
visitBody(body)
|
||||||
}
|
}
|
||||||
|
|||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
interface Some
|
||||||
|
|
||||||
|
object O1 : Some
|
||||||
|
|
||||||
|
object O2 : Some
|
||||||
|
|
||||||
|
enum class SomeEnum(val x: Some) {
|
||||||
|
FIRST(O1) {
|
||||||
|
override fun check(y: Some): Boolean = true
|
||||||
|
},
|
||||||
|
SECOND(O2) {
|
||||||
|
override fun check(y: Some): Boolean = y == O2
|
||||||
|
};
|
||||||
|
|
||||||
|
abstract fun check(y: Some): Boolean
|
||||||
|
}
|
||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
FILE: enum.kt
|
||||||
|
(resolved) public? abstract interface Some() {
|
||||||
|
}
|
||||||
|
(resolved) public? final object O1() : R/Some/ {
|
||||||
|
}
|
||||||
|
(resolved) public? final object O2() : R/Some/ {
|
||||||
|
}
|
||||||
|
(resolved) public? final enum class SomeEnum() {
|
||||||
|
public? constructor(x: R/Some/)
|
||||||
|
|
||||||
|
(resolved) public? final enum entry FIRST() : R/SomeEnum/ {
|
||||||
|
public? open? override function check(y: R/Some/): R/error: Symbol not found/ {
|
||||||
|
STUB
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
(resolved) public? final enum entry SECOND() : R/SomeEnum/ {
|
||||||
|
public? open? override function check(y: R/Some/): R/error: Symbol not found/ {
|
||||||
|
STUB
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public? abstract function check(y: R/Some/): R/error: Symbol not found/
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
sealed class Test {
|
||||||
|
object O : Test()
|
||||||
|
|
||||||
|
class Extra(val x: Int): Test
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package other
|
||||||
|
|
||||||
|
import test.Test.*
|
||||||
|
|
||||||
|
abstract class Factory {
|
||||||
|
abstract fun createTest(): Test
|
||||||
|
|
||||||
|
abstract fun createObj(): O
|
||||||
|
|
||||||
|
abstract fun createExtra(): Extra
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
FILE: sealedStarImport.kt
|
||||||
|
(resolved) public? abstract class Factory() {
|
||||||
|
public? abstract function createTest(): R/error: Symbol not found/
|
||||||
|
|
||||||
|
public? abstract function createObj(): R/test/Test.O/
|
||||||
|
|
||||||
|
public? abstract function createExtra(): R/test/Test.Extra/
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package b.d
|
||||||
|
|
||||||
|
expect interface Other
|
||||||
|
|
||||||
|
expect class Another
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package a.d
|
||||||
|
|
||||||
|
import b.d.*
|
||||||
|
|
||||||
|
fun foo(arg: Other): Another
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
FILE: simpleStarImport.kt
|
||||||
|
public? final? function foo(arg: R/b/d/Other/): R/b/d/Another/
|
||||||
@@ -25,6 +25,12 @@ public class FirResolveTestCaseGenerated extends AbstractFirResolveTestCase {
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/fir/resolve"), Pattern.compile("^([^.]+)\\.kt$"), TargetBackend.ANY, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/fir/resolve"), Pattern.compile("^([^.]+)\\.kt$"), TargetBackend.ANY, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("enum.kt")
|
||||||
|
public void testEnum() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/enum.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("F.kt")
|
@TestMetadata("F.kt")
|
||||||
public void testF() throws Exception {
|
public void testF() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/F.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/F.kt");
|
||||||
@@ -93,6 +99,12 @@ public class FirResolveTestCaseGenerated extends AbstractFirResolveTestCase {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("sealedStarImport.kt")
|
||||||
|
public void testSealedStarImport() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/multifile/sealedStarImport.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("simpleAliasedImport.kt")
|
@TestMetadata("simpleAliasedImport.kt")
|
||||||
public void testSimpleAliasedImport() throws Exception {
|
public void testSimpleAliasedImport() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/multifile/simpleAliasedImport.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/multifile/simpleAliasedImport.kt");
|
||||||
@@ -117,6 +129,12 @@ public class FirResolveTestCaseGenerated extends AbstractFirResolveTestCase {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("simpleStarImport.kt")
|
||||||
|
public void testSimpleStarImport() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/multifile/simpleStarImport.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("TypeAliasExpansion.kt")
|
@TestMetadata("TypeAliasExpansion.kt")
|
||||||
public void testTypeAliasExpansion() throws Exception {
|
public void testTypeAliasExpansion() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/multifile/TypeAliasExpansion.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/multifile/TypeAliasExpansion.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user