diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtClassLikeSymbol.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtClassLikeSymbol.kt index 733de867ccd..74de4964757 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtClassLikeSymbol.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtClassLikeSymbol.kt @@ -16,7 +16,7 @@ sealed class KtClassifierSymbol : KtSymbol, KtNamedSymbol abstract class KtTypeParameterSymbol : KtClassifierSymbol(), KtNamedSymbol { abstract override fun createPointer(): KtSymbolPointer - abstract val bounds: List + abstract val upperBounds: List } sealed class KtClassLikeSymbol : KtClassifierSymbol(), KtNamedSymbol, KtSymbolWithKind { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/annotations/FirLightAbstractAnnotation.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/annotations/FirLightAbstractAnnotation.kt index 453bbb0ad72..8b72656f47e 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/annotations/FirLightAbstractAnnotation.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/annotations/FirLightAbstractAnnotation.kt @@ -6,11 +6,10 @@ package org.jetbrains.kotlin.idea.asJava import com.intellij.psi.* -import com.intellij.psi.impl.PsiImplUtil import org.jetbrains.kotlin.asJava.classes.cannotModify import org.jetbrains.kotlin.asJava.classes.lazyPub -import org.jetbrains.kotlin.asJava.elements.* -import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall +import org.jetbrains.kotlin.asJava.elements.KtLightElement +import org.jetbrains.kotlin.asJava.elements.KtLightElementBase import org.jetbrains.kotlin.psi.* internal abstract class FirLightAbstractAnnotation(parent: PsiElement) : diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/annotations/FirLightSimpleAnnotation.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/annotations/FirLightSimpleAnnotation.kt index 2f3d757b098..2b63812e83e 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/annotations/FirLightSimpleAnnotation.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/annotations/FirLightSimpleAnnotation.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.idea.asJava import com.intellij.psi.PsiAnnotationMemberValue import com.intellij.psi.PsiElement -import com.intellij.psi.impl.PsiImplUtil import org.jetbrains.kotlin.psi.KtCallElement internal class FirLightSimpleAnnotation( diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/annotations/annotationsUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/annotations/annotationsUtils.kt index a150a9ff1c2..37407e233d7 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/annotations/annotationsUtils.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/annotations/annotationsUtils.kt @@ -69,8 +69,8 @@ internal fun KtAnnotatedSymbol.hasDeprecatedAnnotation(annotationUseSiteTarget: internal fun KtAnnotatedSymbol.hasJvmOverloadsAnnotation(): Boolean = hasAnnotation("kotlin/jvm/JvmOverloads", null) -internal fun KtAnnotatedSymbol.hasJvmStaticAnnotation(): Boolean = - hasAnnotation("kotlin/jvm/JvmStatic", null) +internal fun KtAnnotatedSymbol.hasJvmStaticAnnotation(annotationUseSiteTarget: AnnotationUseSiteTarget? = null): Boolean = + hasAnnotation("kotlin/jvm/JvmStatic", annotationUseSiteTarget) internal fun KtAnnotatedSymbol.hasInlineOnlyAnnotation(): Boolean = hasAnnotation("kotlin/internal/InlineOnly", null) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassForEnumEntry.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassForEnumEntry.kt index 3765c197186..afe0fe15cf4 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassForEnumEntry.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassForEnumEntry.kt @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.idea.asJava.* import org.jetbrains.kotlin.idea.asJava.FirLightClassModifierList import org.jetbrains.kotlin.idea.asJava.FirLightPsiJavaCodeReferenceElementWithNoReference import org.jetbrains.kotlin.idea.asJava.classes.createMethods -import org.jetbrains.kotlin.idea.asJava.fields.FirLightFieldForEnumEntry import org.jetbrains.kotlin.idea.frontend.api.fir.analyzeWithSymbolAsContext import org.jetbrains.kotlin.idea.frontend.api.symbols.KtEnumEntrySymbol import org.jetbrains.kotlin.idea.frontend.api.types.KtClassType diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassForSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassForSymbol.kt index 1388a8dcfee..b6a28ca9216 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassForSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassForSymbol.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.idea.asJava.classes.* import org.jetbrains.kotlin.idea.asJava.classes.createInheritanceList import org.jetbrains.kotlin.idea.asJava.classes.createInnerClasses import org.jetbrains.kotlin.idea.asJava.classes.createMethods -import org.jetbrains.kotlin.idea.asJava.fields.FirLightFieldForEnumEntry import org.jetbrains.kotlin.idea.frontend.api.fir.analyzeWithSymbolAsContext import org.jetbrains.kotlin.idea.frontend.api.symbols.* import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind @@ -128,7 +127,7 @@ internal open class FirLightClassForSymbol( .mapTo(result) { FirLightFieldForPropertySymbol( propertySymbol = it, - nameGenerator = nameGenerator, + fieldName = nameGenerator.generateUniqueFieldName(it.name.asString()), containingClass = this@FirLightClassForSymbol, lightMemberOrigin = null, isTopLevel = false, diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/firLightClassUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/firLightClassUtils.kt index 5ce844cb4f8..eb6ff278dd1 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/firLightClassUtils.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/firLightClassUtils.kt @@ -19,7 +19,6 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.fir.symbols.StandardClassIds import org.jetbrains.kotlin.idea.asJava.* -import org.jetbrains.kotlin.idea.asJava.fields.FirLightFieldForEnumEntry import org.jetbrains.kotlin.idea.frontend.api.analyze import org.jetbrains.kotlin.idea.frontend.api.fir.analyzeWithSymbolAsContext import org.jetbrains.kotlin.idea.frontend.api.symbols.* @@ -139,7 +138,7 @@ internal fun FirLightClassBase.createMethods( containingClass = this@createMethods, isTopLevel = isTopLevel, methodIndex = methodIndex++, - argumentsSkipMask = skipMask.clone() as BitSet + argumentsSkipMask = skipMask.copy() ) ) } @@ -225,7 +224,7 @@ internal fun FirLightClassBase.createField( result.add( FirLightFieldForPropertySymbol( propertySymbol = declaration, - nameGenerator = nameGenerator, + fieldName = nameGenerator.generateUniqueFieldName(declaration.name.asString()), containingClass = this, lightMemberOrigin = null, isTopLevel = isTopLevel, @@ -262,7 +261,7 @@ internal fun FirLightClassBase.createInheritanceList(forExtendsList: Boolean, su } //TODO Add support for kotlin.collections. - superTypes + superTypes.asSequence() .filterIsInstance() .filter { it.needToAddTypeIntoList() } .mapNotNull { it.mapSupertype(this, kotlinCollectionAsIs = true) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/fields/FirLightFieldEnumEntry.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/fields/FirLightFieldEnumEntry.kt index 1ca96cd99ed..038c88c87b2 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/fields/FirLightFieldEnumEntry.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/fields/FirLightFieldEnumEntry.kt @@ -3,7 +3,7 @@ * 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.idea.asJava.fields +package org.jetbrains.kotlin.idea.asJava import com.intellij.psi.* import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin @@ -11,10 +11,6 @@ import org.jetbrains.kotlin.asJava.classes.* import org.jetbrains.kotlin.asJava.elements.FirLightIdentifier import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.idea.asJava.* -import org.jetbrains.kotlin.idea.asJava.FirLightClassForSymbol -import org.jetbrains.kotlin.idea.asJava.FirLightClassModifierList -import org.jetbrains.kotlin.idea.asJava.FirLightField -import org.jetbrains.kotlin.idea.asJava.asPsiType import org.jetbrains.kotlin.idea.frontend.api.symbols.KtEnumEntrySymbol import org.jetbrains.kotlin.idea.util.ifTrue import org.jetbrains.kotlin.psi.KtEnumEntry @@ -33,7 +29,7 @@ internal class FirLightFieldForEnumEntry( ) } - override fun getModifierList(): PsiModifierList? = _modifierList + override fun getModifierList(): PsiModifierList = _modifierList override val kotlinOrigin: KtEnumEntry? = enumEntrySymbol.psi as? KtEnumEntry diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/fields/FirLightFieldForObjectSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/fields/FirLightFieldForObjectSymbol.kt index b78a4ea4f63..579ed610fef 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/fields/FirLightFieldForObjectSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/fields/FirLightFieldForObjectSymbol.kt @@ -10,8 +10,6 @@ import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin import org.jetbrains.kotlin.asJava.classes.KtLightClass import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.elements.FirLightIdentifier -import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget -import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassKind import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassOrObjectSymbol import org.jetbrains.kotlin.psi.KtDeclaration diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/fields/FirLightFieldForPropertySymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/fields/FirLightFieldForPropertySymbol.kt index d8f46e2827c..152f606428a 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/fields/FirLightFieldForPropertySymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/fields/FirLightFieldForPropertySymbol.kt @@ -17,7 +17,7 @@ import org.jetbrains.kotlin.psi.KtDeclaration internal class FirLightFieldForPropertySymbol( private val propertySymbol: KtPropertySymbol, - nameGenerator: FieldNameGenerator, + private val fieldName: String, containingClass: FirLightClassBase, lightMemberOrigin: LightMemberOrigin?, isTopLevel: Boolean, @@ -25,8 +25,6 @@ internal class FirLightFieldForPropertySymbol( takePropertyVisibility: Boolean ) : FirLightField(containingClass, lightMemberOrigin) { - private val _name: String = nameGenerator.generateUniqueFieldName(propertySymbol.name.asString()) - override val kotlinOrigin: KtDeclaration? = propertySymbol.psi as? KtDeclaration private val _returnedType: PsiType by lazyPub { @@ -51,37 +49,37 @@ internal class FirLightFieldForPropertySymbol( override fun getType(): PsiType = _returnedType - override fun getName(): String = _name + override fun getName(): String = fieldName private val _modifierList: PsiModifierList by lazyPub { + val modifiers = mutableSetOf() + val suppressFinal = !propertySymbol.isVal - val modifiersFromSymbol = propertySymbol.computeModalityForMethod( + propertySymbol.computeModalityForMethod( isTopLevel = isTopLevel, - suppressFinal = suppressFinal + suppressFinal = suppressFinal, + result = modifiers ) - val basicModifiers = modifiersFromSymbol.add( - what = PsiModifier.STATIC, - `if` = forceStatic - ) + if (forceStatic) { + modifiers.add(PsiModifier.STATIC) + } val visibility = if (takePropertyVisibility) propertySymbol.computeVisibility(isTopLevel = false) else PsiModifier.PRIVATE + modifiers.add(visibility) - val modifiersWithVisibility = basicModifiers + visibility - - val modifiers = modifiersWithVisibility.add( - what = PsiModifier.FINAL, - `if` = !suppressFinal - ).add( - what = PsiModifier.TRANSIENT, - `if` = propertySymbol.hasAnnotation("kotlin/jvm/Transient", null) - ).add( - what = PsiModifier.VOLATILE, - `if` = propertySymbol.hasAnnotation("kotlin/jvm/Volatile", null) - ) + if (!suppressFinal) { + modifiers.add(PsiModifier.FINAL) + } + if (propertySymbol.hasAnnotation("kotlin/jvm/Transient", null)) { + modifiers.add(PsiModifier.TRANSIENT) + } + if (propertySymbol.hasAnnotation("kotlin/jvm/Volatile", null)) { + modifiers.add(PsiModifier.VOLATILE) + } val nullability = if (visibility != PsiModifier.PRIVATE) propertySymbol.type.getTypeNullability(propertySymbol, FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/firLightUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/firLightUtils.kt index c340d92bee8..56036b35809 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/firLightUtils.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/firLightUtils.kt @@ -39,6 +39,7 @@ import org.jetbrains.kotlin.load.kotlin.TypeMappingMode import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.types.model.SimpleTypeMarker import java.text.StringCharacterIterator +import java.util.* internal fun L.invalidAccess(): Nothing = error("Cls delegate shouldn't be accessed for fir light classes! Qualified name: ${javaClass.name}") @@ -192,39 +193,25 @@ internal fun KtSymbolWithModality<*>.computeSimpleModality(): String? = when (mo else -> throw NotImplementedError() } -internal fun FirMemberDeclaration.computeModalityForMethod(isTopLevel: Boolean): Set { - require(this !is FirConstructor) - - val simpleModifier = computeSimpleModality() - - val withNative = if (isExternal) simpleModifier + PsiModifier.NATIVE else simpleModifier - val withTopLevelStatic = if (isTopLevel) withNative + PsiModifier.STATIC else withNative - - return withTopLevelStatic -} - internal fun KtSymbolWithModality.computeModalityForMethod( isTopLevel: Boolean, - suppressFinal: Boolean -): Set { + suppressFinal: Boolean, + result: MutableSet +) { require(this !is KtClassLikeSymbol) - val modality = mutableSetOf() - computeSimpleModality()?.run { if (this != PsiModifier.FINAL || !suppressFinal) { - modality.add(this) + result.add(this) } } if (this is KtFunctionSymbol && isExternal) { - modality.add(PsiModifier.NATIVE) + result.add(PsiModifier.NATIVE) } if (isTopLevel) { - modality.add(PsiModifier.STATIC) + result.add(PsiModifier.STATIC) } - - return modality } internal fun FirMemberDeclaration.computeVisibility(isTopLevel: Boolean): String { @@ -337,8 +324,7 @@ internal fun KtSimpleConstantValue<*>.createPsiLiteral(parent: PsiElement): PsiE } } -internal fun Set.add(what: T, `if`: Boolean): Set = - applyIf(`if`) { this + what } - internal inline fun T.applyIf(`if`: Boolean, body: T.() -> T): T = - if (`if`) body() else this \ No newline at end of file + if (`if`) body() else this + +internal fun BitSet.copy(): BitSet = clone() as BitSet \ No newline at end of file diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightAccessorMethodForSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightAccessorMethodForSymbol.kt index d5970252ec4..6b3caeeb277 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightAccessorMethodForSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightAccessorMethodForSymbol.kt @@ -79,25 +79,30 @@ internal class FirLightAccessorMethodForSymbol( val isOverrideMethod = propertyAccessorSymbol.isOverride || containingPropertySymbol.isOverride val isInterfaceMethod = containingClass.isInterface + val modifiers = mutableSetOf() + + containingPropertySymbol.computeModalityForMethod( + isTopLevel = isTopLevel, + suppressFinal = isOverrideMethod || isInterfaceMethod, + result = modifiers + ) + val visibility = isOverrideMethod.ifTrue { (containingClass as? FirLightClassForSymbol) ?.tryGetEffectiveVisibility(containingPropertySymbol) ?.toPsiVisibility(isTopLevel) } ?: propertyAccessorSymbol.computeVisibility(isTopLevel) + modifiers.add(visibility) - val modifiers = containingPropertySymbol.computeModalityForMethod( - isTopLevel = isTopLevel, - suppressFinal = isOverrideMethod || isInterfaceMethod - ) + visibility + if (containingPropertySymbol.hasJvmStaticAnnotation(accessorSite)) { + modifiers.add(PsiModifier.STATIC) + } + + if (isInterfaceMethod) { + modifiers.add(PsiModifier.ABSTRACT) + } modifiers - .add( - what = PsiModifier.STATIC, - `if` = _annotations.any { it.qualifiedName == "kotlin.jvm.JvmStatic" } - ).add( - what = PsiModifier.ABSTRACT, - `if` = isInterfaceMethod - ) } private val _modifierList: PsiModifierList by lazyPub { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightMethodForSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightMethodForSymbol.kt index ea893c97d2c..f3ff13fd4af 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightMethodForSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightMethodForSymbol.kt @@ -11,7 +11,6 @@ import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.elements.FirLightIdentifier import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionLikeSymbol -import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtDeclaration import java.util.* diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightSimpleMethodForSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightSimpleMethodForSymbol.kt index 0523d1b5a94..814a7c631a8 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightSimpleMethodForSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightSimpleMethodForSymbol.kt @@ -86,21 +86,27 @@ internal class FirLightSimpleMethodForSymbol( val finalModifier = kotlinOrigin?.hasModifier(KtTokens.FINAL_KEYWORD) == true - val modifiers = functionSymbol.computeModalityForMethod( - isTopLevel = isTopLevel, - suppressFinal = !finalModifier && functionSymbol.isOverride - ) + _visibility + val modifiers = mutableSetOf() - modifiers.add( - what = PsiModifier.STATIC, - `if` = functionSymbol.hasJvmStaticAnnotation() - ).add( - what = PsiModifier.STRICTFP, - `if` = functionSymbol.hasAnnotation("kotlin/jvm/Strictfp", null) - ).add( - what = PsiModifier.SYNCHRONIZED, - `if` = functionSymbol.hasAnnotation("kotlin/jvm/Synchronized", null) + functionSymbol.computeModalityForMethod( + isTopLevel = isTopLevel, + suppressFinal = !finalModifier && functionSymbol.isOverride, + result = modifiers ) + + modifiers.add(_visibility) + + if (functionSymbol.hasJvmStaticAnnotation()) { + modifiers.add(PsiModifier.STATIC) + } + if (functionSymbol.hasAnnotation("kotlin/jvm/Strictfp", null)) { + modifiers.add(PsiModifier.STRICTFP) + } + if (functionSymbol.hasAnnotation("kotlin/jvm/Synchronized", null)) { + modifiers.add(PsiModifier.SYNCHRONIZED) + } + + modifiers } private val _isDeprecated: Boolean by lazyPub { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/parameters/FirLightTypeParameter.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/parameters/FirLightTypeParameter.kt index 3ca16019d9e..25793088718 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/parameters/FirLightTypeParameter.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/parameters/FirLightTypeParameter.kt @@ -11,7 +11,6 @@ import com.intellij.openapi.util.TextRange import com.intellij.psi.* import com.intellij.psi.impl.PsiClassImplUtil import com.intellij.psi.impl.light.LightElement -import com.intellij.psi.impl.light.LightReferenceListBuilder import com.intellij.psi.javadoc.PsiDocComment import com.intellij.psi.search.SearchScope import org.jetbrains.kotlin.asJava.classes.KotlinSuperTypeListBuilder @@ -24,11 +23,8 @@ import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.asJava.basicIsEquivalentTo import org.jetbrains.kotlin.idea.asJava.invalidAccess import org.jetbrains.kotlin.idea.asJava.mapSupertype -import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassKind -import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtTypeParameterSymbol import org.jetbrains.kotlin.idea.frontend.api.types.KtClassType -import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.psi.KtTypeParameter import org.jetbrains.kotlin.psi.psiUtil.startOffset @@ -65,7 +61,7 @@ internal class FirLightTypeParameter( role = PsiReferenceList.Role.EXTENDS_LIST ) - typeParameterSymbol.bounds + typeParameterSymbol.upperBounds .filterIsInstance() .filter { it.classId != StandardClassIds.Any } .mapNotNull { it.mapSupertype(this, kotlinCollectionAsIs = true) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeParameterSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeParameterSymbol.kt index 76deeb816ee..0727f759820 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeParameterSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeParameterSymbol.kt @@ -30,7 +30,7 @@ internal class KtFirTypeParameterSymbol( override val name: Name get() = firRef.withFir { it.name } - override val bounds: List by firRef.withFirAndCache(FirResolvePhase.TYPES) { fir -> + override val upperBounds: List by firRef.withFirAndCache(FirResolvePhase.TYPES) { fir -> fir.bounds.map { type -> builder.buildKtType(type) } }