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 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.ProgressIndicatorProvider
import com.intellij.openapi.progress.util.ProgressWrapper import com.intellij.openapi.progress.util.ProgressWrapper
import com.intellij.psi.* 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.getResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny 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.getJavaOrKotlinMemberDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.util.hasJavaResolutionFacade
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinRequestResultProcessor import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinRequestResultProcessor
@@ -201,9 +203,10 @@ abstract class OperatorReferenceSearcher<TReferenceElement : KtElement>(
} }
protected open fun resolveTargetToDescriptor(): FunctionDescriptor? { protected open fun resolveTargetToDescriptor(): FunctionDescriptor? {
return when (targetDeclaration) { return when {
is KtDeclaration -> targetDeclaration.resolveToDescriptorIfAny(BodyResolveMode.FULL) targetDeclaration is KtDeclaration -> targetDeclaration.resolveToDescriptorIfAny(BodyResolveMode.FULL)
is PsiMember -> targetDeclaration.getJavaOrKotlinMemberDescriptor() targetDeclaration is PsiMember && targetDeclaration.hasJavaResolutionFacade() ->
targetDeclaration.getJavaOrKotlinMemberDescriptor()
else -> null else -> null
} as? FunctionDescriptor } as? FunctionDescriptor
} }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations 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.Module
import com.intellij.openapi.module.ModuleUtilCore import com.intellij.openapi.module.ModuleUtilCore
import com.intellij.openapi.module.impl.scopes.JdkScope 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.project.implementedModules
import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.idea.caches.resolve.*
import org.jetbrains.kotlin.idea.caches.resolve.util.getJavaMemberDescriptor 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.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.core.isInTestSourceContentKotlinAware import org.jetbrains.kotlin.idea.core.isInTestSourceContentKotlinAware
import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.imports.importableFqName
@@ -459,9 +461,9 @@ class MoveConflictChecker(
val target = ref.resolve() ?: return@forEach val target = ref.resolve() ?: return@forEach
if (isToBeMoved(target)) return@forEach if (isToBeMoved(target)) return@forEach
val targetDescriptor = when (target) { val targetDescriptor = when {
is KtDeclaration -> target.unsafeResolveToDescriptor() target is KtDeclaration -> target.unsafeResolveToDescriptor()
is PsiMember -> target.getJavaMemberDescriptor() target is PsiMember && target.hasJavaResolutionFacade() -> target.getJavaMemberDescriptor()
else -> null else -> null
} as? DeclarationDescriptorWithVisibility ?: return@forEach } as? DeclarationDescriptorWithVisibility ?: return@forEach