[Editor] Create working compiler scaffolding
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
package com.bartlomiejpluta.base.editor.code.compiler
|
||||
|
||||
interface CompilingService {
|
||||
fun compile()
|
||||
}
|
||||
@@ -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) }
|
||||
}
|
||||
}
|
||||
@@ -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())
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user