Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove ability to create AnalysisResult by passing source code and filename #7255

Merged
merged 3 commits into from
May 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import io.gitlab.arturbosch.detekt.core.ProcessingSettings
import io.gitlab.arturbosch.detekt.core.config.check
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.BindingContext
import kotlin.io.path.Path

class AnalysisFacade(
private val spec: ProcessingSpec
Expand All @@ -24,11 +23,6 @@ class AnalysisFacade(
DefaultLifecycle(spec.getDefaultConfiguration(), it, inputPathsToKtFiles)
}

override fun run(sourceCode: String, filename: String): AnalysisResult =
runAnalysis {
DefaultLifecycle(spec.getDefaultConfiguration(), it, contentToKtFile(sourceCode, Path(filename)))
}

override fun run(files: Collection<KtFile>, bindingContext: BindingContext): AnalysisResult =
runAnalysis {
DefaultLifecycle(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,9 @@ package io.gitlab.arturbosch.detekt.core.tooling
import io.github.detekt.parser.KtCompiler
import io.gitlab.arturbosch.detekt.core.ProcessingSettings
import org.jetbrains.kotlin.psi.KtFile
import java.nio.file.Path
import kotlin.io.path.isRegularFile

typealias ParsingStrategy = (settings: ProcessingSettings) -> List<KtFile>

fun contentToKtFile(content: String, path: Path): ParsingStrategy = { settings ->
require(path.isRegularFile()) { "Given sub path ($path) should be a regular file!" }
listOf(
KtCompiler(settings.environment).createKtFile(content, path)
)
}

val inputPathsToKtFiles: ParsingStrategy = { settings ->
val compiler = KtCompiler(settings.environment)
settings.spec.projectSpec.inputPaths.map { path ->
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,15 @@
package io.github.detekt.parser

import org.intellij.lang.annotations.Language
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.com.intellij.openapi.util.text.StringUtilRt
import org.jetbrains.kotlin.com.intellij.psi.util.PsiUtilCore
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtPsiFactory
import java.nio.file.Path
import kotlin.io.path.isRegularFile
import kotlin.io.path.name

open class KtCompiler(
protected val environment: KotlinCoreEnvironment = createKotlinCoreEnvironment(printStream = System.err)
) {

protected val psiFileFactory = KtPsiFactory(environment.project, markGenerated = false)

fun compile(path: Path): KtFile {
require(path.isRegularFile()) { "Given path '$path' should be a regular file!" }

Expand All @@ -24,7 +18,4 @@ open class KtCompiler(
"$path is not a Kotlin file"
}
}

fun createKtFile(@Language("kotlin") content: String, path: Path): KtFile =
psiFileFactory.createPhysicalFile(path.name, StringUtilRt.convertLineSeparators(content))
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package io.github.detekt.test.utils

import io.github.detekt.parser.KtCompiler
import kotlinx.coroutines.CoroutineScope
import org.intellij.lang.annotations.Language
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
Expand All @@ -10,18 +11,24 @@ import org.jetbrains.kotlin.cli.jvm.config.addJavaSourceRoots
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoot
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
import org.jetbrains.kotlin.cli.jvm.config.configureJdkClasspathRoots
import org.jetbrains.kotlin.com.intellij.openapi.project.Project
import org.jetbrains.kotlin.com.intellij.openapi.util.Disposer
import org.jetbrains.kotlin.com.intellij.openapi.util.text.StringUtilRt
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtPsiFactory
import java.io.File
import java.nio.file.Path
import kotlin.io.path.name

/**
* Test compiler extends kt compiler and adds ability to compile from text content.
*/
internal object KtTestCompiler : KtCompiler() {

private val psiFileFactory = KtPsiFactory(environment.project, markGenerated = false)

/**
* Not sure why but this function only works from this context.
* Somehow the Kotlin language was not yet initialized.
Expand Down Expand Up @@ -55,7 +62,8 @@ internal object KtTestCompiler : KtCompiler() {
return KotlinCoreEnvironmentWrapper(kotlinCoreEnvironment, parentDisposable)
}

fun project(): Project = environment.project
fun createKtFile(@Language("kotlin") content: String, path: Path): KtFile =
psiFileFactory.createPhysicalFile(path.name, StringUtilRt.convertLineSeparators(content))

private fun kotlinStdLibPath(): File {
return File(CharRange::class.java.protectionDomain.codeSource.location.path)
Expand Down
1 change: 0 additions & 1 deletion detekt-tooling/api/detekt-tooling.api
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ public final class io/github/detekt/tooling/api/DefaultConfigurationProvider$Com

public abstract interface class io/github/detekt/tooling/api/Detekt {
public abstract fun run ()Lio/github/detekt/tooling/api/AnalysisResult;
public abstract fun run (Ljava/lang/String;Ljava/lang/String;)Lio/github/detekt/tooling/api/AnalysisResult;
public abstract fun run (Ljava/util/Collection;Lorg/jetbrains/kotlin/resolve/BindingContext;)Lio/github/detekt/tooling/api/AnalysisResult;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@ interface Detekt {
// Used by detekt-cli
fun run(): AnalysisResult

// Used by detekt-intellij-plugin
fun run(sourceCode: String, filename: String): AnalysisResult

// Used by detekt-compiler-plugin
fun run(files: Collection<KtFile>, bindingContext: BindingContext): AnalysisResult
}