Remove com.intellij usages from Gradle plugin

This commit is contained in:
Alexey Tsvetkov
2018-05-17 17:04:04 +03:00
parent c9e49ed198
commit 3dc314d509
9 changed files with 38 additions and 36 deletions
@@ -27,7 +27,6 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
import com.intellij.openapi.util.io.FileUtil
import org.gradle.api.invocation.Gradle import org.gradle.api.invocation.Gradle
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
@@ -40,6 +39,7 @@ import org.jetbrains.kotlin.gradle.utils.relativeToRoot
import org.jetbrains.kotlin.gradle.plugin.kotlinDebug import org.jetbrains.kotlin.gradle.plugin.kotlinDebug
import org.jetbrains.kotlin.gradle.tasks.InspectClassesForMultiModuleIC import org.jetbrains.kotlin.gradle.tasks.InspectClassesForMultiModuleIC
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.utils.newTmpFile
import org.jetbrains.kotlin.incremental.* import org.jetbrains.kotlin.incremental.*
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
import java.io.File import java.io.File
@@ -404,7 +404,7 @@ internal class GradleCompilerRunner(private val project: Project) : KotlinCompil
val log = project.logger val log = project.logger
if (clientIsAliveFlagFile == null || !clientIsAliveFlagFile!!.exists()) { if (clientIsAliveFlagFile == null || !clientIsAliveFlagFile!!.exists()) {
val projectName = project.rootProject.name.normalizeForFlagFile() val projectName = project.rootProject.name.normalizeForFlagFile()
clientIsAliveFlagFile = FileUtil.createTempFile("kotlin-compiler-in-$projectName-", ".alive", /*deleteOnExit =*/ true) clientIsAliveFlagFile = newTmpFile(prefix = "kotlin-compiler-in-$projectName-", suffix = ".alive")
log.kotlinDebug { CREATED_CLIENT_FILE_PREFIX + clientIsAliveFlagFile!!.canonicalPath } log.kotlinDebug { CREATED_CLIENT_FILE_PREFIX + clientIsAliveFlagFile!!.canonicalPath }
} }
else { else {
@@ -429,7 +429,7 @@ internal class GradleCompilerRunner(private val project: Project) : KotlinCompil
val log = project.logger val log = project.logger
if (sessionFlagFile == null || !sessionFlagFile!!.exists()) { if (sessionFlagFile == null || !sessionFlagFile!!.exists()) {
val sessionFilesDir = sessionsDir(project).apply { mkdirs() } val sessionFilesDir = sessionsDir(project).apply { mkdirs() }
sessionFlagFile = FileUtil.createTempFile(sessionFilesDir, "kotlin-compiler-", ".salive", /*deleteOnExit =*/ true) sessionFlagFile = newTmpFile(prefix = "kotlin-compiler-", suffix = ".salive", directory = sessionFilesDir)
log.kotlinDebug { CREATED_SESSION_FILE_PREFIX + sessionFlagFile!!.relativeToRoot(project) } log.kotlinDebug { CREATED_SESSION_FILE_PREFIX + sessionFlagFile!!.relativeToRoot(project) }
} }
else { else {
@@ -16,7 +16,6 @@
package org.jetbrains.kotlin.gradle.internal package org.jetbrains.kotlin.gradle.internal
import com.intellij.openapi.util.io.FileUtil
import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Configuration
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.api.tasks.* import org.gradle.api.tasks.*
@@ -27,6 +26,7 @@ import org.jetbrains.kotlin.gradle.tasks.FilteringSourceRootsContainer
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.tasks.SourceRoots import org.jetbrains.kotlin.gradle.tasks.SourceRoots
import org.jetbrains.kotlin.gradle.incremental.ChangedFiles import org.jetbrains.kotlin.gradle.incremental.ChangedFiles
import org.jetbrains.kotlin.gradle.utils.isParentOf
import org.jetbrains.kotlin.incremental.classpathAsList import org.jetbrains.kotlin.incremental.classpathAsList
import org.jetbrains.kotlin.incremental.destinationAsFile import org.jetbrains.kotlin.incremental.destinationAsFile
import org.jetbrains.kotlin.gradle.utils.pathsAsStringRelativeTo import org.jetbrains.kotlin.gradle.utils.pathsAsStringRelativeTo
@@ -62,13 +62,10 @@ open class KaptGenerateStubsTask : KotlinCompile() {
super.setSource(sourceRootsContainer.set(sources)) super.setSource(sourceRootsContainer.set(sources))
} }
private fun isSourceRootAllowed(source: File): Boolean { private fun isSourceRootAllowed(source: File): Boolean =
fun File.isInside(parent: File) = FileUtil.isAncestor(parent, this, /* strict = */ false) !destinationDir.isParentOf(source) &&
!stubsDir.isParentOf(source) &&
return !source.isInside(destinationDir) && !generatedSourcesDir.isParentOf(source)
!source.isInside(stubsDir) &&
!source.isInside(generatedSourcesDir)
}
override fun setupCompilerArgs(args: K2JVMCompilerArguments, defaultsOnly: Boolean) { override fun setupCompilerArgs(args: K2JVMCompilerArguments, defaultsOnly: Boolean) {
kotlinCompileTask.setupCompilerArgs(args) kotlinCompileTask.setupCompilerArgs(args)
@@ -1,7 +1,5 @@
package org.jetbrains.kotlin.gradle.internal package org.jetbrains.kotlin.gradle.internal
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.util.text.StringUtil.compareVersionNumbers
import org.gradle.api.GradleException import org.gradle.api.GradleException
import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Configuration
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
@@ -11,9 +9,11 @@ import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.compilerRunner.GradleCompilerEnvironment import org.jetbrains.kotlin.compilerRunner.GradleCompilerEnvironment
import org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner import org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner
import org.jetbrains.kotlin.compilerRunner.OutputItemsCollectorImpl import org.jetbrains.kotlin.compilerRunner.OutputItemsCollectorImpl
import org.jetbrains.kotlin.gradle.plugin.compareVersionNumbers
import org.jetbrains.kotlin.gradle.plugin.PLUGIN_CLASSPATH_CONFIGURATION_NAME import org.jetbrains.kotlin.gradle.plugin.PLUGIN_CLASSPATH_CONFIGURATION_NAME
import org.jetbrains.kotlin.gradle.tasks.* import org.jetbrains.kotlin.gradle.tasks.*
import org.jetbrains.kotlin.gradle.utils.isJavaFile import org.jetbrains.kotlin.gradle.utils.isJavaFile
import org.jetbrains.kotlin.gradle.utils.isParentOf
import org.jetbrains.kotlin.gradle.utils.toSortedPathsArray import org.jetbrains.kotlin.gradle.utils.toSortedPathsArray
import java.io.File import java.io.File
@@ -101,8 +101,7 @@ open class KaptTask : ConventionTask(), CompilerArgumentAwareWithInput<K2JVMComp
.filterTo(HashSet(), ::isRootAllowed) .filterTo(HashSet(), ::isRootAllowed)
private fun isRootAllowed(file: File): Boolean = private fun isRootAllowed(file: File): Boolean =
!FileUtil.isAncestor(destinationDir, file, /* strict = */ false) && !destinationDir.isParentOf(file) && !classesDir.isParentOf(file)
!FileUtil.isAncestor(classesDir, file, /* strict = */ false)
@TaskAction @TaskAction
fun compile() { fun compile() {
@@ -20,9 +20,6 @@ import org.gradle.BuildAdapter
import org.gradle.BuildResult import org.gradle.BuildResult
import org.gradle.api.invocation.Gradle import org.gradle.api.invocation.Gradle
import org.gradle.api.logging.Logging import org.gradle.api.logging.Logging
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import com.intellij.openapi.vfs.impl.ZipHandler
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
import org.jetbrains.kotlin.compilerRunner.DELETED_SESSION_FILE_PREFIX import org.jetbrains.kotlin.compilerRunner.DELETED_SESSION_FILE_PREFIX
import org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner import org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
@@ -149,13 +146,10 @@ internal class CompilerServicesCleanup() {
if (isWindows) { if (isWindows) {
cleanJarCache() cleanJarCache()
} }
(KotlinCoreEnvironment.applicationEnvironment?.jarFileSystem as? CoreJarFileSystem)?.clearHandlersCache()
} }
private fun cleanJarCache() { private fun cleanJarCache() {
log.kotlinDebug("Clean JAR cache") log.kotlinDebug("Clean JAR cache")
ZipHandler.clearFileAccessorCache()
log.kotlinDebug("JAR cache cleared") log.kotlinDebug("JAR cache cleared")
} }
} }
@@ -3,9 +3,6 @@ package org.jetbrains.kotlin.gradle.plugin
import com.android.build.gradle.BaseExtension import com.android.build.gradle.BaseExtension
import com.android.build.gradle.BasePlugin import com.android.build.gradle.BasePlugin
import com.android.builder.model.SourceProvider import com.android.builder.model.SourceProvider
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.util.text.StringUtil.compareVersionNumbers
import com.intellij.util.ReflectionUtil
import groovy.lang.Closure import groovy.lang.Closure
import org.gradle.api.* import org.gradle.api.*
import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Configuration
@@ -218,10 +215,8 @@ internal class Kotlin2JvmSourceSetProcessor(
internal fun SourceSetOutput.tryAddClassesDir( internal fun SourceSetOutput.tryAddClassesDir(
classesDirProvider: () -> FileCollection classesDirProvider: () -> FileCollection
): Boolean { ): Boolean {
val getClassesDirs = ReflectionUtil.findMethod( val getClassesDirs = javaClass.methods.firstOrNull { it.name == "getClassesDirs" && it.parameterCount == 0 }
javaClass.methods.asList(), ?: return false
"getClassesDirs"
) ?: return false
val classesDirs = getClassesDirs(this) as? ConfigurableFileCollection val classesDirs = getClassesDirs(this) as? ConfigurableFileCollection
?: return false ?: return false
@@ -262,7 +257,7 @@ internal class Kotlin2JsSourceSetProcessor(
kotlinTask.kotlinOptions.outputFile = kotlinTask.outputFile.absolutePath kotlinTask.kotlinOptions.outputFile = kotlinTask.outputFile.absolutePath
val outputDir = kotlinTask.outputFile.parentFile val outputDir = kotlinTask.outputFile.parentFile
if (FileUtil.isAncestor(outputDir, project.rootDir, false)) if (outputDir.isParentOf(project.rootDir))
throw InvalidUserDataException( throw InvalidUserDataException(
"The output directory '$outputDir' (defined by outputFile of $kotlinTask) contains or " + "The output directory '$outputDir' (defined by outputFile of $kotlinTask) contains or " +
"matches the project root directory '${project.rootDir}'.\n" + "matches the project root directory '${project.rootDir}'.\n" +
@@ -3,10 +3,10 @@ package org.jetbrains.kotlin.gradle.tasks
import org.gradle.api.file.FileTree import org.gradle.api.file.FileTree
import org.gradle.api.file.SourceDirectorySet import org.gradle.api.file.SourceDirectorySet
import org.gradle.api.logging.Logger import org.gradle.api.logging.Logger
import com.intellij.openapi.util.io.FileUtil
import org.jetbrains.kotlin.gradle.plugin.kotlinDebug import org.jetbrains.kotlin.gradle.plugin.kotlinDebug
import org.jetbrains.kotlin.gradle.utils.isJavaFile import org.jetbrains.kotlin.gradle.utils.isJavaFile
import org.jetbrains.kotlin.gradle.utils.isKotlinFile import org.jetbrains.kotlin.gradle.utils.isKotlinFile
import org.jetbrains.kotlin.gradle.utils.isParentOf
import java.io.File import java.io.File
import java.util.* import java.util.*
@@ -35,7 +35,7 @@ internal sealed class SourceRoots(val kotlinSourceFiles: List<File>) {
for (sourceDir in sourceDirs) { for (sourceDir in sourceDirs) {
for (sourceRoot in allSourceRoots) { for (sourceRoot in allSourceRoots) {
if (FileUtil.isAncestor(sourceRoot, sourceDir, /* strict = */false)) { if (sourceRoot.isParentOf(sourceDir)) {
resultRoots.add(sourceRoot) resultRoots.add(sourceRoot)
} }
} }
@@ -20,8 +20,8 @@ import org.gradle.api.DefaultTask
import org.gradle.api.tasks.* import org.gradle.api.tasks.*
import org.gradle.api.tasks.incremental.IncrementalTaskInputs import org.gradle.api.tasks.incremental.IncrementalTaskInputs
import org.gradle.api.tasks.incremental.InputFileDetails import org.gradle.api.tasks.incremental.InputFileDetails
import com.intellij.openapi.util.io.FileUtil.isAncestor
import org.jetbrains.kotlin.gradle.plugin.kotlinDebug import org.jetbrains.kotlin.gradle.plugin.kotlinDebug
import org.jetbrains.kotlin.gradle.utils.isParentOf
import java.io.File import java.io.File
import java.io.ObjectInputStream import java.io.ObjectInputStream
import java.io.ObjectOutputStream import java.io.ObjectOutputStream
@@ -175,7 +175,7 @@ internal open class SyncOutputTask : DefaultTask() {
} }
private fun File.siblingInJavaDir(baseDir: File? = null): File { private fun File.siblingInJavaDir(baseDir: File? = null): File {
val base = baseDir ?: classesDirs.find { isAncestor(it, this, true) }!! val base = baseDir ?: classesDirs.find { it.isParentOf(this, strict = true) }!!
return File(javaOutputDir, this.relativeTo(base).path) return File(javaOutputDir, this.relativeTo(base).path)
} }
} }
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.gradle.tasks package org.jetbrains.kotlin.gradle.tasks
import com.intellij.openapi.util.io.FileUtil
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.Task import org.gradle.api.Task
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
@@ -35,6 +34,7 @@ import org.jetbrains.kotlin.gradle.internal.prepareCompilerArguments
import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.utils.ParsedGradleVersion import org.jetbrains.kotlin.gradle.utils.ParsedGradleVersion
import org.jetbrains.kotlin.gradle.utils.toSortedPathsArray import org.jetbrains.kotlin.gradle.utils.toSortedPathsArray
import org.jetbrains.kotlin.gradle.utils.isParentOf
import org.jetbrains.kotlin.incremental.* import org.jetbrains.kotlin.incremental.*
import org.jetbrains.kotlin.utils.LibraryUtils import org.jetbrains.kotlin.utils.LibraryUtils
import java.io.File import java.io.File
@@ -416,7 +416,7 @@ open class KotlinCompile : AbstractKotlinCompile<K2JVMCompilerArguments>(), Kotl
it is AbstractCompile && it is AbstractCompile &&
it !is JavaCompile && it !is JavaCompile &&
it !is AbstractKotlinCompile<*> && it !is AbstractKotlinCompile<*> &&
FileUtil.isAncestor(javaOutputDir!!, it.destinationDir, /* strict = */ false) javaOutputDir!!.isParentOf(it.destinationDir)
} as? AbstractCompile } as? AbstractCompile
if (illegalTask != null) { if (illegalTask != null) {
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.Project import org.gradle.api.Project
import java.io.File import java.io.File
import java.nio.file.Paths
import java.util.* import java.util.*
internal fun File.isJavaFile() = internal fun File.isJavaFile() =
@@ -31,4 +32,20 @@ internal fun File.relativeToRoot(project: Project): String =
relativeOrCanonical(project.rootProject.rootDir) relativeOrCanonical(project.rootProject.rootDir)
internal fun Iterable<File>.toSortedPathsArray(): Array<String> = internal fun Iterable<File>.toSortedPathsArray(): Array<String> =
map { it.canonicalPath }.toTypedArray().also { Arrays.sort(it) } map { it.canonicalPath }.toTypedArray().also { Arrays.sort(it) }
internal fun newTmpFile(prefix: String, suffix: String? = null, directory: File? = null, deleteOnExit: Boolean = true) =
File.createTempFile(prefix, suffix, directory).apply {
if (deleteOnExit) deleteOnExit()
}
internal fun File.isParentOf(childCandidate: File, strict: Boolean = false): Boolean {
val parentPath = Paths.get(this.absolutePath).normalize()
val childCandidatePath = Paths.get(childCandidate.absolutePath).normalize()
return if (strict) {
childCandidatePath.startsWith(parentPath) && parentPath != childCandidate
} else {
childCandidatePath.startsWith(parentPath)
}
}