[FIR IDE] LC minor refactorings
This commit is contained in:
+1
-1
@@ -16,7 +16,7 @@ sealed class KtClassifierSymbol : KtSymbol, KtNamedSymbol
|
|||||||
abstract class KtTypeParameterSymbol : KtClassifierSymbol(), KtNamedSymbol {
|
abstract class KtTypeParameterSymbol : KtClassifierSymbol(), KtNamedSymbol {
|
||||||
abstract override fun createPointer(): KtSymbolPointer<KtTypeParameterSymbol>
|
abstract override fun createPointer(): KtSymbolPointer<KtTypeParameterSymbol>
|
||||||
|
|
||||||
abstract val bounds: List<KtType>
|
abstract val upperBounds: List<KtType>
|
||||||
}
|
}
|
||||||
|
|
||||||
sealed class KtClassLikeSymbol : KtClassifierSymbol(), KtNamedSymbol, KtSymbolWithKind {
|
sealed class KtClassLikeSymbol : KtClassifierSymbol(), KtNamedSymbol, KtSymbolWithKind {
|
||||||
|
|||||||
+2
-3
@@ -6,11 +6,10 @@
|
|||||||
package org.jetbrains.kotlin.idea.asJava
|
package org.jetbrains.kotlin.idea.asJava
|
||||||
|
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.impl.PsiImplUtil
|
|
||||||
import org.jetbrains.kotlin.asJava.classes.cannotModify
|
import org.jetbrains.kotlin.asJava.classes.cannotModify
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.asJava.elements.*
|
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
import org.jetbrains.kotlin.asJava.elements.KtLightElementBase
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
|
||||||
internal abstract class FirLightAbstractAnnotation(parent: PsiElement) :
|
internal abstract class FirLightAbstractAnnotation(parent: PsiElement) :
|
||||||
|
|||||||
-1
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.idea.asJava
|
|||||||
|
|
||||||
import com.intellij.psi.PsiAnnotationMemberValue
|
import com.intellij.psi.PsiAnnotationMemberValue
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.impl.PsiImplUtil
|
|
||||||
import org.jetbrains.kotlin.psi.KtCallElement
|
import org.jetbrains.kotlin.psi.KtCallElement
|
||||||
|
|
||||||
internal class FirLightSimpleAnnotation(
|
internal class FirLightSimpleAnnotation(
|
||||||
|
|||||||
+2
-2
@@ -69,8 +69,8 @@ internal fun KtAnnotatedSymbol.hasDeprecatedAnnotation(annotationUseSiteTarget:
|
|||||||
internal fun KtAnnotatedSymbol.hasJvmOverloadsAnnotation(): Boolean =
|
internal fun KtAnnotatedSymbol.hasJvmOverloadsAnnotation(): Boolean =
|
||||||
hasAnnotation("kotlin/jvm/JvmOverloads", null)
|
hasAnnotation("kotlin/jvm/JvmOverloads", null)
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.hasJvmStaticAnnotation(): Boolean =
|
internal fun KtAnnotatedSymbol.hasJvmStaticAnnotation(annotationUseSiteTarget: AnnotationUseSiteTarget? = null): Boolean =
|
||||||
hasAnnotation("kotlin/jvm/JvmStatic", null)
|
hasAnnotation("kotlin/jvm/JvmStatic", annotationUseSiteTarget)
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.hasInlineOnlyAnnotation(): Boolean =
|
internal fun KtAnnotatedSymbol.hasInlineOnlyAnnotation(): Boolean =
|
||||||
hasAnnotation("kotlin/internal/InlineOnly", null)
|
hasAnnotation("kotlin/internal/InlineOnly", null)
|
||||||
|
|||||||
-1
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.idea.asJava.*
|
|||||||
import org.jetbrains.kotlin.idea.asJava.FirLightClassModifierList
|
import org.jetbrains.kotlin.idea.asJava.FirLightClassModifierList
|
||||||
import org.jetbrains.kotlin.idea.asJava.FirLightPsiJavaCodeReferenceElementWithNoReference
|
import org.jetbrains.kotlin.idea.asJava.FirLightPsiJavaCodeReferenceElementWithNoReference
|
||||||
import org.jetbrains.kotlin.idea.asJava.classes.createMethods
|
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.fir.analyzeWithSymbolAsContext
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtEnumEntrySymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtEnumEntrySymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtClassType
|
import org.jetbrains.kotlin.idea.frontend.api.types.KtClassType
|
||||||
|
|||||||
+1
-2
@@ -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.createInheritanceList
|
||||||
import org.jetbrains.kotlin.idea.asJava.classes.createInnerClasses
|
import org.jetbrains.kotlin.idea.asJava.classes.createInnerClasses
|
||||||
import org.jetbrains.kotlin.idea.asJava.classes.createMethods
|
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.fir.analyzeWithSymbolAsContext
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind
|
||||||
@@ -128,7 +127,7 @@ internal open class FirLightClassForSymbol(
|
|||||||
.mapTo(result) {
|
.mapTo(result) {
|
||||||
FirLightFieldForPropertySymbol(
|
FirLightFieldForPropertySymbol(
|
||||||
propertySymbol = it,
|
propertySymbol = it,
|
||||||
nameGenerator = nameGenerator,
|
fieldName = nameGenerator.generateUniqueFieldName(it.name.asString()),
|
||||||
containingClass = this@FirLightClassForSymbol,
|
containingClass = this@FirLightClassForSymbol,
|
||||||
lightMemberOrigin = null,
|
lightMemberOrigin = null,
|
||||||
isTopLevel = false,
|
isTopLevel = false,
|
||||||
|
|||||||
+3
-4
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
|||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||||
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
|
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
|
||||||
import org.jetbrains.kotlin.idea.asJava.*
|
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.analyze
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.analyzeWithSymbolAsContext
|
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.*
|
||||||
@@ -139,7 +138,7 @@ internal fun FirLightClassBase.createMethods(
|
|||||||
containingClass = this@createMethods,
|
containingClass = this@createMethods,
|
||||||
isTopLevel = isTopLevel,
|
isTopLevel = isTopLevel,
|
||||||
methodIndex = methodIndex++,
|
methodIndex = methodIndex++,
|
||||||
argumentsSkipMask = skipMask.clone() as BitSet
|
argumentsSkipMask = skipMask.copy()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -225,7 +224,7 @@ internal fun FirLightClassBase.createField(
|
|||||||
result.add(
|
result.add(
|
||||||
FirLightFieldForPropertySymbol(
|
FirLightFieldForPropertySymbol(
|
||||||
propertySymbol = declaration,
|
propertySymbol = declaration,
|
||||||
nameGenerator = nameGenerator,
|
fieldName = nameGenerator.generateUniqueFieldName(declaration.name.asString()),
|
||||||
containingClass = this,
|
containingClass = this,
|
||||||
lightMemberOrigin = null,
|
lightMemberOrigin = null,
|
||||||
isTopLevel = isTopLevel,
|
isTopLevel = isTopLevel,
|
||||||
@@ -262,7 +261,7 @@ internal fun FirLightClassBase.createInheritanceList(forExtendsList: Boolean, su
|
|||||||
}
|
}
|
||||||
|
|
||||||
//TODO Add support for kotlin.collections.
|
//TODO Add support for kotlin.collections.
|
||||||
superTypes
|
superTypes.asSequence()
|
||||||
.filterIsInstance<KtClassType>()
|
.filterIsInstance<KtClassType>()
|
||||||
.filter { it.needToAddTypeIntoList() }
|
.filter { it.needToAddTypeIntoList() }
|
||||||
.mapNotNull { it.mapSupertype(this, kotlinCollectionAsIs = true) }
|
.mapNotNull { it.mapSupertype(this, kotlinCollectionAsIs = true) }
|
||||||
|
|||||||
+2
-6
@@ -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.
|
* 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 com.intellij.psi.*
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
|
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.asJava.elements.FirLightIdentifier
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.idea.asJava.*
|
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.frontend.api.symbols.KtEnumEntrySymbol
|
||||||
import org.jetbrains.kotlin.idea.util.ifTrue
|
import org.jetbrains.kotlin.idea.util.ifTrue
|
||||||
import org.jetbrains.kotlin.psi.KtEnumEntry
|
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
|
override val kotlinOrigin: KtEnumEntry? = enumEntrySymbol.psi as? KtEnumEntry
|
||||||
|
|
||||||
|
|||||||
-2
@@ -10,8 +10,6 @@ import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
|
|||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.asJava.elements.FirLightIdentifier
|
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.idea.frontend.api.symbols.KtClassOrObjectSymbol
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
|
|
||||||
|
|||||||
+20
-22
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.psi.KtDeclaration
|
|||||||
|
|
||||||
internal class FirLightFieldForPropertySymbol(
|
internal class FirLightFieldForPropertySymbol(
|
||||||
private val propertySymbol: KtPropertySymbol,
|
private val propertySymbol: KtPropertySymbol,
|
||||||
nameGenerator: FieldNameGenerator,
|
private val fieldName: String,
|
||||||
containingClass: FirLightClassBase,
|
containingClass: FirLightClassBase,
|
||||||
lightMemberOrigin: LightMemberOrigin?,
|
lightMemberOrigin: LightMemberOrigin?,
|
||||||
isTopLevel: Boolean,
|
isTopLevel: Boolean,
|
||||||
@@ -25,8 +25,6 @@ internal class FirLightFieldForPropertySymbol(
|
|||||||
takePropertyVisibility: Boolean
|
takePropertyVisibility: Boolean
|
||||||
) : FirLightField(containingClass, lightMemberOrigin) {
|
) : FirLightField(containingClass, lightMemberOrigin) {
|
||||||
|
|
||||||
private val _name: String = nameGenerator.generateUniqueFieldName(propertySymbol.name.asString())
|
|
||||||
|
|
||||||
override val kotlinOrigin: KtDeclaration? = propertySymbol.psi as? KtDeclaration
|
override val kotlinOrigin: KtDeclaration? = propertySymbol.psi as? KtDeclaration
|
||||||
|
|
||||||
private val _returnedType: PsiType by lazyPub {
|
private val _returnedType: PsiType by lazyPub {
|
||||||
@@ -51,37 +49,37 @@ internal class FirLightFieldForPropertySymbol(
|
|||||||
|
|
||||||
override fun getType(): PsiType = _returnedType
|
override fun getType(): PsiType = _returnedType
|
||||||
|
|
||||||
override fun getName(): String = _name
|
override fun getName(): String = fieldName
|
||||||
|
|
||||||
private val _modifierList: PsiModifierList by lazyPub {
|
private val _modifierList: PsiModifierList by lazyPub {
|
||||||
|
|
||||||
|
val modifiers = mutableSetOf<String>()
|
||||||
|
|
||||||
val suppressFinal = !propertySymbol.isVal
|
val suppressFinal = !propertySymbol.isVal
|
||||||
|
|
||||||
val modifiersFromSymbol = propertySymbol.computeModalityForMethod(
|
propertySymbol.computeModalityForMethod(
|
||||||
isTopLevel = isTopLevel,
|
isTopLevel = isTopLevel,
|
||||||
suppressFinal = suppressFinal
|
suppressFinal = suppressFinal,
|
||||||
|
result = modifiers
|
||||||
)
|
)
|
||||||
|
|
||||||
val basicModifiers = modifiersFromSymbol.add(
|
if (forceStatic) {
|
||||||
what = PsiModifier.STATIC,
|
modifiers.add(PsiModifier.STATIC)
|
||||||
`if` = forceStatic
|
}
|
||||||
)
|
|
||||||
|
|
||||||
val visibility =
|
val visibility =
|
||||||
if (takePropertyVisibility) propertySymbol.computeVisibility(isTopLevel = false) else PsiModifier.PRIVATE
|
if (takePropertyVisibility) propertySymbol.computeVisibility(isTopLevel = false) else PsiModifier.PRIVATE
|
||||||
|
modifiers.add(visibility)
|
||||||
|
|
||||||
val modifiersWithVisibility = basicModifiers + visibility
|
if (!suppressFinal) {
|
||||||
|
modifiers.add(PsiModifier.FINAL)
|
||||||
val modifiers = modifiersWithVisibility.add(
|
}
|
||||||
what = PsiModifier.FINAL,
|
if (propertySymbol.hasAnnotation("kotlin/jvm/Transient", null)) {
|
||||||
`if` = !suppressFinal
|
modifiers.add(PsiModifier.TRANSIENT)
|
||||||
).add(
|
}
|
||||||
what = PsiModifier.TRANSIENT,
|
if (propertySymbol.hasAnnotation("kotlin/jvm/Volatile", null)) {
|
||||||
`if` = propertySymbol.hasAnnotation("kotlin/jvm/Transient", null)
|
modifiers.add(PsiModifier.VOLATILE)
|
||||||
).add(
|
}
|
||||||
what = PsiModifier.VOLATILE,
|
|
||||||
`if` = propertySymbol.hasAnnotation("kotlin/jvm/Volatile", null)
|
|
||||||
)
|
|
||||||
|
|
||||||
val nullability = if (visibility != PsiModifier.PRIVATE)
|
val nullability = if (visibility != PsiModifier.PRIVATE)
|
||||||
propertySymbol.type.getTypeNullability(propertySymbol, FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE)
|
propertySymbol.type.getTypeNullability(propertySymbol, FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE)
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
|
|||||||
import org.jetbrains.kotlin.name.SpecialNames
|
import org.jetbrains.kotlin.name.SpecialNames
|
||||||
import org.jetbrains.kotlin.types.model.SimpleTypeMarker
|
import org.jetbrains.kotlin.types.model.SimpleTypeMarker
|
||||||
import java.text.StringCharacterIterator
|
import java.text.StringCharacterIterator
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
internal fun <L : Any> L.invalidAccess(): Nothing =
|
internal fun <L : Any> L.invalidAccess(): Nothing =
|
||||||
error("Cls delegate shouldn't be accessed for fir light classes! Qualified name: ${javaClass.name}")
|
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()
|
else -> throw NotImplementedError()
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun FirMemberDeclaration.computeModalityForMethod(isTopLevel: Boolean): Set<String> {
|
|
||||||
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<KtCommonSymbolModality>.computeModalityForMethod(
|
internal fun KtSymbolWithModality<KtCommonSymbolModality>.computeModalityForMethod(
|
||||||
isTopLevel: Boolean,
|
isTopLevel: Boolean,
|
||||||
suppressFinal: Boolean
|
suppressFinal: Boolean,
|
||||||
): Set<String> {
|
result: MutableSet<String>
|
||||||
|
) {
|
||||||
require(this !is KtClassLikeSymbol)
|
require(this !is KtClassLikeSymbol)
|
||||||
|
|
||||||
val modality = mutableSetOf<String>()
|
|
||||||
|
|
||||||
computeSimpleModality()?.run {
|
computeSimpleModality()?.run {
|
||||||
if (this != PsiModifier.FINAL || !suppressFinal) {
|
if (this != PsiModifier.FINAL || !suppressFinal) {
|
||||||
modality.add(this)
|
result.add(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this is KtFunctionSymbol && isExternal) {
|
if (this is KtFunctionSymbol && isExternal) {
|
||||||
modality.add(PsiModifier.NATIVE)
|
result.add(PsiModifier.NATIVE)
|
||||||
}
|
}
|
||||||
if (isTopLevel) {
|
if (isTopLevel) {
|
||||||
modality.add(PsiModifier.STATIC)
|
result.add(PsiModifier.STATIC)
|
||||||
}
|
}
|
||||||
|
|
||||||
return modality
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun FirMemberDeclaration.computeVisibility(isTopLevel: Boolean): String {
|
internal fun FirMemberDeclaration.computeVisibility(isTopLevel: Boolean): String {
|
||||||
@@ -337,8 +324,7 @@ internal fun KtSimpleConstantValue<*>.createPsiLiteral(parent: PsiElement): PsiE
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun <T> Set<T>.add(what: T, `if`: Boolean): Set<T> =
|
|
||||||
applyIf(`if`) { this + what }
|
|
||||||
|
|
||||||
internal inline fun <T> T.applyIf(`if`: Boolean, body: T.() -> T): T =
|
internal inline fun <T> T.applyIf(`if`: Boolean, body: T.() -> T): T =
|
||||||
if (`if`) body() else this
|
if (`if`) body() else this
|
||||||
|
|
||||||
|
internal fun BitSet.copy(): BitSet = clone() as BitSet
|
||||||
+16
-11
@@ -79,25 +79,30 @@ internal class FirLightAccessorMethodForSymbol(
|
|||||||
val isOverrideMethod = propertyAccessorSymbol.isOverride || containingPropertySymbol.isOverride
|
val isOverrideMethod = propertyAccessorSymbol.isOverride || containingPropertySymbol.isOverride
|
||||||
val isInterfaceMethod = containingClass.isInterface
|
val isInterfaceMethod = containingClass.isInterface
|
||||||
|
|
||||||
|
val modifiers = mutableSetOf<String>()
|
||||||
|
|
||||||
|
containingPropertySymbol.computeModalityForMethod(
|
||||||
|
isTopLevel = isTopLevel,
|
||||||
|
suppressFinal = isOverrideMethod || isInterfaceMethod,
|
||||||
|
result = modifiers
|
||||||
|
)
|
||||||
|
|
||||||
val visibility = isOverrideMethod.ifTrue {
|
val visibility = isOverrideMethod.ifTrue {
|
||||||
(containingClass as? FirLightClassForSymbol)
|
(containingClass as? FirLightClassForSymbol)
|
||||||
?.tryGetEffectiveVisibility(containingPropertySymbol)
|
?.tryGetEffectiveVisibility(containingPropertySymbol)
|
||||||
?.toPsiVisibility(isTopLevel)
|
?.toPsiVisibility(isTopLevel)
|
||||||
} ?: propertyAccessorSymbol.computeVisibility(isTopLevel)
|
} ?: propertyAccessorSymbol.computeVisibility(isTopLevel)
|
||||||
|
modifiers.add(visibility)
|
||||||
|
|
||||||
val modifiers = containingPropertySymbol.computeModalityForMethod(
|
if (containingPropertySymbol.hasJvmStaticAnnotation(accessorSite)) {
|
||||||
isTopLevel = isTopLevel,
|
modifiers.add(PsiModifier.STATIC)
|
||||||
suppressFinal = isOverrideMethod || isInterfaceMethod
|
}
|
||||||
) + visibility
|
|
||||||
|
if (isInterfaceMethod) {
|
||||||
|
modifiers.add(PsiModifier.ABSTRACT)
|
||||||
|
}
|
||||||
|
|
||||||
modifiers
|
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 {
|
private val _modifierList: PsiModifierList by lazyPub {
|
||||||
|
|||||||
-1
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
|
|||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.asJava.elements.FirLightIdentifier
|
import org.jetbrains.kotlin.asJava.elements.FirLightIdentifier
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionLikeSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionLikeSymbol
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
|||||||
+19
-13
@@ -86,21 +86,27 @@ internal class FirLightSimpleMethodForSymbol(
|
|||||||
|
|
||||||
val finalModifier = kotlinOrigin?.hasModifier(KtTokens.FINAL_KEYWORD) == true
|
val finalModifier = kotlinOrigin?.hasModifier(KtTokens.FINAL_KEYWORD) == true
|
||||||
|
|
||||||
val modifiers = functionSymbol.computeModalityForMethod(
|
val modifiers = mutableSetOf<String>()
|
||||||
isTopLevel = isTopLevel,
|
|
||||||
suppressFinal = !finalModifier && functionSymbol.isOverride
|
|
||||||
) + _visibility
|
|
||||||
|
|
||||||
modifiers.add(
|
functionSymbol.computeModalityForMethod(
|
||||||
what = PsiModifier.STATIC,
|
isTopLevel = isTopLevel,
|
||||||
`if` = functionSymbol.hasJvmStaticAnnotation()
|
suppressFinal = !finalModifier && functionSymbol.isOverride,
|
||||||
).add(
|
result = modifiers
|
||||||
what = PsiModifier.STRICTFP,
|
|
||||||
`if` = functionSymbol.hasAnnotation("kotlin/jvm/Strictfp", null)
|
|
||||||
).add(
|
|
||||||
what = PsiModifier.SYNCHRONIZED,
|
|
||||||
`if` = functionSymbol.hasAnnotation("kotlin/jvm/Synchronized", null)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
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 {
|
private val _isDeprecated: Boolean by lazyPub {
|
||||||
|
|||||||
+1
-5
@@ -11,7 +11,6 @@ import com.intellij.openapi.util.TextRange
|
|||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.impl.PsiClassImplUtil
|
import com.intellij.psi.impl.PsiClassImplUtil
|
||||||
import com.intellij.psi.impl.light.LightElement
|
import com.intellij.psi.impl.light.LightElement
|
||||||
import com.intellij.psi.impl.light.LightReferenceListBuilder
|
|
||||||
import com.intellij.psi.javadoc.PsiDocComment
|
import com.intellij.psi.javadoc.PsiDocComment
|
||||||
import com.intellij.psi.search.SearchScope
|
import com.intellij.psi.search.SearchScope
|
||||||
import org.jetbrains.kotlin.asJava.classes.KotlinSuperTypeListBuilder
|
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.basicIsEquivalentTo
|
||||||
import org.jetbrains.kotlin.idea.asJava.invalidAccess
|
import org.jetbrains.kotlin.idea.asJava.invalidAccess
|
||||||
import org.jetbrains.kotlin.idea.asJava.mapSupertype
|
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.symbols.KtTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtClassType
|
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.KtTypeParameter
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||||
|
|
||||||
@@ -65,7 +61,7 @@ internal class FirLightTypeParameter(
|
|||||||
role = PsiReferenceList.Role.EXTENDS_LIST
|
role = PsiReferenceList.Role.EXTENDS_LIST
|
||||||
)
|
)
|
||||||
|
|
||||||
typeParameterSymbol.bounds
|
typeParameterSymbol.upperBounds
|
||||||
.filterIsInstance<KtClassType>()
|
.filterIsInstance<KtClassType>()
|
||||||
.filter { it.classId != StandardClassIds.Any }
|
.filter { it.classId != StandardClassIds.Any }
|
||||||
.mapNotNull { it.mapSupertype(this, kotlinCollectionAsIs = true) }
|
.mapNotNull { it.mapSupertype(this, kotlinCollectionAsIs = true) }
|
||||||
|
|||||||
+1
-1
@@ -30,7 +30,7 @@ internal class KtFirTypeParameterSymbol(
|
|||||||
|
|
||||||
override val name: Name get() = firRef.withFir { it.name }
|
override val name: Name get() = firRef.withFir { it.name }
|
||||||
|
|
||||||
override val bounds: List<KtType> by firRef.withFirAndCache(FirResolvePhase.TYPES) { fir ->
|
override val upperBounds: List<KtType> by firRef.withFirAndCache(FirResolvePhase.TYPES) { fir ->
|
||||||
fir.bounds.map { type -> builder.buildKtType(type) }
|
fir.bounds.map { type -> builder.buildKtType(type) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user