diff --git a/api/build.gradle b/api/build.gradle new file mode 100644 index 00000000..c631c795 --- /dev/null +++ b/api/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'java-library' +} + +group 'com.bartlomiejpluta.base' +version 'unspecified' + +repositories { + mavenCentral() +} + +dependencies { + +} \ No newline at end of file diff --git a/editor/build.gradle b/editor/build.gradle index 5c50fa06..5385cb9e 100644 --- a/editor/build.gradle +++ b/editor/build.gradle @@ -47,15 +47,21 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter' } -task copyGameEngine(type: Copy) { +task provideGameEngine(type: Copy) { dependsOn(":game:build") from project(':game').file('build/libs/game.jar') into file("build/resources/main/engine") } +task provideApi(type: Copy) { + from project(':api').file('src/main/java') + into file('build/resources/main/api') +} + processResources { - dependsOn(copyGameEngine) + dependsOn(provideGameEngine) + dependsOn(provideApi) } build { diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/build/compiler/JaninoCompiler.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/build/compiler/JaninoCompiler.kt index 9c228a74..dd0ed333 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/build/compiler/JaninoCompiler.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/build/compiler/JaninoCompiler.kt @@ -1,9 +1,13 @@ package com.bartlomiejpluta.base.editor.code.build.compiler +import com.bartlomiejpluta.base.editor.code.build.model.ClasspathResource import com.bartlomiejpluta.base.editor.code.model.FileSystemNode import com.bartlomiejpluta.base.editor.event.UpdateCompilationLogEvent import org.codehaus.commons.compiler.CompileException +import org.codehaus.commons.compiler.util.resource.FileResource +import org.codehaus.commons.compiler.util.resource.Resource import org.codehaus.janino.CompilerFactory +import org.springframework.beans.factory.annotation.Value import org.springframework.stereotype.Component import tornadofx.FX import java.io.File @@ -15,15 +19,31 @@ import java.util.stream.Collectors.toList class JaninoCompiler : ScriptCompiler { private val compilerFactory = CompilerFactory() + @Value("classpath:api/**/*.java") + private lateinit var apiFiles: Array + override fun compile(sourceDirectory: FileSystemNode, targetDirectory: File) { - val files = sourceDirectory.allChildren.map(FileSystemNode::file).filter(File::isFile) + val sources = sourceDirectory + .allChildren + .map(FileSystemNode::file) + .filter(File::isFile) + .map(::FileResource) + .toTypedArray() + + val api = apiFiles + .map(::ClasspathResource) + .toTypedArray() + + val resources = sources + api + val compiler = compilerFactory.newCompiler() + // FIXME: // For some reason the compiler's error handler does not want to catch // syntax errors. The only way to catch it is just catching CompileExceptions try { - compiler.compile(files.toTypedArray()) + compiler.compile(resources) FX.eventbus.fire(UpdateCompilationLogEvent(UpdateCompilationLogEvent.Severity.INFO, "Compilation success")) moveClassFilesToTargetDirectory(sourceDirectory.file, targetDirectory) } catch (e: CompileException) { diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/build/model/ClasspathResource.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/build/model/ClasspathResource.kt new file mode 100644 index 00000000..49cdf0c2 --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/build/model/ClasspathResource.kt @@ -0,0 +1,13 @@ +package com.bartlomiejpluta.base.editor.code.build.model + +import org.codehaus.commons.compiler.util.resource.Resource +import java.io.InputStream + +class ClasspathResource(private val resource: org.springframework.core.io.Resource) : Resource { + + override fun open(): InputStream = resource.inputStream + + override fun getFileName(): String = resource.filename ?: "" + + override fun lastModified(): Long = resource.lastModified() +} \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/build/model/FileResource.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/build/model/FileResource.kt new file mode 100644 index 00000000..856d3a39 --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/code/build/model/FileResource.kt @@ -0,0 +1,14 @@ +package com.bartlomiejpluta.base.editor.code.build.model + +import org.codehaus.commons.compiler.util.resource.Resource +import java.io.File +import java.io.InputStream + +class FileResource(private val file: File) : Resource { + + override fun open(): InputStream = file.inputStream() + + override fun getFileName(): String = file.name + + override fun lastModified(): Long = file.lastModified() +} \ No newline at end of file diff --git a/game/build.gradle b/game/build.gradle index 32a2459a..997cb6b2 100644 --- a/game/build.gradle +++ b/game/build.gradle @@ -39,6 +39,7 @@ repositories { dependencies { implementation project(":engine") implementation project(":proto") + implementation project(":api") compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' diff --git a/settings.gradle b/settings.gradle index 8dbb5db0..815af424 100644 --- a/settings.gradle +++ b/settings.gradle @@ -12,4 +12,5 @@ include('engine') include('game') include('editor') include('proto') +include('api')