[LL FIR, Java] fix resolve contract violation from java symbol provider from permits
To create a smart psi type pointer, IJ Platform uses resolve We cannot use resolve from JavaSymbolProvider, as it may lead to resolve contract violation ^KT-59243 Fixed
This commit is contained in:
committed by
Space Team
parent
5af8b9e819
commit
7631e90f12
+3
-1
@@ -69,7 +69,9 @@ class JavaClassImpl(psiClassSource: JavaElementPsiSource<PsiClass>) : JavaClassi
|
||||
get() = JavaElementUtil.isSealed(this)
|
||||
|
||||
override val permittedTypes: Collection<JavaClassifierType>
|
||||
get() = classifierTypes(psi.permitsListTypes, sourceFactory)
|
||||
get() = psi.permitsListTypes.convertIndexed { index, _ ->
|
||||
JavaClassifierTypeImpl(sourceFactory.createPermittedTypeSource(psiElementSource, index))
|
||||
}
|
||||
|
||||
override val isRecord: Boolean
|
||||
get() = psi.isRecord
|
||||
|
||||
+15
@@ -26,6 +26,14 @@ abstract class JavaElementSourceFactory {
|
||||
|
||||
abstract fun <TYPE : PsiType> createExpressionTypeSource(psiExpressionSource: JavaElementPsiSource<out PsiExpression>): JavaElementTypeSource<TYPE>
|
||||
|
||||
/**
|
||||
* @see com.intellij.psi.PsiClass.getPermitsListTypes
|
||||
*/
|
||||
abstract fun createPermittedTypeSource(
|
||||
psiTypeParameterSource: JavaElementPsiSource<out PsiClass>,
|
||||
permittedTypeIndex: Int,
|
||||
): JavaElementTypeSource<PsiClassType>
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun getInstance(project: Project): JavaElementSourceFactory {
|
||||
@@ -63,6 +71,13 @@ class JavaFixedElementSourceFactory : JavaElementSourceFactory() {
|
||||
return createTypeSource(psiTypeParameterSource.psi.superTypes[superTypeIndex])
|
||||
}
|
||||
|
||||
override fun createPermittedTypeSource(
|
||||
psiTypeParameterSource: JavaElementPsiSource<out PsiClass>,
|
||||
permittedTypeIndex: Int
|
||||
): JavaElementTypeSource<PsiClassType> {
|
||||
return createTypeSource(psiTypeParameterSource.psi.permitsListTypes[permittedTypeIndex])
|
||||
}
|
||||
|
||||
override fun <TYPE : PsiType> createExpressionTypeSource(psiExpressionSource: JavaElementPsiSource<out PsiExpression>): JavaElementTypeSource<TYPE> {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return createTypeSource(psiExpressionSource.psi.type as TYPE)
|
||||
|
||||
Reference in New Issue
Block a user