From aaef2d42cd4ddb7ec74480856f94dfb35cc4f38d Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 23 Mar 2015 15:36:34 +0300 Subject: [PATCH] Do not report "no reflection" inspection in JS modules #KT-7087 Fixed --- .../ReflectionNotFoundInspection.kt | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/ReflectionNotFoundInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/ReflectionNotFoundInspection.kt index f473f4df3c3..c7733400f42 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/ReflectionNotFoundInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/ReflectionNotFoundInspection.kt @@ -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