[TMP] Make context in inference components universal
This commit is contained in:
@@ -112,4 +112,8 @@ class FirJavaConstructor(
|
||||
}
|
||||
|
||||
override var containerSource: DeserializedContainerSource? = null
|
||||
|
||||
override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) {
|
||||
returnTypeRef = newReturnTypeRef
|
||||
}
|
||||
}
|
||||
@@ -97,6 +97,10 @@ class FirJavaField(
|
||||
return this
|
||||
}
|
||||
|
||||
override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) {
|
||||
returnTypeRef = newReturnTypeRef
|
||||
}
|
||||
|
||||
override val delegate: FirExpression?
|
||||
get() = null
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.UniversalConeInferenceContext
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintIncorporator
|
||||
@@ -19,7 +20,6 @@ import org.jetbrains.kotlin.resolve.calls.inference.model.NewConstraintSystemImp
|
||||
import org.jetbrains.kotlin.types.AbstractTypeApproximator
|
||||
import org.jetbrains.kotlin.types.checker.KotlinTypeRefiner
|
||||
import org.jetbrains.kotlin.types.model.SimpleTypeMarker
|
||||
import org.jetbrains.kotlin.types.model.TypeSystemInferenceExtensionContextDelegate
|
||||
|
||||
fun ConeTypeContext.hasNullableSuperType(type: ConeKotlinType): Boolean {
|
||||
if (type is ConeClassLikeType) return false
|
||||
@@ -41,7 +41,7 @@ class TypeParameterBasedTypeVariable(val typeParameterSymbol: FirTypeParameterSy
|
||||
ConeTypeVariable(typeParameterSymbol.name.identifier)
|
||||
|
||||
class InferenceComponents(
|
||||
val ctx: TypeSystemInferenceExtensionContextDelegate,
|
||||
val ctx: UniversalConeInferenceContext,
|
||||
val session: FirSession,
|
||||
val returnTypeCalculator: ReturnTypeCalculator,
|
||||
val scopeSession: ScopeSession
|
||||
|
||||
+1
-6
@@ -15,12 +15,7 @@ import org.jetbrains.kotlin.fir.resolve.calls.InferenceComponents
|
||||
import org.jetbrains.kotlin.fir.resolve.dfa.DataFlowInferenceContext
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeClassErrorType
|
||||
import org.jetbrains.kotlin.fir.types.ErrorTypeConstructor
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.types.model.KotlinTypeMarker
|
||||
import org.jetbrains.kotlin.types.model.SimpleTypeMarker
|
||||
import org.jetbrains.kotlin.types.model.TypeConstructorMarker
|
||||
import org.jetbrains.kotlin.types.model.TypeSystemInferenceExtensionContextDelegate
|
||||
|
||||
inline fun <reified T : FirElement> FirBasedSymbol<*>.firUnsafe(): T {
|
||||
@@ -37,7 +32,7 @@ internal inline var FirExpression.resultType: FirTypeRef
|
||||
replaceTypeRef(type)
|
||||
}
|
||||
|
||||
internal interface UniversalConeInferenceContext :
|
||||
interface UniversalConeInferenceContext :
|
||||
ConeInferenceContext, TypeSystemInferenceExtensionContextDelegate, DataFlowInferenceContext
|
||||
|
||||
internal fun FirSession.inferenceContext(): UniversalConeInferenceContext {
|
||||
|
||||
+6
-4
@@ -12,12 +12,15 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
||||
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
|
||||
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.resolve.*
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.ImplicitDispatchReceiverValue
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.ImplicitExtensionReceiverValue
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.extractLambdaInfoFromFunctionalType
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.ControlFlowGraphReferenceTransformer
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirCallCompletionResultsWriterTransformer
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirStatusResolveTransformer.Companion.resolveStatus
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.StoreType
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.transformVarargTypeToArrayType
|
||||
@@ -32,6 +35,7 @@ import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
||||
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.compose
|
||||
import org.jetbrains.kotlin.fir.visitors.transformSingle
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
|
||||
@@ -460,11 +464,9 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
|
||||
session,
|
||||
ConeSubstitutor.Empty,
|
||||
returnTypeCalculator,
|
||||
inferenceComponents.approximator,
|
||||
integerOperatorsTypeUpdater,
|
||||
integerLiteralTypeApproximator
|
||||
inferenceComponents.approximator
|
||||
)
|
||||
af.transformSingle(writer, data.expectedTypeRef.coneTypeSafe<ConeKotlinType>()?.toExpectedType())
|
||||
af.transformSingle(writer, null)
|
||||
val returnTypes = dataFlowAnalyzer.returnExpressionsOfAnonymousFunction(af).mapNotNull { (it as? FirExpression)?.resultType?.coneTypeUnsafe() }
|
||||
af.replaceReturnTypeRef(af.returnTypeRef.resolvedTypeFromPrototype(inferenceComponents.ctx.commonSuperTypeOrNull(returnTypes) ?: session.builtinTypes.unitType.coneTypeUnsafe()))
|
||||
af.replaceTypeRef(af.constructFunctionalTypeRef(session))
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ FILE: complex.kt
|
||||
@R|kotlin/jvm/Throws|(<getClass>(<Unresolved name: IOException>#), <getClass>(<Unresolved name: ResponseParseException>#)) public final fun fetchPluginReleaseDate(pluginId: R|class error: Symbol not found, for `PluginId`|, version: R|kotlin/String|, channel: R|kotlin/String?|): R|class error: Symbol not found, for `LocalDate?`| {
|
||||
lval url: R|kotlin/String| = <strcat>(String(https://plugins.jetbrains.com/api/plugins/), R|<local>/pluginId|.<Unresolved name: idString>#.R|kotlin/toString|(), String(/updates?version=), R|<local>/version|.R|kotlin/Any.toString|())
|
||||
lval pluginDTOs: R|kotlin/Array<class error: Symbol not found, for `PluginDTO`>| = try {
|
||||
<Unresolved name: HttpRequests>#.<Unresolved name: request>#(R|<local>/url|).<Unresolved name: connect>#(<L> = connect@fun <anonymous>(): <ERROR TYPE REF: Unresolved name: fromJson> {
|
||||
<Unresolved name: HttpRequests>#.<Unresolved name: request>#(R|<local>/url|).<Unresolved name: connect>#(<L> = connect@fun <anonymous>(): R|class error: Unresolved name: fromJson| {
|
||||
<Unresolved name: GsonBuilder>#().<Unresolved name: create>#().<Unresolved name: fromJson>#(<Unresolved name: it>#.<Unresolved name: inputStream>#.<Ambiguity: reader, [kotlin/io/reader, kotlin/io/reader, kotlin/io/reader]>#(), <getClass>(Q|kotlin/Array|).R|kotlin/jvm/java|)
|
||||
}
|
||||
)
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
FILE: main.kt
|
||||
public final fun test(): R|kotlin/Unit| {
|
||||
<Inapplicable(INAPPLICABLE): [/Foo.Foo]>#(<L> = Foo@fun <anonymous>(): <ERROR TYPE REF: Unresolved name: it> {
|
||||
<Inapplicable(INAPPLICABLE): [/Foo.Foo]>#(<L> = Foo@fun <anonymous>(): R|class error: Unresolved name: it| {
|
||||
<Unresolved name: it>#
|
||||
}
|
||||
)
|
||||
|
||||
@@ -26,5 +26,7 @@ interface FirTypedDeclaration : FirDeclaration, FirAnnotationContainer {
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitTypedDeclaration(this, data)
|
||||
|
||||
fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef)
|
||||
|
||||
fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirTypedDeclaration
|
||||
}
|
||||
|
||||
+4
@@ -99,6 +99,10 @@ class FirAnonymousFunctionImpl(
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
|
||||
override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) {
|
||||
returnTypeRef = newReturnTypeRef
|
||||
}
|
||||
|
||||
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
|
||||
typeRef = newTypeRef
|
||||
}
|
||||
|
||||
@@ -103,4 +103,8 @@ open class FirConstructorImpl(
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
|
||||
override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) {
|
||||
returnTypeRef = newReturnTypeRef
|
||||
}
|
||||
}
|
||||
|
||||
+4
@@ -102,4 +102,8 @@ class FirDefaultSetterValueParameter(
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
|
||||
override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) {
|
||||
returnTypeRef = newReturnTypeRef
|
||||
}
|
||||
}
|
||||
|
||||
+4
@@ -85,4 +85,8 @@ class FirErrorFunctionImpl(
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
|
||||
override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) {
|
||||
returnTypeRef = newReturnTypeRef
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,4 +98,8 @@ class FirFieldImpl(
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
|
||||
override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) {
|
||||
returnTypeRef = newReturnTypeRef
|
||||
}
|
||||
}
|
||||
|
||||
+2
@@ -60,4 +60,6 @@ abstract class FirModifiableConstructor : FirPureAbstractElement(), FirConstruct
|
||||
abstract override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirModifiableConstructor
|
||||
|
||||
abstract override fun replaceResolvePhase(newResolvePhase: FirResolvePhase)
|
||||
|
||||
abstract override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef)
|
||||
}
|
||||
|
||||
+2
@@ -48,4 +48,6 @@ interface FirModifiableFunction<F : FirFunction<F>> : FirFunction<F>, FirAbstra
|
||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirModifiableFunction<F>
|
||||
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase)
|
||||
|
||||
override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef)
|
||||
}
|
||||
|
||||
+2
@@ -53,4 +53,6 @@ interface FirModifiableVariable<F : FirVariable<F>> : FirVariable<F>, FirAbstra
|
||||
override fun <D> transformOtherChildren(transformer: FirTransformer<D>, data: D): FirModifiableVariable<F>
|
||||
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase)
|
||||
|
||||
override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef)
|
||||
}
|
||||
|
||||
+4
@@ -109,4 +109,8 @@ open class FirPropertyAccessorImpl(
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
|
||||
override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) {
|
||||
returnTypeRef = newReturnTypeRef
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,4 +125,8 @@ class FirPropertyImpl(
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
|
||||
override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) {
|
||||
returnTypeRef = newReturnTypeRef
|
||||
}
|
||||
}
|
||||
|
||||
+4
@@ -110,4 +110,8 @@ open class FirSimpleFunctionImpl(
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
|
||||
override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) {
|
||||
returnTypeRef = newReturnTypeRef
|
||||
}
|
||||
}
|
||||
|
||||
+4
@@ -102,4 +102,8 @@ open class FirValueParameterImpl(
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
|
||||
override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) {
|
||||
returnTypeRef = newReturnTypeRef
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.tree.generator
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.annotations
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.arguments
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.body
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.calleeReference
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.classKind
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.controlFlowGraphReferenceField
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.declarations
|
||||
@@ -69,7 +68,7 @@ object NodeConfigurator : AbstractFieldConfigurator() {
|
||||
}
|
||||
|
||||
typedDeclaration.configure {
|
||||
+field("returnTypeRef", typeRef).withTransform()
|
||||
+field("returnTypeRef", typeRef, withReplace = true).withTransform()
|
||||
}
|
||||
|
||||
callableDeclaration.configure {
|
||||
|
||||
Reference in New Issue
Block a user