[Editor] Create working compiler scaffolding

This commit is contained in:
2021-02-24 22:02:34 +01:00
parent d429ada78b
commit c883ac656e
5 changed files with 64 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
package com.bartlomiejpluta.base.editor.code.compiler
interface CompilingService {
fun compile()
}

View File

@@ -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) }
}
}

View File

@@ -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())
}
}

View File

@@ -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)
}

View File

@@ -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()
}
}
}
}
}