diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt index 48b5cbb9501..e6bb6b6f2fa 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt @@ -11,9 +11,7 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder import org.jetbrains.kotlin.fir.builder.FirBuilderDsl -import org.jetbrains.kotlin.fir.declarations.FirRegularClass -import org.jetbrains.kotlin.fir.declarations.FirTypeParameter -import org.jetbrains.kotlin.fir.declarations.FirValueParameter +import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.diagnostics.* import org.jetbrains.kotlin.fir.expressions.* 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.references.builder.buildErrorNamedReference 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.firSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.getClassDeclaredCallableSymbols @@ -347,6 +346,7 @@ internal fun JavaAnnotation.toFirAnnotationCall( arguments += argument.toFirExpression(session, javaTypeParameterStack) } } + calleeReference = FirReferencePlaceholderForResolvedAnnotations } } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmBinaryAnnotationDeserializer.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmBinaryAnnotationDeserializer.kt index 5f70793efee..5ad766e1620 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmBinaryAnnotationDeserializer.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmBinaryAnnotationDeserializer.kt @@ -77,6 +77,7 @@ class JvmBinaryAnnotationDeserializer( annotationTypeRef = it.annotationTypeRef argumentList = it.argumentList useSiteTarget = AnnotationUseSiteTarget.PROPERTY + calleeReference = it.calleeReference } } } @@ -99,6 +100,7 @@ class JvmBinaryAnnotationDeserializer( annotationTypeRef = it.annotationTypeRef argumentList = it.argumentList useSiteTarget = AnnotationUseSiteTarget.FIELD + calleeReference = it.calleeReference } } } @@ -118,6 +120,7 @@ class JvmBinaryAnnotationDeserializer( annotationTypeRef = it.annotationTypeRef argumentList = it.argumentList useSiteTarget = AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD + calleeReference = it.calleeReference } } } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt index 36bb4049bcc..17130190d31 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.fir.java.createConstant import org.jetbrains.kotlin.fir.java.topLevelName import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference 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.providers.AbstractFirSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.getClassDeclaredCallableSymbols @@ -283,6 +284,7 @@ class KotlinDeserializedJvmSymbolsProvider( } } } + calleeReference = FirReferencePlaceholderForResolvedAnnotations } } diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 9bea916828f..6675974316e 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -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.references.builder.buildImplicitThisReference 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.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.CallableId @@ -324,6 +325,7 @@ class DeclarationsConverter( source = unescapedAnnotation.toFirSourceElement() useSiteTarget = annotationUseSiteTarget ?: defaultAnnotationUseSiteTarget annotationTypeRef = constructorCalleePair.first + calleeReference = FirReferenceForUnresolvedAnnotations extractArgumentsFrom(constructorCalleePair.second, stubMode) } } @@ -1744,5 +1746,6 @@ class DeclarationsConverter( false ) } + calleeReference = FirReferencePlaceholderForResolvedAnnotations } } diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 67298b4ea2f..98758ab8c0b 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -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.references.FirNamedReference 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.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.CallableId @@ -1287,6 +1288,7 @@ class RawFirBuilder( useSiteTarget = annotationEntry.useSiteTarget?.getAnnotationUseSiteTarget() annotationTypeRef = annotationEntry.typeReference.toFirOrErrorType() annotationEntry.extractArgumentsTo(this) + calleeReference = FirReferenceForUnresolvedAnnotations } } @@ -1937,5 +1939,9 @@ class RawFirBuilder( 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") + } } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/AbstractAnnotationDeserializer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/AbstractAnnotationDeserializer.kt index 629cf2d6047..998c1a343c6 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/AbstractAnnotationDeserializer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/AbstractAnnotationDeserializer.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.builder.* import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference 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.diagnostics.ConeUnresolvedSymbolError import org.jetbrains.kotlin.fir.resolve.toSymbol @@ -201,6 +202,7 @@ abstract class AbstractAnnotationDeserializer( useSiteTarget?.let { this.useSiteTarget = it } + calleeReference = FirReferencePlaceholderForResolvedAnnotations } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirReferenceForUnresolvedAnnotations.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirReferenceForUnresolvedAnnotations.kt new file mode 100644 index 00000000000..c96807147f6 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirReferenceForUnresolvedAnnotations.kt @@ -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 acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirReference { + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirReferencePlaceholderForResolvedAnnotations.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirReferencePlaceholderForResolvedAnnotations.kt new file mode 100644 index 00000000000..1bf48b3b655 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirReferencePlaceholderForResolvedAnnotations.kt @@ -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 acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirReference { + return this + } +} \ No newline at end of file diff --git a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenRecursiveNestedClassGenerator.kt b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenRecursiveNestedClassGenerator.kt index 7c63de24971..a40960c1671 100644 --- a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenRecursiveNestedClassGenerator.kt +++ b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenRecursiveNestedClassGenerator.kt @@ -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.has 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.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol @@ -53,6 +54,7 @@ class AllOpenRecursiveNestedClassGenerator(session: FirSession) : FirDeclaration isNullable = false ) } + calleeReference = FirReferencePlaceholderForResolvedAnnotations } } return listOf(GeneratedDeclaration(newClass, owner))