From 60421c441e8cf0acbf9090d68101c86488e5c372 Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Fri, 5 Jul 2019 17:29:16 +0700 Subject: [PATCH] IDE: add warn on java files outside java source roots #KT-28121 Fixed --- .../inspections/JavaOutsideModuleDetector.kt | 40 +++++++++++++++++++ idea/resources/META-INF/jvm.xml | 1 + idea/resources/META-INF/jvm.xml.182 | 1 + idea/resources/META-INF/jvm.xml.183 | 1 + 4 files changed, 43 insertions(+) create mode 100644 idea/idea-jvm/src/org/jetbrains/kotlin/idea/inspections/JavaOutsideModuleDetector.kt diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/inspections/JavaOutsideModuleDetector.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/inspections/JavaOutsideModuleDetector.kt new file mode 100644 index 00000000000..c5c93294130 --- /dev/null +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/inspections/JavaOutsideModuleDetector.kt @@ -0,0 +1,40 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.inspections + +import com.intellij.ide.highlighter.JavaFileType +import com.intellij.openapi.fileEditor.FileEditor +import com.intellij.openapi.project.Project +import com.intellij.openapi.util.Key +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.ui.EditorNotificationPanel +import com.intellij.ui.EditorNotifications +import org.jetbrains.kotlin.idea.facet.KotlinFacet +import org.jetbrains.kotlin.idea.framework.isGradleModule +import org.jetbrains.kotlin.idea.util.findModule +import org.jetbrains.kotlin.idea.util.sourceRoots + +class JavaOutsideModuleDetector(private val project: Project) : EditorNotifications.Provider() { + override fun getKey(): Key = KEY + + override fun createNotificationPanel(file: VirtualFile, fileEditor: FileEditor): EditorNotificationPanel? { + if (file.fileType != JavaFileType.INSTANCE) return null + val module = file.findModule(project) ?: return null + if (!module.isGradleModule()) return null + val facetSettings = KotlinFacet.get(module)?.configuration?.settings ?: return null + + val filePath = file.path + val nonKotlinPath = module.sourceRoots.map { it.path } - facetSettings.pureKotlinSourceFolders + if (nonKotlinPath.any { filePath.startsWith(it) }) return null + return EditorNotificationPanel().apply { + setText("This .java file is outside of Java source roots and won't be added to the class-path.") + } + } + + companion object { + private val KEY = Key.create("JavaOutsideModuleDetector") + } +} \ No newline at end of file diff --git a/idea/resources/META-INF/jvm.xml b/idea/resources/META-INF/jvm.xml index e6baf00d31f..b527e9d652d 100644 --- a/idea/resources/META-INF/jvm.xml +++ b/idea/resources/META-INF/jvm.xml @@ -129,6 +129,7 @@ + diff --git a/idea/resources/META-INF/jvm.xml.182 b/idea/resources/META-INF/jvm.xml.182 index ca6cf260255..bfcba941048 100644 --- a/idea/resources/META-INF/jvm.xml.182 +++ b/idea/resources/META-INF/jvm.xml.182 @@ -128,6 +128,7 @@ + diff --git a/idea/resources/META-INF/jvm.xml.183 b/idea/resources/META-INF/jvm.xml.183 index b878301a6a3..34d1ce91aff 100644 --- a/idea/resources/META-INF/jvm.xml.183 +++ b/idea/resources/META-INF/jvm.xml.183 @@ -129,6 +129,7 @@ +