[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 override fun createPointer(): KtSymbolPointer<KtTypeParameterSymbol>
|
||||
|
||||
abstract val bounds: List<KtType>
|
||||
abstract val upperBounds: List<KtType>
|
||||
}
|
||||
|
||||
sealed class KtClassLikeSymbol : KtClassifierSymbol(), KtNamedSymbol, KtSymbolWithKind {
|
||||
|
||||
+2
-3
@@ -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) :
|
||||
|
||||
-1
@@ -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(
|
||||
|
||||
+2
-2
@@ -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)
|
||||
|
||||
-1
@@ -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
|
||||
|
||||
+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.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,
|
||||
|
||||
+3
-4
@@ -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<KtClassType>()
|
||||
.filter { it.needToAddTypeIntoList() }
|
||||
.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.
|
||||
*/
|
||||
|
||||
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
|
||||
|
||||
|
||||
-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.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
|
||||
|
||||
|
||||
+20
-22
@@ -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<String>()
|
||||
|
||||
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)
|
||||
|
||||
@@ -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 : Any> 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<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(
|
||||
isTopLevel: Boolean,
|
||||
suppressFinal: Boolean
|
||||
): Set<String> {
|
||||
suppressFinal: Boolean,
|
||||
result: MutableSet<String>
|
||||
) {
|
||||
require(this !is KtClassLikeSymbol)
|
||||
|
||||
val modality = mutableSetOf<String>()
|
||||
|
||||
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 <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 =
|
||||
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 isInterfaceMethod = containingClass.isInterface
|
||||
|
||||
val modifiers = mutableSetOf<String>()
|
||||
|
||||
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 {
|
||||
|
||||
-1
@@ -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.*
|
||||
|
||||
|
||||
+19
-13
@@ -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<String>()
|
||||
|
||||
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 {
|
||||
|
||||
+1
-5
@@ -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<KtClassType>()
|
||||
.filter { it.classId != StandardClassIds.Any }
|
||||
.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 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) }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user