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.MessageCollector
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
import com.intellij.openapi.util.io.FileUtil
import org.gradle.api.invocation.Gradle
import org.jetbrains.kotlin.config.Services
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.tasks.InspectClassesForMultiModuleIC
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.utils.newTmpFile
import org.jetbrains.kotlin.incremental.*
import java.io.ByteArrayOutputStream
import java.io.File
@@ -404,7 +404,7 @@ internal class GradleCompilerRunner(private val project: Project) : KotlinCompil
val log = project.logger
if (clientIsAliveFlagFile == null || !clientIsAliveFlagFile!!.exists()) {
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 }
}
else {
@@ -429,7 +429,7 @@ internal class GradleCompilerRunner(private val project: Project) : KotlinCompil
val log = project.logger
if (sessionFlagFile == null || !sessionFlagFile!!.exists()) {
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) }
}
else {
@@ -16,7 +16,6 @@
package org.jetbrains.kotlin.gradle.internal
import com.intellij.openapi.util.io.FileUtil
import org.gradle.api.artifacts.Configuration
import org.gradle.api.file.FileCollection
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.SourceRoots
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.destinationAsFile
import org.jetbrains.kotlin.gradle.utils.pathsAsStringRelativeTo
@@ -62,13 +62,10 @@ open class KaptGenerateStubsTask : KotlinCompile() {
super.setSource(sourceRootsContainer.set(sources))
}
private fun isSourceRootAllowed(source: File): Boolean {
fun File.isInside(parent: File) = FileUtil.isAncestor(parent, this, /* strict = */ false)
return !source.isInside(destinationDir) &&
!source.isInside(stubsDir) &&
!source.isInside(generatedSourcesDir)
}
private fun isSourceRootAllowed(source: File): Boolean =
!destinationDir.isParentOf(source) &&
!stubsDir.isParentOf(source) &&
!generatedSourcesDir.isParentOf(source)
override fun setupCompilerArgs(args: K2JVMCompilerArguments, defaultsOnly: Boolean) {
kotlinCompileTask.setupCompilerArgs(args)
@@ -1,7 +1,5 @@
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.artifacts.Configuration
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.GradleCompilerRunner
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.tasks.*
import org.jetbrains.kotlin.gradle.utils.isJavaFile
import org.jetbrains.kotlin.gradle.utils.isParentOf
import org.jetbrains.kotlin.gradle.utils.toSortedPathsArray
import java.io.File
@@ -101,8 +101,7 @@ open class KaptTask : ConventionTask(), CompilerArgumentAwareWithInput<K2JVMComp
.filterTo(HashSet(), ::isRootAllowed)
private fun isRootAllowed(file: File): Boolean =
!FileUtil.isAncestor(destinationDir, file, /* strict = */ false) &&
!FileUtil.isAncestor(classesDir, file, /* strict = */ false)
!destinationDir.isParentOf(file) && !classesDir.isParentOf(file)
@TaskAction
fun compile() {
@@ -20,9 +20,6 @@ import org.gradle.BuildAdapter
import org.gradle.BuildResult
import org.gradle.api.invocation.Gradle
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.GradleCompilerRunner
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
@@ -149,13 +146,10 @@ internal class CompilerServicesCleanup() {
if (isWindows) {
cleanJarCache()
}
(KotlinCoreEnvironment.applicationEnvironment?.jarFileSystem as? CoreJarFileSystem)?.clearHandlersCache()
}
private fun cleanJarCache() {
log.kotlinDebug("Clean JAR cache")
ZipHandler.clearFileAccessorCache()
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.BasePlugin
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 org.gradle.api.*
import org.gradle.api.artifacts.Configuration
@@ -218,10 +215,8 @@ internal class Kotlin2JvmSourceSetProcessor(
internal fun SourceSetOutput.tryAddClassesDir(
classesDirProvider: () -> FileCollection
): Boolean {
val getClassesDirs = ReflectionUtil.findMethod(
javaClass.methods.asList(),
"getClassesDirs"
) ?: return false
val getClassesDirs = javaClass.methods.firstOrNull { it.name == "getClassesDirs" && it.parameterCount == 0 }
?: return false
val classesDirs = getClassesDirs(this) as? ConfigurableFileCollection
?: return false
@@ -262,7 +257,7 @@ internal class Kotlin2JsSourceSetProcessor(
kotlinTask.kotlinOptions.outputFile = kotlinTask.outputFile.absolutePath
val outputDir = kotlinTask.outputFile.parentFile
if (FileUtil.isAncestor(outputDir, project.rootDir, false))
if (outputDir.isParentOf(project.rootDir))
throw InvalidUserDataException(
"The output directory '$outputDir' (defined by outputFile of $kotlinTask) contains or " +
"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.SourceDirectorySet
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.utils.isJavaFile
import org.jetbrains.kotlin.gradle.utils.isKotlinFile
import org.jetbrains.kotlin.gradle.utils.isParentOf
import java.io.File
import java.util.*
@@ -35,7 +35,7 @@ internal sealed class SourceRoots(val kotlinSourceFiles: List<File>) {
for (sourceDir in sourceDirs) {
for (sourceRoot in allSourceRoots) {
if (FileUtil.isAncestor(sourceRoot, sourceDir, /* strict = */false)) {
if (sourceRoot.isParentOf(sourceDir)) {
resultRoots.add(sourceRoot)
}
}
@@ -20,8 +20,8 @@ import org.gradle.api.DefaultTask
import org.gradle.api.tasks.*
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
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.utils.isParentOf
import java.io.File
import java.io.ObjectInputStream
import java.io.ObjectOutputStream
@@ -175,7 +175,7 @@ internal open class SyncOutputTask : DefaultTask() {
}
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)
}
}
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.gradle.tasks
import com.intellij.openapi.util.io.FileUtil
import org.gradle.api.Project
import org.gradle.api.Task
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.utils.ParsedGradleVersion
import org.jetbrains.kotlin.gradle.utils.toSortedPathsArray
import org.jetbrains.kotlin.gradle.utils.isParentOf
import org.jetbrains.kotlin.incremental.*
import org.jetbrains.kotlin.utils.LibraryUtils
import java.io.File
@@ -416,7 +416,7 @@ open class KotlinCompile : AbstractKotlinCompile<K2JVMCompilerArguments>(), Kotl
it is AbstractCompile &&
it !is JavaCompile &&
it !is AbstractKotlinCompile<*> &&
FileUtil.isAncestor(javaOutputDir!!, it.destinationDir, /* strict = */ false)
javaOutputDir!!.isParentOf(it.destinationDir)
} as? AbstractCompile
if (illegalTask != null) {
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.Project
import java.io.File
import java.nio.file.Paths
import java.util.*
internal fun File.isJavaFile() =
@@ -31,4 +32,20 @@ internal fun File.relativeToRoot(project: Project): String =
relativeOrCanonical(project.rootProject.rootDir)
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)
}
}