Do not report "no reflection" inspection in JS modules

#KT-7087 Fixed
This commit is contained in:
Alexander Udalov
2015-03-23 15:36:34 +03:00
parent 3335752462
commit aaef2d42cd
@@ -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