Support Java package prefix in Gradle plugin
Issue #KT-17150 Fixed
This commit is contained in:
@@ -43,13 +43,21 @@ import java.util.*
|
|||||||
fun Iterable<File>.javaSourceRoots(roots: Iterable<File>): Iterable<File> =
|
fun Iterable<File>.javaSourceRoots(roots: Iterable<File>): Iterable<File> =
|
||||||
filter(File::isJavaFile).mapNotNull { findSrcDirRoot(it, roots) }
|
filter(File::isJavaFile).mapNotNull { findSrcDirRoot(it, roots) }
|
||||||
|
|
||||||
fun makeModuleFile(name: String, isTest: Boolean, outputDir: File, sourcesToCompile: Iterable<File>, javaSourceRoots: Iterable<File>, classpath: Iterable<File>, friendDirs: Iterable<File>): File {
|
fun makeModuleFile(
|
||||||
|
name: String,
|
||||||
|
isTest: Boolean,
|
||||||
|
outputDir: File,
|
||||||
|
sourcesToCompile: Iterable<File>,
|
||||||
|
javaSourceRoots: Iterable<JvmSourceRoot>,
|
||||||
|
classpath: Iterable<File>,
|
||||||
|
friendDirs: Iterable<File>
|
||||||
|
): File {
|
||||||
val builder = KotlinModuleXmlBuilder()
|
val builder = KotlinModuleXmlBuilder()
|
||||||
builder.addModule(
|
builder.addModule(
|
||||||
name,
|
name,
|
||||||
outputDir.absolutePath,
|
outputDir.absolutePath,
|
||||||
sourcesToCompile,
|
sourcesToCompile,
|
||||||
javaSourceRoots.map { JvmSourceRoot(it) },
|
javaSourceRoots,
|
||||||
classpath,
|
classpath,
|
||||||
null,
|
null,
|
||||||
"java-production",
|
"java-production",
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import com.intellij.openapi.Disposable
|
|||||||
import com.intellij.openapi.util.Disposer
|
import com.intellij.openapi.util.Disposer
|
||||||
import com.intellij.openapi.vfs.impl.ZipHandler
|
import com.intellij.openapi.vfs.impl.ZipHandler
|
||||||
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
|
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
|
||||||
|
import org.jetbrains.kotlin.build.JvmSourceRoot
|
||||||
import org.jetbrains.kotlin.cli.common.CLICompiler
|
import org.jetbrains.kotlin.cli.common.CLICompiler
|
||||||
import org.jetbrains.kotlin.cli.common.ExitCode
|
import org.jetbrains.kotlin.cli.common.ExitCode
|
||||||
import org.jetbrains.kotlin.cli.common.KOTLIN_COMPILER_ENVIRONMENT_KEEPALIVE_PROPERTY
|
import org.jetbrains.kotlin.cli.common.KOTLIN_COMPILER_ENVIRONMENT_KEEPALIVE_PROPERTY
|
||||||
@@ -434,7 +435,11 @@ class CompileServiceImpl(
|
|||||||
}
|
}
|
||||||
parsedModule
|
parsedModule
|
||||||
}
|
}
|
||||||
val javaSourceRoots = parsedModule.modules.flatMapTo(HashSet()) { it.getJavaSourceRoots().map { File(it.path) } }
|
|
||||||
|
val javaSourceRoots = parsedModule.modules.flatMapTo(HashSet()) {
|
||||||
|
it.getJavaSourceRoots().map { JvmSourceRoot(File(it.path), it.packagePrefix) }
|
||||||
|
}
|
||||||
|
|
||||||
val allKotlinFiles = parsedModule.modules.flatMap { it.getSourceFiles().map(::File) }
|
val allKotlinFiles = parsedModule.modules.flatMap { it.getSourceFiles().map(::File) }
|
||||||
k2jvmArgs.friendPaths = parsedModule.modules.flatMap(Module::getFriendPaths).toTypedArray()
|
k2jvmArgs.friendPaths = parsedModule.modules.flatMap(Module::getFriendPaths).toTypedArray()
|
||||||
|
|
||||||
|
|||||||
+5
-2
@@ -20,6 +20,7 @@ import com.intellij.util.io.PersistentEnumeratorBase
|
|||||||
import org.jetbrains.kotlin.annotation.AnnotationFileUpdater
|
import org.jetbrains.kotlin.annotation.AnnotationFileUpdater
|
||||||
import org.jetbrains.kotlin.build.GeneratedFile
|
import org.jetbrains.kotlin.build.GeneratedFile
|
||||||
import org.jetbrains.kotlin.build.GeneratedJvmClass
|
import org.jetbrains.kotlin.build.GeneratedJvmClass
|
||||||
|
import org.jetbrains.kotlin.build.JvmSourceRoot
|
||||||
import org.jetbrains.kotlin.cli.common.ExitCode
|
import org.jetbrains.kotlin.cli.common.ExitCode
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
|
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
|
||||||
@@ -59,7 +60,9 @@ fun makeIncrementally(
|
|||||||
val kotlinFiles = sourceFiles.filter { it.extension.toLowerCase() in kotlinExtensions }
|
val kotlinFiles = sourceFiles.filter { it.extension.toLowerCase() in kotlinExtensions }
|
||||||
|
|
||||||
withIC {
|
withIC {
|
||||||
val compiler = IncrementalJvmCompilerRunner(cachesDir, /* javaSourceRoots = */sourceRoots.toSet(), versions, reporter)
|
val compiler = IncrementalJvmCompilerRunner(cachesDir,
|
||||||
|
sourceRoots.map { JvmSourceRoot(it, null) }.toSet(),
|
||||||
|
versions, reporter)
|
||||||
compiler.compile(kotlinFiles, args, messageCollector) {
|
compiler.compile(kotlinFiles, args, messageCollector) {
|
||||||
it.incrementalCache.sourceSnapshotMap.compareAndUpdate(sourceFiles)
|
it.incrementalCache.sourceSnapshotMap.compareAndUpdate(sourceFiles)
|
||||||
}
|
}
|
||||||
@@ -85,7 +88,7 @@ inline fun <R> withIC(enabled: Boolean = true, fn: ()->R): R {
|
|||||||
|
|
||||||
class IncrementalJvmCompilerRunner(
|
class IncrementalJvmCompilerRunner(
|
||||||
workingDir: File,
|
workingDir: File,
|
||||||
private val javaSourceRoots: Set<File>,
|
private val javaSourceRoots: Set<JvmSourceRoot>,
|
||||||
private val cacheVersions: List<CacheVersion>,
|
private val cacheVersions: List<CacheVersion>,
|
||||||
private val reporter: ICReporter,
|
private val reporter: ICReporter,
|
||||||
private var kaptAnnotationsFileUpdater: AnnotationFileUpdater? = null,
|
private var kaptAnnotationsFileUpdater: AnnotationFileUpdater? = null,
|
||||||
|
|||||||
+3
-4
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.compilerRunner
|
package org.jetbrains.kotlin.compilerRunner
|
||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
|
import org.jetbrains.kotlin.build.JvmSourceRoot
|
||||||
import org.jetbrains.kotlin.cli.common.ExitCode
|
import org.jetbrains.kotlin.cli.common.ExitCode
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
||||||
@@ -29,8 +30,6 @@ import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
|
|||||||
import org.jetbrains.kotlin.com.intellij.openapi.util.io.FileUtil
|
import org.jetbrains.kotlin.com.intellij.openapi.util.io.FileUtil
|
||||||
import org.jetbrains.kotlin.config.Services
|
import org.jetbrains.kotlin.config.Services
|
||||||
import org.jetbrains.kotlin.daemon.client.CompileServiceSession
|
import org.jetbrains.kotlin.daemon.client.CompileServiceSession
|
||||||
import org.jetbrains.kotlin.daemon.client.DaemonReportingTargets
|
|
||||||
import org.jetbrains.kotlin.daemon.client.launchProcessWithFallback
|
|
||||||
import org.jetbrains.kotlin.daemon.common.*
|
import org.jetbrains.kotlin.daemon.common.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ParentLastURLClassLoader
|
import org.jetbrains.kotlin.gradle.plugin.ParentLastURLClassLoader
|
||||||
import org.jetbrains.kotlin.gradle.plugin.kotlinDebug
|
import org.jetbrains.kotlin.gradle.plugin.kotlinDebug
|
||||||
@@ -38,7 +37,6 @@ import org.jetbrains.kotlin.incremental.*
|
|||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.PrintStream
|
import java.io.PrintStream
|
||||||
import kotlin.concurrent.thread
|
|
||||||
|
|
||||||
internal const val KOTLIN_COMPILER_EXECUTION_STRATEGY_PROPERTY = "kotlin.compiler.execution.strategy"
|
internal const val KOTLIN_COMPILER_EXECUTION_STRATEGY_PROPERTY = "kotlin.compiler.execution.strategy"
|
||||||
internal const val DAEMON_EXECUTION_STRATEGY = "daemon"
|
internal const val DAEMON_EXECUTION_STRATEGY = "daemon"
|
||||||
@@ -85,6 +83,7 @@ internal class GradleCompilerRunner(private val project: Project) : KotlinCompil
|
|||||||
fun runJvmCompiler(
|
fun runJvmCompiler(
|
||||||
sourcesToCompile: List<File>,
|
sourcesToCompile: List<File>,
|
||||||
javaSourceRoots: Iterable<File>,
|
javaSourceRoots: Iterable<File>,
|
||||||
|
javaPackagePrefix: String?,
|
||||||
args: K2JVMCompilerArguments,
|
args: K2JVMCompilerArguments,
|
||||||
environment: GradleCompilerEnvironment
|
environment: GradleCompilerEnvironment
|
||||||
): ExitCode {
|
): ExitCode {
|
||||||
@@ -93,7 +92,7 @@ internal class GradleCompilerRunner(private val project: Project) : KotlinCompil
|
|||||||
isTest = false,
|
isTest = false,
|
||||||
outputDir = args.destinationAsFile,
|
outputDir = args.destinationAsFile,
|
||||||
sourcesToCompile = sourcesToCompile,
|
sourcesToCompile = sourcesToCompile,
|
||||||
javaSourceRoots = javaSourceRoots,
|
javaSourceRoots = javaSourceRoots.map { JvmSourceRoot(it, javaPackagePrefix) },
|
||||||
classpath = args.classpathAsList,
|
classpath = args.classpathAsList,
|
||||||
friendDirs = args.friendPaths?.map(::File) ?: emptyList())
|
friendDirs = args.friendPaths?.map(::File) ?: emptyList())
|
||||||
args.buildFile = buildFile.absolutePath
|
args.buildFile = buildFile.absolutePath
|
||||||
|
|||||||
+9
-2
@@ -3,7 +3,9 @@ package org.jetbrains.kotlin.gradle.internal
|
|||||||
import org.gradle.api.GradleException
|
import org.gradle.api.GradleException
|
||||||
import org.gradle.api.file.FileCollection
|
import org.gradle.api.file.FileCollection
|
||||||
import org.gradle.api.internal.ConventionTask
|
import org.gradle.api.internal.ConventionTask
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.InputFiles
|
||||||
|
import org.gradle.api.tasks.OutputDirectory
|
||||||
|
import org.gradle.api.tasks.TaskAction
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
||||||
import org.jetbrains.kotlin.com.intellij.openapi.util.io.FileUtil
|
import org.jetbrains.kotlin.com.intellij.openapi.util.io.FileUtil
|
||||||
import org.jetbrains.kotlin.compilerRunner.GradleCompilerEnvironment
|
import org.jetbrains.kotlin.compilerRunner.GradleCompilerEnvironment
|
||||||
@@ -67,7 +69,12 @@ open class KaptTask : ConventionTask() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val compilerRunner = GradleCompilerRunner(project)
|
val compilerRunner = GradleCompilerRunner(project)
|
||||||
val exitCode = compilerRunner.runJvmCompiler(sourceRoots.kotlinSourceFiles, sourceRoots.javaSourceRoots, args, environment)
|
val exitCode = compilerRunner.runJvmCompiler(
|
||||||
|
sourceRoots.kotlinSourceFiles,
|
||||||
|
sourceRoots.javaSourceRoots,
|
||||||
|
kotlinCompileTask.javaPackagePrefix,
|
||||||
|
args,
|
||||||
|
environment)
|
||||||
throwGradleExceptionIfError(exitCode)
|
throwGradleExceptionIfError(exitCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+14
-1
@@ -232,6 +232,13 @@ open class KotlinCompile : AbstractKotlinCompile<K2JVMCompilerArguments>(), Kotl
|
|||||||
|
|
||||||
val kaptOptions = KaptOptions()
|
val kaptOptions = KaptOptions()
|
||||||
|
|
||||||
|
/** A package prefix that is used for locating Java sources in a directory structure with non-full-depth packages.
|
||||||
|
*
|
||||||
|
* Example: a Java source file with `package com.example.my.package` is located in directory `src/main/java/my/package`.
|
||||||
|
* Then, for the Kotlin compilation to locate the source file, use package prefix `"com.example"` */
|
||||||
|
@Input
|
||||||
|
var javaPackagePrefix: String? = null
|
||||||
|
|
||||||
internal val pluginOptions = CompilerPluginOptions()
|
internal val pluginOptions = CompilerPluginOptions()
|
||||||
internal var artifactDifferenceRegistryProvider: ArtifactDifferenceRegistryProvider? = null
|
internal var artifactDifferenceRegistryProvider: ArtifactDifferenceRegistryProvider? = null
|
||||||
internal var artifactFile: File? = null
|
internal var artifactFile: File? = null
|
||||||
@@ -302,7 +309,13 @@ open class KotlinCompile : AbstractKotlinCompile<K2JVMCompilerArguments>(), Kotl
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val exitCode = compilerRunner.runJvmCompiler(sourceRoots.kotlinSourceFiles, sourceRoots.javaSourceRoots, args, environment)
|
val exitCode = compilerRunner.runJvmCompiler(
|
||||||
|
sourceRoots.kotlinSourceFiles,
|
||||||
|
sourceRoots.javaSourceRoots,
|
||||||
|
javaPackagePrefix,
|
||||||
|
args,
|
||||||
|
environment)
|
||||||
|
|
||||||
processCompilerExitCode(exitCode)
|
processCompilerExitCode(exitCode)
|
||||||
artifactDifferenceRegistryProvider?.withRegistry(reporter) {
|
artifactDifferenceRegistryProvider?.withRegistry(reporter) {
|
||||||
it.flush(true)
|
it.flush(true)
|
||||||
|
|||||||
Reference in New Issue
Block a user