[FIR] Add initialization of calleeReference for FirAnnotationCall

This commit is contained in:
Dmitriy Novozhilov
2020-07-21 14:47:16 +03:00
committed by Mikhail Glukhikh
parent 614291b2cc
commit 644e9843f9
9 changed files with 66 additions and 4 deletions
@@ -11,9 +11,7 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.diagnostics.* import org.jetbrains.kotlin.fir.diagnostics.*
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.* import org.jetbrains.kotlin.fir.expressions.builder.*
@@ -21,6 +19,7 @@ import org.jetbrains.kotlin.fir.java.declarations.buildJavaValueParameter
import org.jetbrains.kotlin.fir.java.enhancement.readOnlyToMutable import org.jetbrains.kotlin.fir.java.enhancement.readOnlyToMutable
import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirReferencePlaceholderForResolvedAnnotations
import org.jetbrains.kotlin.fir.resolve.defaultType import org.jetbrains.kotlin.fir.resolve.defaultType
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.providers.getClassDeclaredCallableSymbols import org.jetbrains.kotlin.fir.resolve.providers.getClassDeclaredCallableSymbols
@@ -347,6 +346,7 @@ internal fun JavaAnnotation.toFirAnnotationCall(
arguments += argument.toFirExpression(session, javaTypeParameterStack) arguments += argument.toFirExpression(session, javaTypeParameterStack)
} }
} }
calleeReference = FirReferencePlaceholderForResolvedAnnotations
} }
} }
@@ -77,6 +77,7 @@ class JvmBinaryAnnotationDeserializer(
annotationTypeRef = it.annotationTypeRef annotationTypeRef = it.annotationTypeRef
argumentList = it.argumentList argumentList = it.argumentList
useSiteTarget = AnnotationUseSiteTarget.PROPERTY useSiteTarget = AnnotationUseSiteTarget.PROPERTY
calleeReference = it.calleeReference
} }
} }
} }
@@ -99,6 +100,7 @@ class JvmBinaryAnnotationDeserializer(
annotationTypeRef = it.annotationTypeRef annotationTypeRef = it.annotationTypeRef
argumentList = it.argumentList argumentList = it.argumentList
useSiteTarget = AnnotationUseSiteTarget.FIELD useSiteTarget = AnnotationUseSiteTarget.FIELD
calleeReference = it.calleeReference
} }
} }
} }
@@ -118,6 +120,7 @@ class JvmBinaryAnnotationDeserializer(
annotationTypeRef = it.annotationTypeRef annotationTypeRef = it.annotationTypeRef
argumentList = it.argumentList argumentList = it.argumentList
useSiteTarget = AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD useSiteTarget = AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD
calleeReference = it.calleeReference
} }
} }
} }
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.fir.java.createConstant
import org.jetbrains.kotlin.fir.java.topLevelName import org.jetbrains.kotlin.fir.java.topLevelName
import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirReferencePlaceholderForResolvedAnnotations
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.providers.AbstractFirSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.AbstractFirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.providers.getClassDeclaredCallableSymbols import org.jetbrains.kotlin.fir.resolve.providers.getClassDeclaredCallableSymbols
@@ -283,6 +284,7 @@ class KotlinDeserializedJvmSymbolsProvider(
} }
} }
} }
calleeReference = FirReferencePlaceholderForResolvedAnnotations
} }
} }
@@ -38,7 +38,8 @@ import org.jetbrains.kotlin.fir.lightTree.fir.modifier.TypeParameterModifier
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.TypeProjectionModifier import org.jetbrains.kotlin.fir.lightTree.fir.modifier.TypeProjectionModifier
import org.jetbrains.kotlin.fir.references.builder.buildImplicitThisReference import org.jetbrains.kotlin.fir.references.builder.buildImplicitThisReference
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
import org.jetbrains.kotlin.fir.references.builder.buildSimpleNamedReference import org.jetbrains.kotlin.fir.references.impl.FirReferenceForUnresolvedAnnotations
import org.jetbrains.kotlin.fir.references.impl.FirReferencePlaceholderForResolvedAnnotations
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.CallableId
@@ -324,6 +325,7 @@ class DeclarationsConverter(
source = unescapedAnnotation.toFirSourceElement() source = unescapedAnnotation.toFirSourceElement()
useSiteTarget = annotationUseSiteTarget ?: defaultAnnotationUseSiteTarget useSiteTarget = annotationUseSiteTarget ?: defaultAnnotationUseSiteTarget
annotationTypeRef = constructorCalleePair.first annotationTypeRef = constructorCalleePair.first
calleeReference = FirReferenceForUnresolvedAnnotations
extractArgumentsFrom(constructorCalleePair.second, stubMode) extractArgumentsFrom(constructorCalleePair.second, stubMode)
} }
} }
@@ -1744,5 +1746,6 @@ class DeclarationsConverter(
false false
) )
} }
calleeReference = FirReferencePlaceholderForResolvedAnnotations
} }
} }
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess
import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock
import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.builder.* import org.jetbrains.kotlin.fir.references.builder.*
import org.jetbrains.kotlin.fir.references.impl.FirReferenceForUnresolvedAnnotations
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.CallableId
@@ -1287,6 +1288,7 @@ class RawFirBuilder(
useSiteTarget = annotationEntry.useSiteTarget?.getAnnotationUseSiteTarget() useSiteTarget = annotationEntry.useSiteTarget?.getAnnotationUseSiteTarget()
annotationTypeRef = annotationEntry.typeReference.toFirOrErrorType() annotationTypeRef = annotationEntry.typeReference.toFirOrErrorType()
annotationEntry.extractArgumentsTo(this) annotationEntry.extractArgumentsTo(this)
calleeReference = FirReferenceForUnresolvedAnnotations
} }
} }
@@ -1937,5 +1939,9 @@ class RawFirBuilder(
isNullable = false isNullable = false
) )
} }
// TODO: actually we know where to resolve, but we don't have any symbol providers at this point
calleeReference = buildSimpleNamedReference {
name = Name.identifier("ExtensionFunctionType")
}
} }
} }
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.* import org.jetbrains.kotlin.fir.expressions.builder.*
import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirReferencePlaceholderForResolvedAnnotations
import org.jetbrains.kotlin.fir.resolve.constructType import org.jetbrains.kotlin.fir.resolve.constructType
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedSymbolError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedSymbolError
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
@@ -201,6 +202,7 @@ abstract class AbstractAnnotationDeserializer(
useSiteTarget?.let { useSiteTarget?.let {
this.useSiteTarget = it this.useSiteTarget = it
} }
calleeReference = FirReferencePlaceholderForResolvedAnnotations
} }
} }
@@ -0,0 +1,22 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* 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.references.impl
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
object FirReferenceForUnresolvedAnnotations : FirReference() {
override val source: FirSourceElement?
get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirReference {
return this
}
}
@@ -0,0 +1,22 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* 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.references.impl
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
object FirReferencePlaceholderForResolvedAnnotations : FirReference() {
override val source: FirSourceElement?
get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirReference {
return this
}
}
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension
import org.jetbrains.kotlin.fir.extensions.predicate.DeclarationPredicate import org.jetbrains.kotlin.fir.extensions.predicate.DeclarationPredicate
import org.jetbrains.kotlin.fir.extensions.predicate.has import org.jetbrains.kotlin.fir.extensions.predicate.has
import org.jetbrains.kotlin.fir.plugin.fqn import org.jetbrains.kotlin.fir.plugin.fqn
import org.jetbrains.kotlin.fir.references.impl.FirReferencePlaceholderForResolvedAnnotations
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.GeneratedClass import org.jetbrains.kotlin.fir.resolve.transformers.plugin.GeneratedClass
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
@@ -53,6 +54,7 @@ class AllOpenRecursiveNestedClassGenerator(session: FirSession) : FirDeclaration
isNullable = false isNullable = false
) )
} }
calleeReference = FirReferencePlaceholderForResolvedAnnotations
} }
} }
return listOf(GeneratedDeclaration(newClass, owner)) return listOf(GeneratedDeclaration(newClass, owner))