diff --git a/build.gradle.kts b/build.gradle.kts index 8e92604..c01cddd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ repositories { // Configure Gradle IntelliJ Plugin intellij { pluginName.set("Single Hotswap") - version.set("2022.3") + version.set("2023.1") type.set("IC") // Target IDE Platform plugins.set(listOf("Kotlin", "Groovy", "java", "properties")) diff --git a/src/main/java/net/labymod/intellij/singlehotswap/actions/SingleHotswapAction.java b/src/main/java/net/labymod/intellij/singlehotswap/actions/SingleHotswapAction.java index b088e9f..f597bf9 100644 --- a/src/main/java/net/labymod/intellij/singlehotswap/actions/SingleHotswapAction.java +++ b/src/main/java/net/labymod/intellij/singlehotswap/actions/SingleHotswapAction.java @@ -15,8 +15,10 @@ import com.intellij.openapi.compiler.CompilerManager; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.fileEditor.FileDocumentManager; +import com.intellij.openapi.module.Module; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import com.intellij.util.ui.MessageCategory; @@ -110,6 +112,7 @@ public void actionPerformed(@NotNull AnActionEvent event) { // Check if it is possible to hotswap the opened file if (!context.isPossible(psiFile)) { this.notifyUser("Invalid file to hotswap: " + psiFile.getName(), NotificationType.WARNING); + return; } // Get debugger session @@ -127,6 +130,12 @@ public void actionPerformed(@NotNull AnActionEvent event) { ClassFile outputFile = context.getClassFile(psiFile); VirtualFile sourceFile = psiFile.getVirtualFile(); + Module module = ProjectFileIndex.getInstance(project).getModuleForFile(sourceFile); + if (module == null) { + this.notifyUser("Could not find module for file: " + sourceFile.getName(), NotificationType.WARNING); + return; + } + // Execute progress HotSwapProgressImpl progress = new HotSwapProgressImpl(project); Application application = ApplicationManager.getApplication(); @@ -139,7 +148,7 @@ public void actionPerformed(@NotNull AnActionEvent event) { long start = System.currentTimeMillis(); // Compile the current opened file - List classFiles = compiler.compile(sourceFile, outputFile); + List classFiles = compiler.compile(module, sourceFile, outputFile); if (classFiles.isEmpty()) { String message = "Could not compile " + psiFile.getName(); progress.addMessage(debugger, MessageCategory.ERROR, message); diff --git a/src/main/java/net/labymod/intellij/singlehotswap/compiler/AbstractCompiler.java b/src/main/java/net/labymod/intellij/singlehotswap/compiler/AbstractCompiler.java index 191d9ee..f878527 100644 --- a/src/main/java/net/labymod/intellij/singlehotswap/compiler/AbstractCompiler.java +++ b/src/main/java/net/labymod/intellij/singlehotswap/compiler/AbstractCompiler.java @@ -1,5 +1,6 @@ package net.labymod.intellij.singlehotswap.compiler; +import com.intellij.openapi.module.Module; import com.intellij.openapi.vfs.VirtualFile; import net.labymod.intellij.singlehotswap.hotswap.ClassFile; import net.labymod.intellij.singlehotswap.hotswap.Context; @@ -30,5 +31,5 @@ public AbstractCompiler(Context context) { * @return A list of class files that were compiled. (More than one class file can be compiled if the source file contains inner classes.) * @throws Exception If an error occurs while compiling the source file. */ - public abstract List compile(VirtualFile sourceFile, ClassFile outputFile) throws Exception; + public abstract List compile(Module module, VirtualFile sourceFile, ClassFile outputFile) throws Exception; } diff --git a/src/main/java/net/labymod/intellij/singlehotswap/compiler/impl/BuiltInJavaCompiler.java b/src/main/java/net/labymod/intellij/singlehotswap/compiler/impl/BuiltInJavaCompiler.java index 98df16a..dfab029 100644 --- a/src/main/java/net/labymod/intellij/singlehotswap/compiler/impl/BuiltInJavaCompiler.java +++ b/src/main/java/net/labymod/intellij/singlehotswap/compiler/impl/BuiltInJavaCompiler.java @@ -6,7 +6,6 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModuleRootManager; -import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -35,15 +34,11 @@ public BuiltInJavaCompiler(Context context) { } @Override - public List compile(VirtualFile sourceFile, ClassFile outputFile) throws Exception { + public List compile(Module module, VirtualFile sourceFile, ClassFile outputFile) throws Exception { File file = VfsUtil.virtualToIoFile(sourceFile); // Find current module Project project = outputFile.getProject(); - Module module = ProjectFileIndex.SERVICE.getInstance(project).getModuleForFile(sourceFile); - if (module == null) { - return new ArrayList<>(); - } // Find the class files and the class version // We take the java version from the previously compiled class file by reading the header diff --git a/src/main/java/net/labymod/intellij/singlehotswap/compiler/impl/DefaultCompiler.java b/src/main/java/net/labymod/intellij/singlehotswap/compiler/impl/DefaultCompiler.java index e56bf00..b54d0d3 100644 --- a/src/main/java/net/labymod/intellij/singlehotswap/compiler/impl/DefaultCompiler.java +++ b/src/main/java/net/labymod/intellij/singlehotswap/compiler/impl/DefaultCompiler.java @@ -3,7 +3,6 @@ import com.intellij.debugger.settings.DebuggerSettings; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.task.ProjectTaskManager; import com.intellij.task.ProjectTaskManager.Result; @@ -11,7 +10,6 @@ import net.labymod.intellij.singlehotswap.compiler.AbstractCompiler; import net.labymod.intellij.singlehotswap.hotswap.ClassFile; import net.labymod.intellij.singlehotswap.hotswap.Context; -import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; @@ -30,7 +28,7 @@ public DefaultCompiler(Context context) { } @Override - public List compile(VirtualFile sourceFile, ClassFile outputFile) throws Exception { + public List compile(Module module, VirtualFile sourceFile, ClassFile outputFile) throws Exception { List classFiles = new ArrayList<>(); Project project = outputFile.getProject(); @@ -44,13 +42,6 @@ public List compile(VirtualFile sourceFile, ClassFile outputFile) thr // IntelliJ always reloads every single file that is referenced by the target class. settings.RUN_HOTSWAP_AFTER_COMPILE = DebuggerSettings.RUN_HOTSWAP_NEVER; - // Create task - ProjectFileIndex index = ProjectFileIndex.SERVICE.getInstance(project); - @Nullable Module module = index.getModuleForFile(sourceFile, false); - if (module == null) { - return classFiles; - } - // Compile virtual file ModuleFilesBuildTaskImpl task = new ModuleFilesBuildTaskImpl(module, true, sourceFile); Result result = projectTaskManager.run(task).blockingGet(3, TimeUnit.MINUTES); diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 4f479e1..61ad2b6 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -1,7 +1,7 @@ net.labymod.intellij.singlehotswap Single Hotswap - 2.4 + 2.5 LabyMedia @@ -53,7 +53,11 @@ +
  • Fixed exception when hotswapping with IntelliJ 2023.1 using the new UI
  • + + v2.4 (2023-03-06):
    • Fixed an issue where the background task wouldn't finish if an error occurred