Do not report "no reflection" inspection in JS modules
#KT-7087 Fixed
This commit is contained in:
@@ -21,11 +21,13 @@ import com.intellij.codeInspection.ProblemDescriptor
|
|||||||
import com.intellij.codeInspection.ProblemHighlightType
|
import com.intellij.codeInspection.ProblemHighlightType
|
||||||
import com.intellij.codeInspection.ProblemsHolder
|
import com.intellij.codeInspection.ProblemsHolder
|
||||||
import com.intellij.openapi.extensions.Extensions
|
import com.intellij.openapi.extensions.Extensions
|
||||||
|
import com.intellij.openapi.module.ModuleUtilCore
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.OrderRootType
|
import com.intellij.openapi.roots.OrderRootType
|
||||||
import com.intellij.openapi.vfs.VfsUtil
|
import com.intellij.openapi.vfs.VfsUtil
|
||||||
import com.intellij.openapi.vfs.VfsUtilCore
|
import com.intellij.openapi.vfs.VfsUtilCore
|
||||||
import com.intellij.psi.PsiElementVisitor
|
import com.intellij.psi.PsiElementVisitor
|
||||||
|
import com.intellij.psi.PsiFile
|
||||||
import org.jetbrains.kotlin.idea.JetBundle
|
import org.jetbrains.kotlin.idea.JetBundle
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
|
import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
|
||||||
@@ -33,6 +35,7 @@ import org.jetbrains.kotlin.idea.configuration.ConfigureKotlinInProjectUtils
|
|||||||
import org.jetbrains.kotlin.idea.configuration.KotlinJavaModuleConfigurator
|
import org.jetbrains.kotlin.idea.configuration.KotlinJavaModuleConfigurator
|
||||||
import org.jetbrains.kotlin.idea.configuration.KotlinProjectConfigurator
|
import org.jetbrains.kotlin.idea.configuration.KotlinProjectConfigurator
|
||||||
import org.jetbrains.kotlin.idea.framework.JavaRuntimePresentationProvider
|
import org.jetbrains.kotlin.idea.framework.JavaRuntimePresentationProvider
|
||||||
|
import org.jetbrains.kotlin.idea.project.ProjectStructureUtil
|
||||||
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||||
import org.jetbrains.kotlin.idea.versions.KotlinRuntimeLibraryUtil
|
import org.jetbrains.kotlin.idea.versions.KotlinRuntimeLibraryUtil
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
@@ -51,11 +54,7 @@ public class ReflectionNotFoundInspection : AbstractKotlinInspection() {
|
|||||||
override fun runForWholeFile() = true
|
override fun runForWholeFile() = true
|
||||||
|
|
||||||
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor {
|
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor {
|
||||||
val file = holder.getFile()
|
if (!shouldReportInFile(holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR
|
||||||
val noReflectionInClassPath =
|
|
||||||
file is JetFile &&
|
|
||||||
ProjectRootsUtil.isInProjectSource(file) &&
|
|
||||||
file.findModuleDescriptor().findClassAcrossModuleDependencies(JvmAbi.REFLECTION_FACTORY_IMPL) == null
|
|
||||||
|
|
||||||
return object : JetVisitorVoid() {
|
return object : JetVisitorVoid() {
|
||||||
private fun createQuickFix(): LocalQuickFix? {
|
private fun createQuickFix(): LocalQuickFix? {
|
||||||
@@ -73,8 +72,6 @@ public class ReflectionNotFoundInspection : AbstractKotlinInspection() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitDoubleColonExpression(expression: JetDoubleColonExpression) {
|
override fun visitDoubleColonExpression(expression: JetDoubleColonExpression) {
|
||||||
if (!noReflectionInClassPath) return
|
|
||||||
|
|
||||||
val expectedType = expression.analyze().get(BindingContext.EXPECTED_EXPRESSION_TYPE, expression)
|
val expectedType = expression.analyze().get(BindingContext.EXPECTED_EXPRESSION_TYPE, expression)
|
||||||
if (expectedType != null && !ReflectionTypes.isReflectionType(expectedType)) return
|
if (expectedType != null && !ReflectionTypes.isReflectionType(expectedType)) return
|
||||||
|
|
||||||
@@ -91,6 +88,15 @@ public class ReflectionNotFoundInspection : AbstractKotlinInspection() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun shouldReportInFile(file: PsiFile): Boolean {
|
||||||
|
if (file !is JetFile || !ProjectRootsUtil.isInProjectSource(file)) return false
|
||||||
|
|
||||||
|
val module = ModuleUtilCore.findModuleForPsiElement(file)
|
||||||
|
if (module == null || !ProjectStructureUtil.isJavaKotlinModule(module)) return false
|
||||||
|
|
||||||
|
return file.findModuleDescriptor().findClassAcrossModuleDependencies(JvmAbi.REFLECTION_FACTORY_IMPL) == null
|
||||||
|
}
|
||||||
|
|
||||||
class AddReflectJarQuickFix(
|
class AddReflectJarQuickFix(
|
||||||
val configurator: KotlinJavaModuleConfigurator,
|
val configurator: KotlinJavaModuleConfigurator,
|
||||||
val pluginReflectJar: File
|
val pluginReflectJar: File
|
||||||
|
|||||||
Reference in New Issue
Block a user