Skip to content

Commit

Permalink
Add jdkHome parameter to CLI
Browse files Browse the repository at this point in the history
  • Loading branch information
3flex committed Sep 8, 2022
1 parent 97fd12b commit 7d46d2e
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,13 @@ class CliArgs {
)
var jvmTarget: String = JvmTarget.DEFAULT.description

@Parameter(
names = ["--jdk-home"],
description = "EXPERIMENTAL: Use a custom JDK home directory to include into the classpath",
converter = PathConverter::class
)
var jdkHome: Path? = null

@Parameter(
names = ["--version"],
description = "Prints the detekt CLI version."
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ internal fun CliArgs.createSpec(output: Appendable, error: Appendable): Processi
jvmTarget = args.jvmTarget
languageVersion = args.languageVersion?.versionString
classpath = args.classpath?.trim()
jdkHome = args.jdkHome
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ internal class EnvironmentFacade(
projectSpec.inputPaths.toList(),
classpath,
compilerSpec.parseLanguageVersion(),
compilerSpec.parseJvmTarget()
compilerSpec.parseJvmTarget(),
compilerSpec.jdkHome,
)
createKotlinCoreEnvironment(compilerConfiguration, disposable)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ fun createCompilerConfiguration(
pathsToAnalyze: List<Path>,
classpath: List<String>,
languageVersion: LanguageVersion?,
jvmTarget: JvmTarget
jvmTarget: JvmTarget,
jdkHome: Path?,
): CompilerConfiguration {
val javaFiles = pathsToAnalyze.flatMap { path ->
path.toFile().walk()
Expand Down Expand Up @@ -99,6 +100,8 @@ fun createCompilerConfiguration(
addJavaSourceRoots(javaFiles)
addKotlinSourceRoots(kotlinFiles)
addJvmClasspathRoots(classpathFiles)

jdkHome?.let { put(JVMConfigurationKeys.JDK_HOME, it.toFile()) }
configureJdkClasspathRoots()
}
}
Expand Down
3 changes: 3 additions & 0 deletions detekt-tooling/api/detekt-tooling.api
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ public abstract interface class io/github/detekt/tooling/api/spec/BaselineSpec {

public abstract interface class io/github/detekt/tooling/api/spec/CompilerSpec {
public abstract fun getClasspath ()Ljava/lang/String;
public abstract fun getJdkHome ()Ljava/nio/file/Path;
public abstract fun getJvmTarget ()Ljava/lang/String;
public abstract fun getLanguageVersion ()Ljava/lang/String;
}
Expand Down Expand Up @@ -243,9 +244,11 @@ public final class io/github/detekt/tooling/dsl/CompilerSpecBuilder : io/github/
public fun build ()Lio/github/detekt/tooling/api/spec/CompilerSpec;
public synthetic fun build ()Ljava/lang/Object;
public final fun getClasspath ()Ljava/lang/String;
public final fun getJdkHome ()Ljava/nio/file/Path;
public final fun getJvmTarget ()Ljava/lang/String;
public final fun getLanguageVersion ()Ljava/lang/String;
public final fun setClasspath (Ljava/lang/String;)V
public final fun setJdkHome (Ljava/nio/file/Path;)V
public final fun setJvmTarget (Ljava/lang/String;)V
public final fun setLanguageVersion (Ljava/lang/String;)V
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.github.detekt.tooling.api.spec

import java.nio.file.Path

/**
* All these properties are based down to the Kotlin compiler for type- and symbol resolution.
*/
Expand All @@ -19,4 +21,10 @@ interface CompilerSpec {
* Paths to class files and jars separated by a path separator.
*/
val classpath: String?

/**
* Path to custom JDK home. Includes the custom JDK from the specified location into the classpath instead of using
* the JRE from the runtime environment.
*/
val jdkHome: Path?
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
package io.github.detekt.tooling.dsl

import io.github.detekt.tooling.api.spec.CompilerSpec
import java.nio.file.Path

@ProcessingModelDsl
class CompilerSpecBuilder : Builder<CompilerSpec> {

var jvmTarget: String = "1.8"
var languageVersion: String? = null
var classpath: String? = null
var jdkHome: Path? = null

override fun build(): CompilerSpec = CompilerModel(jvmTarget, languageVersion, classpath)
override fun build(): CompilerSpec = CompilerModel(jvmTarget, languageVersion, classpath, jdkHome)
}

private data class CompilerModel(
override val jvmTarget: String,
override val languageVersion: String?,
override val classpath: String?
override val classpath: String?,
override val jdkHome: Path?,
) : CompilerSpec

0 comments on commit 7d46d2e

Please sign in to comment.