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 package org.jetbrains.kotlin.idea.inspections
import com.intellij.icons.AllIcons
import com.intellij.ide.highlighter.JavaFileType import com.intellij.ide.highlighter.JavaFileType
import com.intellij.openapi.fileEditor.FileEditor import com.intellij.openapi.fileEditor.FileEditor
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Key import com.intellij.openapi.util.Key
import com.intellij.openapi.vfs.VirtualFile 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.EditorNotificationPanel
import com.intellij.ui.EditorNotifications import com.intellij.ui.EditorNotifications
import org.jetbrains.kotlin.idea.facet.KotlinFacet 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.findModule
import org.jetbrains.kotlin.idea.util.sourceRoots 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 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? { override fun createNotificationPanel(file: VirtualFile, fileEditor: FileEditor): EditorNotificationPanel? {
if (file.fileType != JavaFileType.INSTANCE) return null if (file.fileType != JavaFileType.INSTANCE) return null
val module = file.findModule(project) ?: 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 val nonKotlinPath = module.sourceRoots.map { it.path } - facetSettings.pureKotlinSourceFolders
if (nonKotlinPath.any { filePath.startsWith(it) }) return null if (nonKotlinPath.any { filePath.startsWith(it) }) return null
return EditorNotificationPanel().apply { 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)
} }
} }