mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Javafx: "Wrap field with JavaFx property" intention - listen for addition and removal of FXML files (IDEA-102430)
This commit is contained in:
@@ -15,7 +15,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
*/
|
||||
public class JavaFxFileTypeFactory extends FileTypeFactory {
|
||||
@NonNls public static final String FXML_EXTENSION = "fxml";
|
||||
@NonNls private static final String DOT_FXML_EXTENSION = "." + FXML_EXTENSION;
|
||||
@NonNls static final String DOT_FXML_EXTENSION = "." + FXML_EXTENSION;
|
||||
|
||||
public static boolean isFxml(@NotNull PsiFile file) {
|
||||
final VirtualFile virtualFile = file.getViewProvider().getVirtualFile();
|
||||
|
||||
@@ -5,10 +5,12 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtil;
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.startup.StartupActivity;
|
||||
import com.intellij.openapi.startup.StartupManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.ModificationTracker;
|
||||
import com.intellij.openapi.util.SimpleModificationTracker;
|
||||
import com.intellij.openapi.vfs.*;
|
||||
import com.intellij.packaging.artifacts.Artifact;
|
||||
import com.intellij.packaging.artifacts.ArtifactManager;
|
||||
import com.intellij.psi.PsiFile;
|
||||
@@ -60,7 +62,7 @@ public class JavaFxModuleUtil {
|
||||
.map(file -> ModuleUtil.findModuleForFile(file, project))
|
||||
.collect(Collectors.toCollection(THashSet::new));
|
||||
|
||||
return CachedValueProvider.Result.create(modules, ProjectRootManager.getInstance(project));
|
||||
return CachedValueProvider.Result.create(modules, FxmlPresenceListener.getModificationTracker(project));
|
||||
});
|
||||
return value;
|
||||
}
|
||||
@@ -81,6 +83,8 @@ public class JavaFxModuleUtil {
|
||||
public static class JavaFxDetectionStartupActivity implements StartupActivity {
|
||||
@Override
|
||||
public void runActivity(@NotNull Project project) {
|
||||
VirtualFileManager.getInstance().addVirtualFileListener(new FxmlPresenceListener(project), project);
|
||||
|
||||
if (ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
return;
|
||||
}
|
||||
@@ -97,4 +101,56 @@ public class JavaFxModuleUtil {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class FxmlPresenceListener extends VirtualFileAdapter {
|
||||
private static final Key<ModificationTracker> KEY = Key.create("fxml.presence.modification.tracker");
|
||||
private final SimpleModificationTracker myModificationTracker;
|
||||
|
||||
public FxmlPresenceListener(@NotNull Project project) {
|
||||
myModificationTracker = new SimpleModificationTracker();
|
||||
project.putUserData(KEY, myModificationTracker);
|
||||
}
|
||||
|
||||
private static ModificationTracker getModificationTracker(@NotNull Project project) {
|
||||
return project.getUserData(KEY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fileCreated(@NotNull VirtualFileEvent event) {
|
||||
checkEvent(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fileDeleted(@NotNull VirtualFileEvent event) {
|
||||
checkEvent(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fileMoved(@NotNull VirtualFileMoveEvent event) {
|
||||
checkEvent(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fileCopied(@NotNull VirtualFileCopyEvent event) {
|
||||
checkEvent(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void propertyChanged(@NotNull VirtualFilePropertyEvent event) {
|
||||
if (VirtualFile.PROP_NAME.equals(event.getPropertyName())) {
|
||||
final String oldName = (String)event.getOldValue();
|
||||
final String newName = (String)event.getNewValue();
|
||||
if (oldName != null && newName != null &&
|
||||
oldName.endsWith(JavaFxFileTypeFactory.DOT_FXML_EXTENSION) != newName.endsWith(JavaFxFileTypeFactory.DOT_FXML_EXTENSION)) {
|
||||
myModificationTracker.incModificationCount();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void checkEvent(@NotNull VirtualFileEvent event) {
|
||||
if (JavaFxFileTypeFactory.isFxml(event.getFile())) {
|
||||
myModificationTracker.incModificationCount();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user