/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 7 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . idea . scratch . actions Ċ Ċ import Ġcom . intellij . icons . All Icons Ċ import Ġcom . intellij . openapi . action System . An Action Ċ import Ġcom . intellij . openapi . action System . An ActionEvent Ċ import Ġcom . intellij . openapi . compiler . Compiler Manager Ċ import Ġcom . intellij . openapi . project . D umb Service Ċ import Ġorg . jetbrains . kotlin . idea . Kotlin Bundle Ċ import Ġorg . jetbrains . kotlin . idea . scratch . Scratch File Ċ import Ġorg . jetbrains . kotlin . idea . scratch . Scratch File Language Provider Ċ import Ġorg . jetbrains . kotlin . idea . scratch . output . Scratch Output Handler Adapter Ċ import Ġorg . jetbrains . kotlin . idea . scratch . print Debug Message Ċ import Ġorg . jetbrains . kotlin . idea . scratch . ui . Scratch Top Panel Ċ import Ġorg . jetbrains . kotlin . idea . scratch . LOG Ġas Ġlog Ċ Ċ class ĠRun Scratch Action ( private Ġval Ġscratch Panel : ĠScr atch Top Panel ) Ġ: ĠAn Action ( ĊĠĠĠ ĠKotlin Bundle . message (" scratch . run . button "), ĊĠĠĠ ĠKotlin Bundle . message (" scratch . run . button "), ĊĠĠĠ ĠAll Icons . Actions . Execute Ċ ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠactionPerformed ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġe . project Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġscratch File Ġ= Ġscratch Panel . scratch File ĊĠĠĠĠĠĠĠ Ġval Ġpsi File Ġ= Ġscratch File . get Psi File () Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġis Make Before Run Ġ= Ġscratch Panel . is Make Before Run () ĊĠĠĠĠĠĠĠ Ġval Ġis Repl Ġ= Ġscratch Panel . is Repl () ĊĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĠScr atch File Language Provider . get ( psi File . language ) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= Ġprovider . getOutput Handler () ĊĊĠĠĠĠĠĠĠ Ġlog . print Debug Message (" Run ĠAction : Ġis Make Before Run Ġ= Ġ$ is Make Before Run , Ġis Repl Ġ= Ġ$ is Repl ") ĊĊĠĠĠĠĠĠĠ Ġval Ġmodule Ġ= Ġscratch Panel . getModule () ĊĠĠĠĠĠĠĠ Ġif Ġ( module Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . error ( scratch File , Ġ" Module Ġshould Ġbe Ġselected ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . on Finish ( scratch File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrunnable Ġ= Ġr @{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexecutor Ġ= Ġif Ġ( is Repl ) Ġprovider . create Repl Executor ( scratch File ) Ġelse Ġprovider . create Comp iling Executor ( scratch File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( executor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . error ( scratch File , Ġ" Couldn 't Ġrun Ġ${ psi File . name }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . on Finish ( scratch File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ r ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . presentation . isEnabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor . add Output Handler ( handler ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor . add Output Handler ( object Ġ: ĠScr atch Output Handler Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish ( file : ĠScr atch File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . presentation . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor . execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . error ( scratch File , Ġ" Exception Ġoccurs Ġduring ĠRun ĠScr atch ĠAction ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . on Finish ( scratch File ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . presentation . isEnabled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error ( ex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ r ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Make Before Run ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCompiler Manager . getInstance ( project ). make ( module ) Ġ{ Ġaborted , Ġerrors , Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! abort ed Ġ&& Ġerrors Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( D umb Service . is D umb ( project )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD umb Service . getInstance ( project ). smart Invoke Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunnable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunnable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrunnable () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ