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.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