FIR: make JavaClassEnhancementScope use-site, get rid of scope providers

Related to KT-29937
This commit is contained in:
Mikhail Glukhikh
2019-03-13 14:53:43 +03:00
parent e0348b56a1
commit 6c12fabf74
14 changed files with 65 additions and 159 deletions
@@ -6,8 +6,10 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.coneTypeSafe
@@ -19,6 +21,8 @@ interface FirClass : FirDeclarationContainer, FirStatement, FirAnnotationContain
val classKind: ClassKind
fun buildClassSpecificUseSiteScope(useSiteSession: FirSession): FirScope? = null
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitClass(this, data)
@@ -0,0 +1,49 @@
/*
* Copyright 2010-2019 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
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
import org.jetbrains.kotlin.name.Name
interface FirScope {
fun processClassifiersByName(
name: Name,
position: FirPosition,
processor: (ConeClassifierSymbol) -> Boolean
): Boolean = true
fun processFunctionsByName(
name: Name,
processor: (ConeFunctionSymbol) -> ProcessorAction
): ProcessorAction = NEXT
fun processPropertiesByName(
name: Name,
processor: (ConePropertySymbol) -> ProcessorAction
): ProcessorAction = NEXT
}
enum class FirPosition(val allowTypeParameters: Boolean = true) {
SUPER_TYPE_OR_EXPANSION(allowTypeParameters = false),
OTHER
}
enum class ProcessorAction {
STOP,
NEXT;
operator fun not(): Boolean {
return when (this) {
STOP -> true
NEXT -> false
}
}
fun next() = this == NEXT
}