FIR: set PSI elements in JavaSymbolProvider / enhancement scope
Related to KT-24351
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.backend
|
package org.jetbrains.kotlin.fir.backend
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiCompiledElement
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol
|
||||||
@@ -23,6 +24,7 @@ import org.jetbrains.kotlin.types.Variance
|
|||||||
internal fun <T : IrElement> FirElement.convertWithOffsets(
|
internal fun <T : IrElement> FirElement.convertWithOffsets(
|
||||||
f: (startOffset: Int, endOffset: Int) -> T
|
f: (startOffset: Int, endOffset: Int) -> T
|
||||||
): T {
|
): T {
|
||||||
|
if (psi is PsiCompiledElement) return f(-1, -1)
|
||||||
val startOffset = psi?.startOffsetSkippingComments ?: -1
|
val startOffset = psi?.startOffsetSkippingComments ?: -1
|
||||||
val endOffset = psi?.endOffset ?: -1
|
val endOffset = psi?.endOffset ?: -1
|
||||||
return f(startOffset, endOffset)
|
return f(startOffset, endOffset)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.java
|
package org.jetbrains.kotlin.fir.java
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
@@ -32,6 +33,7 @@ import org.jetbrains.kotlin.load.java.JavaClassFinder
|
|||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaTypeParameter
|
import org.jetbrains.kotlin.load.java.structure.JavaTypeParameter
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.impl.JavaElementImpl
|
||||||
import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder
|
import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -157,7 +159,8 @@ class JavaSymbolProvider(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
FirJavaClass(
|
FirJavaClass(
|
||||||
session, firSymbol as FirClassSymbol, javaClass.name,
|
session, (javaClass as? JavaElementImpl<*>)?.psi,
|
||||||
|
firSymbol as FirClassSymbol, javaClass.name,
|
||||||
javaClass.visibility, javaClass.modality,
|
javaClass.visibility, javaClass.modality,
|
||||||
javaClass.classKind, isTopLevel = isTopLevel,
|
javaClass.classKind, isTopLevel = isTopLevel,
|
||||||
isStatic = javaClass.isStatic,
|
isStatic = javaClass.isStatic,
|
||||||
@@ -176,7 +179,8 @@ class JavaSymbolProvider(
|
|||||||
val fieldSymbol = FirFieldSymbol(fieldId)
|
val fieldSymbol = FirFieldSymbol(fieldId)
|
||||||
val returnType = javaField.type
|
val returnType = javaField.type
|
||||||
val firJavaField = FirJavaField(
|
val firJavaField = FirJavaField(
|
||||||
this@JavaSymbolProvider.session, fieldSymbol, fieldName,
|
this@JavaSymbolProvider.session, (javaField as? JavaElementImpl<*>)?.psi,
|
||||||
|
fieldSymbol, fieldName,
|
||||||
javaField.visibility, javaField.modality,
|
javaField.visibility, javaField.modality,
|
||||||
returnTypeRef = returnType.toFirJavaTypeRef(this@JavaSymbolProvider.session, javaTypeParameterStack),
|
returnTypeRef = returnType.toFirJavaTypeRef(this@JavaSymbolProvider.session, javaTypeParameterStack),
|
||||||
isVar = !javaField.isFinal,
|
isVar = !javaField.isFinal,
|
||||||
@@ -192,7 +196,8 @@ class JavaSymbolProvider(
|
|||||||
val methodSymbol = FirNamedFunctionSymbol(methodId)
|
val methodSymbol = FirNamedFunctionSymbol(methodId)
|
||||||
val returnType = javaMethod.returnType
|
val returnType = javaMethod.returnType
|
||||||
val firJavaMethod = FirJavaMethod(
|
val firJavaMethod = FirJavaMethod(
|
||||||
this@JavaSymbolProvider.session, methodSymbol, methodName,
|
this@JavaSymbolProvider.session, (javaMethod as? JavaElementImpl<*>)?.psi,
|
||||||
|
methodSymbol, methodName,
|
||||||
javaMethod.visibility, javaMethod.modality,
|
javaMethod.visibility, javaMethod.modality,
|
||||||
returnTypeRef = returnType.toFirJavaTypeRef(this@JavaSymbolProvider.session, javaTypeParameterStack),
|
returnTypeRef = returnType.toFirJavaTypeRef(this@JavaSymbolProvider.session, javaTypeParameterStack),
|
||||||
isStatic = javaMethod.isStatic
|
isStatic = javaMethod.isStatic
|
||||||
@@ -212,12 +217,14 @@ class JavaSymbolProvider(
|
|||||||
|
|
||||||
fun addJavaConstructor(
|
fun addJavaConstructor(
|
||||||
visibility: Visibility = this.visibility,
|
visibility: Visibility = this.visibility,
|
||||||
|
psi: PsiElement? = null,
|
||||||
isPrimary: Boolean = false
|
isPrimary: Boolean = false
|
||||||
): FirJavaConstructor {
|
): FirJavaConstructor {
|
||||||
val constructorSymbol = FirConstructorSymbol(constructorId)
|
val constructorSymbol = FirConstructorSymbol(constructorId)
|
||||||
val classTypeParameters = javaClass.typeParameters.convertTypeParameters(javaTypeParameterStack)
|
val classTypeParameters = javaClass.typeParameters.convertTypeParameters(javaTypeParameterStack)
|
||||||
val firJavaConstructor = FirJavaConstructor(
|
val firJavaConstructor = FirJavaConstructor(
|
||||||
this@JavaSymbolProvider.session, constructorSymbol, visibility, isPrimary,
|
this@JavaSymbolProvider.session, psi,
|
||||||
|
constructorSymbol, visibility, isPrimary,
|
||||||
FirResolvedTypeRefImpl(
|
FirResolvedTypeRefImpl(
|
||||||
null,
|
null,
|
||||||
firSymbol.constructType(
|
firSymbol.constructType(
|
||||||
@@ -236,7 +243,9 @@ class JavaSymbolProvider(
|
|||||||
addJavaConstructor(isPrimary = true)
|
addJavaConstructor(isPrimary = true)
|
||||||
}
|
}
|
||||||
for (javaConstructor in javaClassDeclaredConstructors) {
|
for (javaConstructor in javaClassDeclaredConstructors) {
|
||||||
addJavaConstructor(javaConstructor.visibility).apply {
|
addJavaConstructor(
|
||||||
|
visibility = javaConstructor.visibility, psi = (javaConstructor as? JavaElementImpl<*>)?.psi
|
||||||
|
).apply {
|
||||||
this.typeParameters += javaConstructor.typeParameters.convertTypeParameters(javaTypeParameterStack)
|
this.typeParameters += javaConstructor.typeParameters.convertTypeParameters(javaTypeParameterStack)
|
||||||
addAnnotationsFrom(this@JavaSymbolProvider.session, javaConstructor, javaTypeParameterStack)
|
addAnnotationsFrom(this@JavaSymbolProvider.session, javaConstructor, javaTypeParameterStack)
|
||||||
for (valueParameter in javaConstructor.valueParameters) {
|
for (valueParameter in javaConstructor.valueParameters) {
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
|||||||
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
||||||
import org.jetbrains.kotlin.load.java.structure.*
|
import org.jetbrains.kotlin.load.java.structure.*
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.impl.JavaElementImpl
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.types.Variance.*
|
import org.jetbrains.kotlin.types.Variance.*
|
||||||
@@ -195,7 +196,7 @@ internal fun JavaValueParameter.toFirValueParameters(
|
|||||||
session: FirSession, javaTypeParameterStack: JavaTypeParameterStack
|
session: FirSession, javaTypeParameterStack: JavaTypeParameterStack
|
||||||
): FirValueParameter {
|
): FirValueParameter {
|
||||||
return FirJavaValueParameter(
|
return FirJavaValueParameter(
|
||||||
session, name ?: Name.special("<anonymous Java parameter>"),
|
session, (this as? JavaElementImpl<*>)?.psi, name ?: Name.special("<anonymous Java parameter>"),
|
||||||
returnTypeRef = type.toFirJavaTypeRef(session, javaTypeParameterStack),
|
returnTypeRef = type.toFirJavaTypeRef(session, javaTypeParameterStack),
|
||||||
isVararg = isVararg
|
isVararg = isVararg
|
||||||
).apply {
|
).apply {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.java.declarations
|
package org.jetbrains.kotlin.fir.java.declarations
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
@@ -21,6 +22,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
class FirJavaClass internal constructor(
|
class FirJavaClass internal constructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
|
psi: PsiElement?,
|
||||||
override val symbol: FirClassSymbol,
|
override val symbol: FirClassSymbol,
|
||||||
name: Name,
|
name: Name,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
@@ -30,8 +32,8 @@ class FirJavaClass internal constructor(
|
|||||||
isStatic: Boolean,
|
isStatic: Boolean,
|
||||||
internal val javaTypeParameterStack: JavaTypeParameterStack
|
internal val javaTypeParameterStack: JavaTypeParameterStack
|
||||||
) : FirAbstractMemberDeclaration(
|
) : FirAbstractMemberDeclaration(
|
||||||
session, psi = null, name = name,
|
session, psi, name,
|
||||||
visibility = visibility, modality = modality,
|
visibility, modality,
|
||||||
isExpect = false, isActual = false
|
isExpect = false, isActual = false
|
||||||
), FirRegularClass, FirModifiableClass {
|
), FirRegularClass, FirModifiableClass {
|
||||||
init {
|
init {
|
||||||
|
|||||||
+3
-1
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.java.declarations
|
package org.jetbrains.kotlin.fir.java.declarations
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
@@ -20,13 +21,14 @@ import org.jetbrains.kotlin.fir.types.FirTypeRef
|
|||||||
|
|
||||||
class FirJavaConstructor(
|
class FirJavaConstructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
|
psi: PsiElement?,
|
||||||
override val symbol: FirConstructorSymbol,
|
override val symbol: FirConstructorSymbol,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
override val isPrimary: Boolean,
|
override val isPrimary: Boolean,
|
||||||
delegatedSelfTypeRef: FirTypeRef
|
delegatedSelfTypeRef: FirTypeRef
|
||||||
) : FirAbstractCallableMember<FirConstructor>(
|
) : FirAbstractCallableMember<FirConstructor>(
|
||||||
session,
|
session,
|
||||||
psi = null,
|
psi,
|
||||||
name = NAME,
|
name = NAME,
|
||||||
visibility = visibility,
|
visibility = visibility,
|
||||||
modality = Modality.FINAL,
|
modality = Modality.FINAL,
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.java.declarations
|
package org.jetbrains.kotlin.fir.java.declarations
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
@@ -20,6 +21,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
class FirJavaField(
|
class FirJavaField(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
|
psi: PsiElement?,
|
||||||
override val symbol: FirFieldSymbol,
|
override val symbol: FirFieldSymbol,
|
||||||
name: Name,
|
name: Name,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
@@ -28,8 +30,8 @@ class FirJavaField(
|
|||||||
override val isVar: Boolean,
|
override val isVar: Boolean,
|
||||||
isStatic: Boolean
|
isStatic: Boolean
|
||||||
) : FirAbstractCallableMember<FirField>(
|
) : FirAbstractCallableMember<FirField>(
|
||||||
session, psi = null, name = name,
|
session, psi, name,
|
||||||
visibility = visibility, modality = modality,
|
visibility, modality,
|
||||||
isExpect = false, isActual = false, isOverride = false,
|
isExpect = false, isActual = false, isOverride = false,
|
||||||
receiverTypeRef = null, returnTypeRef = returnTypeRef
|
receiverTypeRef = null, returnTypeRef = returnTypeRef
|
||||||
), FirField {
|
), FirField {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.java.declarations
|
package org.jetbrains.kotlin.fir.java.declarations
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
@@ -16,6 +17,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
class FirJavaMethod(
|
class FirJavaMethod(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
|
psi: PsiElement?,
|
||||||
symbol: FirNamedFunctionSymbol,
|
symbol: FirNamedFunctionSymbol,
|
||||||
name: Name,
|
name: Name,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
@@ -23,7 +25,7 @@ class FirJavaMethod(
|
|||||||
returnTypeRef: FirJavaTypeRef,
|
returnTypeRef: FirJavaTypeRef,
|
||||||
isStatic: Boolean
|
isStatic: Boolean
|
||||||
) : FirMemberFunctionImpl(
|
) : FirMemberFunctionImpl(
|
||||||
session, null, symbol, name,
|
session, psi, symbol, name,
|
||||||
visibility, modality,
|
visibility, modality,
|
||||||
false, isActual = false,
|
false, isActual = false,
|
||||||
isOverride = false,
|
isOverride = false,
|
||||||
|
|||||||
+3
-1
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.java.declarations
|
package org.jetbrains.kotlin.fir.java.declarations
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
||||||
@@ -13,11 +14,12 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
class FirJavaValueParameter(
|
class FirJavaValueParameter(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
|
psi: PsiElement?,
|
||||||
name: Name,
|
name: Name,
|
||||||
returnTypeRef: FirJavaTypeRef,
|
returnTypeRef: FirJavaTypeRef,
|
||||||
isVararg: Boolean
|
isVararg: Boolean
|
||||||
) : FirValueParameterImpl(
|
) : FirValueParameterImpl(
|
||||||
session, psi = null, name = name, returnTypeRef = returnTypeRef,
|
session, psi, name, returnTypeRef,
|
||||||
defaultValue = null, isCrossinline = false, isNoinline = false, isVararg = isVararg
|
defaultValue = null, isCrossinline = false, isNoinline = false, isVararg = isVararg
|
||||||
) {
|
) {
|
||||||
init {
|
init {
|
||||||
|
|||||||
+4
-3
@@ -86,6 +86,7 @@ class JavaClassEnhancementScope(
|
|||||||
with(firElement) {
|
with(firElement) {
|
||||||
FirJavaField(
|
FirJavaField(
|
||||||
this@JavaClassEnhancementScope.session,
|
this@JavaClassEnhancementScope.session,
|
||||||
|
firElement.psi,
|
||||||
symbol,
|
symbol,
|
||||||
name,
|
name,
|
||||||
visibility,
|
visibility,
|
||||||
@@ -185,7 +186,7 @@ class JavaClassEnhancementScope(
|
|||||||
val symbol = FirConstructorSymbol(methodId)
|
val symbol = FirConstructorSymbol(methodId)
|
||||||
if (firMethod.isPrimary) {
|
if (firMethod.isPrimary) {
|
||||||
FirPrimaryConstructorImpl(
|
FirPrimaryConstructorImpl(
|
||||||
this@JavaClassEnhancementScope.session, null, symbol,
|
this@JavaClassEnhancementScope.session, firMethod.psi, symbol,
|
||||||
firMethod.visibility,
|
firMethod.visibility,
|
||||||
isExpect = false,
|
isExpect = false,
|
||||||
isActual = false,
|
isActual = false,
|
||||||
@@ -194,7 +195,7 @@ class JavaClassEnhancementScope(
|
|||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
FirConstructorImpl(
|
FirConstructorImpl(
|
||||||
this@JavaClassEnhancementScope.session, null, symbol,
|
this@JavaClassEnhancementScope.session, firMethod.psi, symbol,
|
||||||
newReceiverTypeRef, newReturnTypeRef
|
newReceiverTypeRef, newReturnTypeRef
|
||||||
)
|
)
|
||||||
}.apply {
|
}.apply {
|
||||||
@@ -204,7 +205,7 @@ class JavaClassEnhancementScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> FirMemberFunctionImpl(
|
else -> FirMemberFunctionImpl(
|
||||||
this@JavaClassEnhancementScope.session, null,
|
this@JavaClassEnhancementScope.session, firMethod.psi,
|
||||||
if (!isAccessor) FirNamedFunctionSymbol(methodId)
|
if (!isAccessor) FirNamedFunctionSymbol(methodId)
|
||||||
else FirAccessorSymbol(callableId = propertyId!!, accessorId = methodId),
|
else FirAccessorSymbol(callableId = propertyId!!, accessorId = methodId),
|
||||||
name, newReceiverTypeRef, newReturnTypeRef
|
name, newReceiverTypeRef, newReturnTypeRef
|
||||||
|
|||||||
Reference in New Issue
Block a user