JavaOutsideModuleDetector: should refresh notification after move

#KT-32967 Fixed
This commit is contained in:
Dmitry Gridin
2019-07-25 20:49:40 +03:00
parent 4c8d0acb5d
commit a10e57eaec
@@ -5,11 +5,15 @@
package org.jetbrains.kotlin.idea.inspections
import com.intellij.icons.AllIcons
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.openapi.vfs.VirtualFileListener
import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.openapi.vfs.VirtualFileMoveEvent
import com.intellij.ui.EditorNotificationPanel
import com.intellij.ui.EditorNotifications
import org.jetbrains.kotlin.idea.facet.KotlinFacet
@@ -17,9 +21,18 @@ 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<EditorNotificationPanel>() {
class JavaOutsideModuleDetector(private val project: Project, notifications: EditorNotifications) :
EditorNotifications.Provider<EditorNotificationPanel>() {
override fun getKey(): Key<EditorNotificationPanel> = KEY
init {
VirtualFileManager.getInstance().addVirtualFileListener(object : VirtualFileListener {
override fun fileMoved(event: VirtualFileMoveEvent) {
if (event.file.fileType == JavaFileType.INSTANCE) notifications.updateNotifications(event.file)
}
})
}
override fun createNotificationPanel(file: VirtualFile, fileEditor: FileEditor): EditorNotificationPanel? {
if (file.fileType != JavaFileType.INSTANCE) return null
val module = file.findModule(project) ?: return null
@@ -30,7 +43,8 @@ class JavaOutsideModuleDetector(private val project: Project) : EditorNotificati
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.")
text("This .java file is outside of Java source roots and won't be added to the classpath.")
icon(AllIcons.General.Warning)
}
}