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 5f665cb..3edfc8b 100644 --- a/src/main/java/net/labymod/intellij/singlehotswap/actions/SingleHotswapAction.java +++ b/src/main/java/net/labymod/intellij/singlehotswap/actions/SingleHotswapAction.java @@ -112,64 +112,70 @@ public void actionPerformed(@NotNull AnActionEvent event) { this.notifyUser("Invalid file to hotswap: " + psiFile.getName(), NotificationType.WARNING); } - HotSwapProgressImpl progress = new HotSwapProgressImpl(project); - progress.setTitle("Saving opened documents..."); - - // Save the opened documents - FileDocumentManager.getInstance().saveAllDocuments(); - - progress.setTitle("Initialize hotswap task..."); - - // Create compiler and progress - AbstractCompiler compiler = context.compiler(this.configuration); - ClassFile outputFile = context.getClassFile(psiFile); - VirtualFile sourceFile = psiFile.getVirtualFile(); - // Get debugger session DebuggerManagerEx debuggerManager = DebuggerManagerEx.getInstanceEx(project); DebuggerSession debugger = debuggerManager.getContext().getDebuggerSession(); - // Execute application thread - Application application = ApplicationManager.getApplication(); - application.executeOnPooledThread(() -> { - ProgressManager.getInstance().runProcess(() -> { - progress.setTitle("Compile classes..."); - - try { - long start = System.currentTimeMillis(); - - // Compile the current opened file - List classFiles = compiler.compile(sourceFile, outputFile); - if (classFiles.isEmpty()) { - String message = "Could not compile " + psiFile.getName(); + HotSwapProgressImpl progress = new HotSwapProgressImpl(project); + try { + progress.setTitle("Saving opened documents..."); + + // Save the opened documents + FileDocumentManager.getInstance().saveAllDocuments(); + + progress.setTitle("Initialize hotswap task..."); + + // Create compiler and progress + AbstractCompiler compiler = context.compiler(this.configuration); + ClassFile outputFile = context.getClassFile(psiFile); + VirtualFile sourceFile = psiFile.getVirtualFile(); + + // Execute application thread + Application application = ApplicationManager.getApplication(); + application.executeOnPooledThread(() -> { + ProgressManager.getInstance().runProcess(() -> { + progress.setTitle("Compile classes..."); + + try { + long start = System.currentTimeMillis(); + + // Compile the current opened file + List classFiles = compiler.compile(sourceFile, outputFile); + if (classFiles.isEmpty()) { + String message = "Could not compile " + psiFile.getName(); + progress.addMessage(debugger, MessageCategory.ERROR, message); + return; + } + + // Show compile duration + long duration = System.currentTimeMillis() - start; + if (this.configuration.isShowCompileDuration()) { + String message = "Compiled " + classFiles.size() + " classes in " + duration + "ms"; + progress.addMessage(debugger, MessageCategory.STATISTICS, message); + } + progress.setTitle("Hotswap classes..."); + + // Hotswap the file + if (!context.hotswap(debugger, progress, classFiles)) { + String message = "Could not hotswap " + psiFile.getName(); + progress.addMessage(debugger, MessageCategory.ERROR, message); + } + } catch (Exception e) { + String message = "Error during hotswap: " + e.getMessage(); progress.addMessage(debugger, MessageCategory.ERROR, message); - return; - } - - // Show compile duration - long duration = System.currentTimeMillis() - start; - if (this.configuration.isShowCompileDuration()) { - String message = "Compiled " + classFiles.size() + " classes in " + duration + "ms"; - progress.addMessage(debugger, MessageCategory.STATISTICS, message); } - progress.setTitle("Hotswap classes..."); - // Hotswap the file - if (!context.hotswap(debugger, progress, classFiles)) { - String message = "Could not hotswap " + psiFile.getName(); - progress.addMessage(debugger, MessageCategory.ERROR, message); - } - } catch (Exception e) { - String message = "Error during hotswap: " + e.getMessage(); - progress.addMessage(debugger, MessageCategory.ERROR, message); - } - - progress.setTitle("Hotswap completed"); - progress.finished(); - }, progress.getProgressIndicator()); - }); + progress.setTitle("Hotswap completed"); + progress.finished(); + }, progress.getProgressIndicator()); + }); + } catch (Exception e) { + String message = "Can't initialize hotswap task: " + e.getMessage(); + progress.addMessage(debugger, MessageCategory.ERROR, message); + progress.finished(); + } } catch (Exception e) { - this.notifyUser("Can't initialize hotswap task: " + e.getMessage(), NotificationType.ERROR); + this.notifyUser("Can't setup hotswap task: " + e.getMessage(), NotificationType.ERROR); } } diff --git a/src/main/java/net/labymod/intellij/singlehotswap/hotswap/impl/AbstractContext.java b/src/main/java/net/labymod/intellij/singlehotswap/hotswap/impl/AbstractContext.java index 0ea13a2..4d2e40f 100644 --- a/src/main/java/net/labymod/intellij/singlehotswap/hotswap/impl/AbstractContext.java +++ b/src/main/java/net/labymod/intellij/singlehotswap/hotswap/impl/AbstractContext.java @@ -78,6 +78,17 @@ public List getInnerClassFiles(ClassFile classFile) { for (File fileInPackage : filesInPackage) { String innerFullClassName = fileInPackage.getName(); + // Check if it's a static kotlin file + if (innerFullClassName.equals(classFile.getClassName() + "Kt.class")) { + innerClasses.add(new ClassFile( + classFile.getProject(), + fileInPackage, + classFile.getPackageName(), + classFile.getClassName() + "Kt" + )); + continue; + } + // Check if it's an inner class of the target class if (!innerFullClassName.startsWith(classFile.getClassName() + "$")) { continue; @@ -90,7 +101,7 @@ public List getInnerClassFiles(ClassFile classFile) { } String subClassName = innerFileName.substring(0, innerFileName.lastIndexOf(".class")); - String innerClassName = classFile.getClassPath() + "$" + subClassName; + String innerClassName = classFile.getClassName() + "$" + subClassName; // Collect the inner class of the target class innerClasses.add(new ClassFile( diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 378ae57..b2d783e 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.0 + 2.1 LabyMedia @@ -46,6 +46,10 @@ +
  • Fixed support for kotlin & inner classes
  • + v2.0 (16.07.2022):
    • Implemented the built-in java compiler to speed up the compile process