Kapt: Add tests with Filer.
JavaFileObject.getName() now returns a path as required. (cherry picked from commit c611f9b)
This commit is contained in:
committed by
Yan Zhulanow
parent
824b778a7b
commit
743be477ec
+16
-11
@@ -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)
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user