diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/compiler/KotlinCompilerManager.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/compiler/KotlinCompilerManager.kt index 7bdeb86784b..6482dc65b0e 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/compiler/KotlinCompilerManager.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/compiler/KotlinCompilerManager.kt @@ -13,102 +13,86 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +package org.jetbrains.kotlin.idea.compiler -package org.jetbrains.kotlin.idea.compiler; +import com.intellij.diagnostic.PluginException +import com.intellij.ide.plugins.PluginManagerCore +import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.compiler.CompilationStatusListener +import com.intellij.openapi.compiler.CompileContext +import com.intellij.openapi.compiler.CompilerManager +import com.intellij.openapi.compiler.CompilerMessageCategory +import com.intellij.openapi.components.ProjectComponent +import com.intellij.openapi.diagnostic.Logger +import com.intellij.openapi.project.Project +import com.intellij.openapi.util.io.FileUtilRt +import com.intellij.openapi.vfs.LocalFileSystem +import com.intellij.util.containers.ContainerUtil +import org.jetbrains.kotlin.config.CompilerRunnerConstants +import org.jetbrains.kotlin.idea.KotlinFileType +import org.jetbrains.kotlin.js.JavaScript +import java.io.PrintStream +import java.io.PrintWriter -import com.intellij.diagnostic.PluginException; -import com.intellij.ide.plugins.PluginManagerCore; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.compiler.*; -import com.intellij.openapi.components.ProjectComponent; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.io.FileUtilRt; -import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.util.containers.ContainerUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.idea.KotlinFileType; -import org.jetbrains.kotlin.js.JavaScript; +class KotlinCompilerManager(project: Project, manager: CompilerManager) : ProjectComponent { + // Extending PluginException ensures that Exception Analyzer recognizes this as a Kotlin exception + private class KotlinCompilerException(private val text: String) : + PluginException("", PluginManagerCore.getPluginByClassName(KotlinCompilerManager::class.java.name)) { + override fun printStackTrace(s: PrintWriter) { + s.print(text) + } -import java.io.PrintStream; -import java.io.PrintWriter; -import java.util.Set; + override fun printStackTrace(s: PrintStream) { + s.print(text) + } -import static org.jetbrains.kotlin.config.CompilerRunnerConstants.INTERNAL_ERROR_PREFIX; -import static org.jetbrains.kotlin.config.CompilerRunnerConstants.KOTLIN_COMPILER_NAME; + @Synchronized + override fun fillInStackTrace(): Throwable { + return this + } -public class KotlinCompilerManager implements ProjectComponent { - private static final Logger LOG = Logger.getInstance(KotlinCompilerManager.class); + override fun getStackTrace(): Array { + LOG.error("Somebody called getStackTrace() on KotlinCompilerException") + // Return some stack trace that originates in Kotlin + return UnsupportedOperationException().stackTrace + } - // Comes from external make - private static final String PREFIX_WITH_COMPILER_NAME = KOTLIN_COMPILER_NAME + ": " + INTERNAL_ERROR_PREFIX; - private static final Set FILE_EXTS_WHICH_NEEDS_REFRESH = ContainerUtil.immutableSet(JavaScript.DOT_EXTENSION, ".map"); + override val message: String + get() = "" - public KotlinCompilerManager(Project project, CompilerManager manager) { - manager.addCompilableFileType(KotlinFileType.INSTANCE); - manager.addCompilationStatusListener(new CompilationStatusListener() { - @Override - public void compilationFinished(boolean aborted, int errors, int warnings, CompileContext compileContext) { - for (CompilerMessage error : compileContext.getMessages(CompilerMessageCategory.ERROR)) { - String message = error.getMessage(); - if (message.startsWith(INTERNAL_ERROR_PREFIX) || message.startsWith(PREFIX_WITH_COMPILER_NAME)) { - LOG.error(new KotlinCompilerException(message)); + } + + companion object { + private val LOG = Logger.getInstance(KotlinCompilerManager::class.java) + + // Comes from external make + private const val PREFIX_WITH_COMPILER_NAME = + CompilerRunnerConstants.KOTLIN_COMPILER_NAME + ": " + CompilerRunnerConstants.INTERNAL_ERROR_PREFIX + private val FILE_EXTS_WHICH_NEEDS_REFRESH = ContainerUtil.immutableSet(JavaScript.DOT_EXTENSION, ".map") + } + + init { + manager.addCompilableFileType(KotlinFileType.INSTANCE) + manager.addCompilationStatusListener(object : CompilationStatusListener { + override fun compilationFinished(aborted: Boolean, errors: Int, warnings: Int, compileContext: CompileContext) { + for (error in compileContext.getMessages(CompilerMessageCategory.ERROR)) { + val message = error.message + if (message.startsWith(CompilerRunnerConstants.INTERNAL_ERROR_PREFIX) || message.startsWith(PREFIX_WITH_COMPILER_NAME)) { + LOG.error(KotlinCompilerException(message)) } } } - @Override - public void fileGenerated(String outputRoot, String relativePath) { - if (ApplicationManager.getApplication().isUnitTestMode()) return; - - String ext = FileUtilRt.getExtension(relativePath).toLowerCase(); - + override fun fileGenerated(outputRoot: String, relativePath: String) { + if (ApplicationManager.getApplication().isUnitTestMode) return + val ext = FileUtilRt.getExtension(relativePath).toLowerCase() if (FILE_EXTS_WHICH_NEEDS_REFRESH.contains(ext)) { - String outFile = outputRoot + "/" + relativePath; - VirtualFile virtualFile = LocalFileSystem.getInstance().findFileByPath(outFile); - assert virtualFile != null : "Virtual file not found for generated file path: " + outFile; - virtualFile.refresh(/*async =*/ false, /*recursive =*/ false); + val outFile = "$outputRoot/$relativePath" + val virtualFile = LocalFileSystem.getInstance().findFileByPath(outFile) + ?: error("Virtual file not found for generated file path: $outFile") + virtualFile.refresh( /*async =*/false, /*recursive =*/false) } } - }, project); + }, project) } - - // Extending PluginException ensures that Exception Analyzer recognizes this as a Kotlin exception - private static class KotlinCompilerException extends PluginException { - private final String text; - - public KotlinCompilerException(String text) { - super("", PluginManagerCore.getPluginByClassName(KotlinCompilerManager.class.getName())); - this.text = text; - } - - @Override - public void printStackTrace(PrintWriter s) { - s.print(text); - } - - @Override - public void printStackTrace(@NotNull PrintStream s) { - s.print(text); - } - - @NotNull - @Override - public synchronized Throwable fillInStackTrace() { - return this; - } - - @Override - public StackTraceElement[] getStackTrace() { - LOG.error("Somebody called getStackTrace() on KotlinCompilerException"); - // Return some stack trace that originates in Kotlin - return new UnsupportedOperationException().getStackTrace(); - } - - @Override - public String getMessage() { - return ""; - } - } -} +} \ No newline at end of file