diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/compiler/CompilingService.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/compiler/CompilingService.kt new file mode 100644 index 00000000..9508a1d7 --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/compiler/CompilingService.kt @@ -0,0 +1,5 @@ +package com.bartlomiejpluta.base.editor.code.compiler + +interface CompilingService { + fun compile() +} \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/compiler/DefaultCompilingService.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/compiler/DefaultCompilingService.kt new file mode 100644 index 00000000..3e1f5938 --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/compiler/DefaultCompilingService.kt @@ -0,0 +1,22 @@ +package com.bartlomiejpluta.base.editor.code.compiler + +import com.bartlomiejpluta.base.editor.code.model.FileSystemNode +import com.bartlomiejpluta.base.editor.project.context.ProjectContext +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.stereotype.Component + +@Component +class DefaultCompilingService : CompilingService { + + @Autowired + private lateinit var compiler: ScriptCompiler + + @Autowired + private lateinit var projectContext: ProjectContext + + override fun compile() { + projectContext.project?.codeDirectory + ?.let { FileSystemNode(it) } + ?.let { compiler.compile(it) } + } +} \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/compiler/JavaCompiler.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/compiler/JavaCompiler.kt new file mode 100644 index 00000000..efa6d6d1 --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/compiler/JavaCompiler.kt @@ -0,0 +1,18 @@ +package com.bartlomiejpluta.base.editor.code.compiler + +import com.bartlomiejpluta.base.editor.code.model.FileSystemNode +import org.codehaus.janino.CompilerFactory +import org.springframework.stereotype.Component +import java.io.File + +@Component +class JavaCompiler : ScriptCompiler { + private val compilerFactory = CompilerFactory() + + override fun compile(sourceDirectory: FileSystemNode) { + val files = sourceDirectory.allChildren.map(FileSystemNode::file).filter(File::isFile) + val compiler = compilerFactory.newCompiler() + + compiler.compile(files.toTypedArray()) + } +} \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/compiler/ScriptCompiler.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/compiler/ScriptCompiler.kt new file mode 100644 index 00000000..ea2d0e2a --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/compiler/ScriptCompiler.kt @@ -0,0 +1,7 @@ +package com.bartlomiejpluta.base.editor.code.compiler + +import com.bartlomiejpluta.base.editor.code.model.FileSystemNode + +interface ScriptCompiler { + fun compile(sourceDirectory: FileSystemNode) +} \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/MainMenuView.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/MainMenuView.kt index 26587277..d1c13b04 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/MainMenuView.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/MainMenuView.kt @@ -1,5 +1,6 @@ package com.bartlomiejpluta.base.editor.main.view +import com.bartlomiejpluta.base.editor.code.compiler.CompilingService import com.bartlomiejpluta.base.editor.main.controller.MainController import com.bartlomiejpluta.base.editor.project.context.ProjectContext import tornadofx.* @@ -7,6 +8,7 @@ import tornadofx.* class MainMenuView : View() { private val mainController: MainController by di() private val projectContext: ProjectContext by di() + private val compilingService: CompilingService by di() override val root = menubar { menu("File") { @@ -49,5 +51,15 @@ class MainMenuView : View() { } } } + + menu("Build") { + enableWhen(projectContext.projectProperty.isNotNull) + + item("Compile") { + action { + compilingService.compile() + } + } + } } } \ No newline at end of file