1+ package com.tschuchort.compiletest
2+
3+ import org.jetbrains.kotlin.incremental.isJavaFile
4+ import java.io.*
5+ import java.net.URI
6+ import java.net.URL
7+ import java.nio.charset.Charset
8+ import javax.tools.JavaCompiler
9+ import javax.tools.JavaFileObject
10+ import javax.tools.SimpleJavaFileObject
11+
12+ /* *
13+ * A [JavaFileObject] created from a source [File].
14+ *
15+ * Used for interfacing with javac ([JavaCompiler]).
16+ */
17+ internal class FileJavaFileObject (val sourceFile : File , val charset : Charset = Charset .defaultCharset())
18+ : SimpleJavaFileObject (sourceFile.toURI(), deduceKind(sourceFile.toURI())) {
19+
20+ init {
21+ require(sourceFile.isFile)
22+ require(sourceFile.canRead())
23+ }
24+
25+ companion object {
26+ private fun deduceKind (uri : URI ): JavaFileObject .Kind
27+ = JavaFileObject .Kind .values().firstOrNull {
28+ uri.path.endsWith(it.extension, ignoreCase = true )
29+ } ? : JavaFileObject .Kind .OTHER
30+ }
31+
32+ override fun openInputStream (): InputStream = sourceFile.inputStream()
33+
34+ override fun getCharContent (ignoreEncodingErrors : Boolean ): CharSequence
35+ = sourceFile.readText(charset)
36+ }
37+
38+ /* *
39+ * A [JavaFileObject] created from a [String].
40+ *
41+ * Used for interfacing with javac ([JavaCompiler]).
42+ */
43+ internal class StringJavaFileObject (className : String , private val contents : String )
44+ : SimpleJavaFileObject (
45+ URI .create(" string:///" + className.replace(' .' , ' /' ) + JavaFileObject .Kind .SOURCE .extension),
46+ JavaFileObject .Kind .SOURCE
47+ ){
48+ private var _lastModified = System .currentTimeMillis()
49+
50+ override fun getCharContent (ignoreEncodingErrors : Boolean ): CharSequence = contents
51+
52+ override fun openInputStream (): InputStream
53+ = ByteArrayInputStream (contents.toByteArray(Charset .defaultCharset()))
54+
55+ override fun openReader (ignoreEncodingErrors : Boolean ): Reader = StringReader (contents)
56+
57+ override fun getLastModified (): Long = _lastModified
58+ }
0 commit comments