Kapt: Add tests with Filer.

JavaFileObject.getName() now returns a path as required.
(cherry picked from commit c611f9b)
This commit is contained in:
Yan Zhulanow
2016-08-31 19:40:51 +03:00
committed by Yan Zhulanow
parent 824b778a7b
commit 743be477ec
9 changed files with 131 additions and 16 deletions
@@ -36,7 +36,7 @@ class KotlinFiler(
internal var wasAnythingGenerated: Boolean = false
private set
private fun getGeneratedFile(nameCharSequence: CharSequence, extension: String): File {
private fun getGeneratedFile(nameCharSequence: CharSequence, extension: String, baseDir: File = generatedSourceDir): Pair<File, String> {
val name = nameCharSequence.toString()
val isPackageInfo = name.endsWith(PACKAGE_INFO_SUFFIX)
val fqName = if (isPackageInfo) name.substring(0, PACKAGE_INFO_SUFFIX.length) else name
@@ -44,14 +44,15 @@ class KotlinFiler(
val packageName = fqName.substringBeforeLast('.', "")
val packageDir = if (packageName.isNotEmpty()) {
File(generatedSourceDir, packageName.replace('.', '/')).apply { mkdirs() }
File(baseDir, packageName.replace('.', '/')).apply { mkdirs() }
}
else {
generatedSourceDir
baseDir
}
val fileName = fqName.substringAfterLast('.') + (if (isPackageInfo) PACKAGE_INFO_SUFFIX else extension)
return File(packageDir, fileName)
val file = File(packageDir, fileName)
return Pair(file, file.toRelativeString(baseDir))
}
private fun File.notifyCreated() = apply {
@@ -60,11 +61,13 @@ class KotlinFiler(
}
override fun createSourceFile(name: CharSequence, vararg originatingElements: Element?): JavaFileObject {
return KotlinJavaFileObject(getGeneratedFile(name, ".java").notifyCreated())
val (file, fileName) = getGeneratedFile(name, ".java")
return KotlinJavaFileObject(file.notifyCreated(), fileName)
}
override fun getResource(location: JavaFileManager.Location, pkg: CharSequence, relativeName: CharSequence): FileObject? {
return KotlinFileObject(getResourceFile(location, pkg, relativeName))
val (file, fileName) = getResourceFile(location, pkg, relativeName)
return KotlinFileObject(file, fileName)
}
override fun createResource(
@@ -73,12 +76,12 @@ class KotlinFiler(
relativeName: CharSequence,
vararg originatingElements: Element?
): FileObject? {
val resourceFile = getResourceFile(location, pkg, relativeName)
val (resourceFile, fileName) = getResourceFile(location, pkg, relativeName)
resourceFile.parentFile.mkdirs()
return KotlinFileObject(resourceFile.notifyCreated())
return KotlinFileObject(resourceFile.notifyCreated(), fileName)
}
private fun getResourceFile(location: JavaFileManager.Location, pkg: CharSequence, relativeName: CharSequence): File {
private fun getResourceFile(location: JavaFileManager.Location, pkg: CharSequence, relativeName: CharSequence): Pair<File, String> {
val baseDir = when (location) {
StandardLocation.CLASS_OUTPUT -> classesOutputDir
StandardLocation.SOURCE_OUTPUT -> generatedSourceDir
@@ -88,10 +91,12 @@ class KotlinFiler(
val targetDir = File(baseDir, pkg.toString().replace('.', '/'))
targetDir.mkdirs()
return File(targetDir, relativeName.toString())
val resourceFile = File(targetDir, relativeName.toString())
return Pair(resourceFile, resourceFile.toRelativeString(baseDir))
}
override fun createClassFile(name: CharSequence, vararg originatingElements: Element?): JavaFileObject {
return KotlinJavaFileObject(getGeneratedFile(name, ".class").notifyCreated())
val (file, fileName) = getGeneratedFile(name, ".class")
return KotlinJavaFileObject(file.notifyCreated(), fileName)
}
}
@@ -20,7 +20,7 @@ import java.io.File
import javax.tools.FileObject
import javax.tools.JavaFileObject
class KotlinJavaFileObject(file: File) : KotlinAbstractFileObject(file), JavaFileObject {
class KotlinJavaFileObject(file: File, fileName: String) : KotlinAbstractFileObject(file, fileName), JavaFileObject {
//TODO
override fun isNameCompatible(simpleName: String, kind: JavaFileObject.Kind) = true
@@ -38,12 +38,12 @@ class KotlinJavaFileObject(file: File) : KotlinAbstractFileObject(file), JavaFil
override fun getNestingKind() = null
}
class KotlinFileObject(file: File) : KotlinAbstractFileObject(file)
class KotlinFileObject(file: File, fileName: String) : KotlinAbstractFileObject(file, fileName)
abstract class KotlinAbstractFileObject(val file: File) : FileObject {
abstract class KotlinAbstractFileObject(val file: File, val fileName: String) : FileObject {
override fun openOutputStream() = file.outputStream()
override fun getName() = file.name
override fun getName() = fileName
override fun openWriter() = file.writer()