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.ProblemsHolder
|
||||
import com.intellij.openapi.extensions.Extensions
|
||||
import com.intellij.openapi.module.ModuleUtilCore
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.roots.OrderRootType
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import com.intellij.openapi.vfs.VfsUtilCore
|
||||
import com.intellij.psi.PsiElementVisitor
|
||||
import com.intellij.psi.PsiFile
|
||||
import org.jetbrains.kotlin.idea.JetBundle
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
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.KotlinProjectConfigurator
|
||||
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.versions.KotlinRuntimeLibraryUtil
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||
@@ -51,11 +54,7 @@ public class ReflectionNotFoundInspection : AbstractKotlinInspection() {
|
||||
override fun runForWholeFile() = true
|
||||
|
||||
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor {
|
||||
val file = holder.getFile()
|
||||
val noReflectionInClassPath =
|
||||
file is JetFile &&
|
||||
ProjectRootsUtil.isInProjectSource(file) &&
|
||||
file.findModuleDescriptor().findClassAcrossModuleDependencies(JvmAbi.REFLECTION_FACTORY_IMPL) == null
|
||||
if (!shouldReportInFile(holder.getFile())) return PsiElementVisitor.EMPTY_VISITOR
|
||||
|
||||
return object : JetVisitorVoid() {
|
||||
private fun createQuickFix(): LocalQuickFix? {
|
||||
@@ -73,8 +72,6 @@ public class ReflectionNotFoundInspection : AbstractKotlinInspection() {
|
||||
}
|
||||
|
||||
override fun visitDoubleColonExpression(expression: JetDoubleColonExpression) {
|
||||
if (!noReflectionInClassPath) return
|
||||
|
||||
val expectedType = expression.analyze().get(BindingContext.EXPECTED_EXPRESSION_TYPE, expression)
|
||||
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(
|
||||
val configurator: KotlinJavaModuleConfigurator,
|
||||
val pluginReflectJar: File
|
||||
|
||||
Reference in New Issue
Block a user