EA-210234: Fix invalid access to Java resolution facade

Do not try to get Java resolution facade for non-Java PSI elements
This commit is contained in:
Ilya Kirillov
2019-12-05 17:52:48 +03:00
parent af6d5b76f5
commit 7f50dcb3a8
2 changed files with 11 additions and 6 deletions
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.idea.search.usagesSearch.operators
import com.intellij.lang.java.JavaLanguage
import com.intellij.openapi.progress.ProgressIndicatorProvider
import com.intellij.openapi.progress.util.ProgressWrapper
import com.intellij.psi.*
@@ -19,6 +20,7 @@ import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.caches.resolve.util.getJavaOrKotlinMemberDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.util.hasJavaResolutionFacade
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinRequestResultProcessor
@@ -201,9 +203,10 @@ abstract class OperatorReferenceSearcher<TReferenceElement : KtElement>(
}
protected open fun resolveTargetToDescriptor(): FunctionDescriptor? {
return when (targetDeclaration) {
is KtDeclaration -> targetDeclaration.resolveToDescriptorIfAny(BodyResolveMode.FULL)
is PsiMember -> targetDeclaration.getJavaOrKotlinMemberDescriptor()
return when {
targetDeclaration is KtDeclaration -> targetDeclaration.resolveToDescriptorIfAny(BodyResolveMode.FULL)
targetDeclaration is PsiMember && targetDeclaration.hasJavaResolutionFacade() ->
targetDeclaration.getJavaOrKotlinMemberDescriptor()
else -> null
} as? FunctionDescriptor
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations
import com.intellij.lang.java.JavaLanguage
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleUtilCore
import com.intellij.openapi.module.impl.scopes.JdkScope
@@ -35,6 +36,7 @@ import org.jetbrains.kotlin.idea.caches.project.getModuleInfoByVirtualFile
import org.jetbrains.kotlin.idea.caches.project.implementedModules
import org.jetbrains.kotlin.idea.caches.resolve.*
import org.jetbrains.kotlin.idea.caches.resolve.util.getJavaMemberDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.util.hasJavaResolutionFacade
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.core.isInTestSourceContentKotlinAware
import org.jetbrains.kotlin.idea.imports.importableFqName
@@ -459,9 +461,9 @@ class MoveConflictChecker(
val target = ref.resolve() ?: return@forEach
if (isToBeMoved(target)) return@forEach
val targetDescriptor = when (target) {
is KtDeclaration -> target.unsafeResolveToDescriptor()
is PsiMember -> target.getJavaMemberDescriptor()
val targetDescriptor = when {
target is KtDeclaration -> target.unsafeResolveToDescriptor()
target is PsiMember && target.hasJavaResolutionFacade() -> target.getJavaMemberDescriptor()
else -> null
} as? DeclarationDescriptorWithVisibility ?: return@forEach