Skip to content

Commit

Permalink
Kotlin 1.7.10 (detekt#4821)
Browse files Browse the repository at this point in the history
* Kotlin 1.7.10

* Update ErrorType import

JetBrains/kotlin@b5933c7

* Provide value for new AnalyzerWithCompilerReport flag

JetBrains/kotlin@dd95390

* Manually add JDK classpath roots to compiler config

From Kotlin 1.7 these are no longer added to the compiler config by
default.

JetBrains/kotlin@f89765e

* Update tests to align with new behaviour of Errors.UNNECESSARY_SAFE_CALL

https://kotlinlang.org/docs/compatibility-guide-17.html#make-safe-call-result-always-nullable

* Ensure pluginCompileOnly participates in variant-aware selection

Two variants of KGP are published as of KGP 1.7. Without specifying an
attribute to match on the consuming configuration Gradle will refuse to
match either one. Adding an attribute to match on will make Gradle select
a variant when resolving dependencies for the manually created
pluginCompileOnly configuration.

https://kotlinlang.org/docs/whatsnew17.html#support-for-gradle-plugin-variants

* Don't compile test snippets that fail compilation with Kotlin 1.7

https://kotlinlang.org/docs/compatibility-guide-17.html#make-when-statements-with-enum-sealed-and-boolean-subjects-exhaustive-by-default

Co-authored-by: Brais Gabín <braisgabin@gmail.com>
  • Loading branch information
2 people authored and VitalyVPinchuk committed Jul 25, 2022
1 parent 3d6b498 commit 66fdbdb
Show file tree
Hide file tree
Showing 12 changed files with 26 additions and 16 deletions.
Expand Up @@ -33,6 +33,7 @@ internal fun generateBindingContext(
val analyzer = AnalyzerWithCompilerReport(
messageCollector,
environment.configuration.languageVersionSettings,
false,
)
analyzer.analyzeAndReport(files) {
TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(
Expand Down
4 changes: 4 additions & 0 deletions detekt-gradle-plugin/build.gradle.kts
Expand Up @@ -59,6 +59,10 @@ val functionalTestImplementation: Configuration by configurations.getting

configurations.compileOnly { extendsFrom(pluginCompileOnly) }

pluginCompileOnly.attributes {
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category::class.java, "library"))
}

dependencies {
compileOnly(libs.kotlin.gradlePluginApi)
implementation(libs.sarif4k)
Expand Down
Expand Up @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.addJavaSourceRoots
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
import org.jetbrains.kotlin.cli.jvm.config.configureJdkClasspathRoots
import org.jetbrains.kotlin.com.intellij.mock.MockProject
import org.jetbrains.kotlin.com.intellij.openapi.Disposable
import org.jetbrains.kotlin.com.intellij.openapi.util.Disposer
Expand Down Expand Up @@ -98,6 +99,7 @@ fun createCompilerConfiguration(
addJavaSourceRoots(javaFiles)
addKotlinSourceRoots(kotlinFiles)
addJvmClasspathRoots(classpathFiles)
configureJdkClasspathRoots()
}
}

Expand Down
Expand Up @@ -86,7 +86,7 @@ class ElseCaseInsteadOfExhaustiveWhenSpec(private val env: KotlinCoreEnvironment
}
}
"""
assertThat(subject.compileAndLintWithContext(env, code)).isEmpty()
assertThat(subject.lintWithContext(env, code)).isEmpty()
}
}

Expand Down Expand Up @@ -148,7 +148,7 @@ class ElseCaseInsteadOfExhaustiveWhenSpec(private val env: KotlinCoreEnvironment
}
}
"""
assertThat(subject.compileAndLintWithContext(env, code)).isEmpty()
assertThat(subject.lintWithContext(env, code)).isEmpty()
}
}

Expand Down
Expand Up @@ -3,6 +3,7 @@ package io.gitlab.arturbosch.detekt.rules.bugs
import io.gitlab.arturbosch.detekt.rules.KotlinCoreEnvironmentTest
import io.gitlab.arturbosch.detekt.test.TestConfig
import io.gitlab.arturbosch.detekt.test.compileAndLintWithContext
import io.gitlab.arturbosch.detekt.test.lintWithContext
import org.assertj.core.api.Assertions.assertThat
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.junit.jupiter.api.Nested
Expand Down Expand Up @@ -33,7 +34,7 @@ class MissingWhenCaseSpec(private val env: KotlinCoreEnvironment) {
}
}
"""
val actual = subject.compileAndLintWithContext(env, code)
val actual = subject.lintWithContext(env, code)
assertThat(actual).hasSize(1)
assertThat(actual.first().issue.id).isEqualTo("MissingWhenCase")
assertThat(actual.first().message).isEqualTo(
Expand All @@ -57,7 +58,7 @@ class MissingWhenCaseSpec(private val env: KotlinCoreEnvironment) {
}
}
"""
val actual = subject.compileAndLintWithContext(env, code)
val actual = subject.lintWithContext(env, code)
assertThat(actual).hasSize(1)
assertThat(actual.first().issue.id).isEqualTo("MissingWhenCase")
assertThat(actual.first().message).isEqualTo(
Expand All @@ -82,7 +83,7 @@ class MissingWhenCaseSpec(private val env: KotlinCoreEnvironment) {
}
}
"""
val actual = subject.compileAndLintWithContext(env, code)
val actual = subject.lintWithContext(env, code)
assertThat(actual).hasSize(1)
assertThat(actual.first().issue.id).isEqualTo("MissingWhenCase")
assertThat(actual.first().message).isEqualTo(
Expand Down Expand Up @@ -157,7 +158,7 @@ class MissingWhenCaseSpec(private val env: KotlinCoreEnvironment) {
}
}
"""
val actual = subject.compileAndLintWithContext(env, code)
val actual = subject.lintWithContext(env, code)
assertThat(actual).hasSize(1)
assertThat(actual.first().issue.id).isEqualTo("MissingWhenCase")
assertThat(actual.first().message).isEqualTo(
Expand All @@ -182,7 +183,7 @@ class MissingWhenCaseSpec(private val env: KotlinCoreEnvironment) {
}
}
"""
val actual = subject.compileAndLintWithContext(env, code)
val actual = subject.lintWithContext(env, code)
assertThat(actual).hasSize(1)
assertThat(actual.first().issue.id).isEqualTo("MissingWhenCase")
assertThat(actual.first().message).isEqualTo(
Expand All @@ -206,7 +207,7 @@ class MissingWhenCaseSpec(private val env: KotlinCoreEnvironment) {
}
}
"""
val actual = subject.compileAndLintWithContext(env, code)
val actual = subject.lintWithContext(env, code)
assertThat(actual).hasSize(1)
assertThat(actual.first().issue.id).isEqualTo("MissingWhenCase")
assertThat(actual.first().message).isEqualTo(
Expand Down
Expand Up @@ -153,7 +153,6 @@ class NullableToStringCallSpec(private val env: KotlinCoreEnvironment) {
data class Bar(val a: Any)
fun test6(bar: Bar?) {
if (bar == null) return
val x = bar?.a.toString()
val y = "${'$'}{bar?.a}"
}
"""
Expand Down
Expand Up @@ -2,6 +2,7 @@ package io.gitlab.arturbosch.detekt.rules.bugs

import io.gitlab.arturbosch.detekt.rules.KotlinCoreEnvironmentTest
import io.gitlab.arturbosch.detekt.test.compileAndLintWithContext
import io.gitlab.arturbosch.detekt.test.lintWithContext
import org.assertj.core.api.Assertions.assertThat
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.junit.jupiter.api.Nested
Expand Down Expand Up @@ -113,7 +114,7 @@ class RedundantElseInWhenSpec(private val env: KotlinCoreEnvironment) {
}
}
"""
assertThat(subject.compileAndLintWithContext(env, code)).isEmpty()
assertThat(subject.lintWithContext(env, code)).isEmpty()
}
}

Expand Down Expand Up @@ -203,7 +204,7 @@ class RedundantElseInWhenSpec(private val env: KotlinCoreEnvironment) {
}
}
"""
assertThat(subject.compileAndLintWithContext(env, code)).isEmpty()
assertThat(subject.lintWithContext(env, code)).isEmpty()
}
}

Expand Down
Expand Up @@ -50,8 +50,8 @@ class UnnecessarySafeCallSpec(private val env: KotlinCoreEnvironment) {
}
"""
val findings = subject.compileAndLintWithContext(env, code)
assertThat(findings).hasSize(2)
assertThat(findings).hasTextLocations(48 to 59, 48 to 70)
assertThat(findings).hasSize(1)
assertThat(findings).hasTextLocations(48 to 59)
}
}

Expand Down
Expand Up @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelector
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.types.ErrorType
import org.jetbrains.kotlin.types.error.ErrorType
import org.jetbrains.kotlin.types.typeUtil.supertypes

/**
Expand Down
Expand Up @@ -18,7 +18,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall
import org.jetbrains.kotlin.resolve.calls.util.getType
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull
import org.jetbrains.kotlin.types.ErrorType
import org.jetbrains.kotlin.types.error.ErrorType
import org.jetbrains.kotlin.types.isNullable

/*
Expand Down
Expand Up @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
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
Expand Down Expand Up @@ -58,6 +59,7 @@ internal object KtTestCompiler : KtCompiler() {
addJvmClasspathRoot(kotlinxCoroutinesCorePath())
addJvmClasspathRoots(additionalRootPaths)
addJavaSourceRoots(additionalJavaSourceRootPaths)
configureJdkClasspathRoots()
}

val parentDisposable = Disposer.newDisposable()
Expand Down
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
@@ -1,7 +1,7 @@
[versions]
dokka = "1.7.10"
jacoco = "0.8.8"
kotlin = "1.6.21"
kotlin = "1.7.10"
ktlint = "0.46.1"
junit = "5.8.2"
contester = "0.2.0"
Expand Down

0 comments on commit 66fdbdb

Please sign in to comment.