[tests] Add additional test data for KT-64222
This commit is contained in:
committed by
Space Team
parent
b87aa470dd
commit
9fb920874c
+28
@@ -3862,6 +3862,34 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
|||||||
runTest("compiler/testData/diagnostics/tests/builderInference/overloadResolutionByLambdaReturnType.kt");
|
runTest("compiler/testData/diagnostics/tests/builderInference/overloadResolutionByLambdaReturnType.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@TestMetadata("compiler/testData/diagnostics/tests/builderInference/additional")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
public class Additional {
|
||||||
|
@Test
|
||||||
|
public void testAllFilesPresentInAdditional() throws Exception {
|
||||||
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/builderInference/additional"), Pattern.compile("^(.+)\\.(kt|kts)$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("BuildeeSupertypeAsTypeVariableSourceInClassifiers.kt")
|
||||||
|
public void testBuildeeSupertypeAsTypeVariableSourceInClassifiers() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/builderInference/additional/BuildeeSupertypeAsTypeVariableSourceInClassifiers.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("BuildeeSupertypeAsTypeVariableSourceInFunctions.kt")
|
||||||
|
public void testBuildeeSupertypeAsTypeVariableSourceInFunctions() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/builderInference/additional/BuildeeSupertypeAsTypeVariableSourceInFunctions.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("BuildeeSupertypeAsTypeVariableSourceInProperties.kt")
|
||||||
|
public void testBuildeeSupertypeAsTypeVariableSourceInProperties() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/builderInference/additional/BuildeeSupertypeAsTypeVariableSourceInProperties.kt");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@TestMetadata("compiler/testData/diagnostics/tests/builderInference/issues")
|
@TestMetadata("compiler/testData/diagnostics/tests/builderInference/issues")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
|||||||
+28
@@ -3862,6 +3862,34 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
|||||||
runTest("compiler/testData/diagnostics/tests/builderInference/overloadResolutionByLambdaReturnType.kt");
|
runTest("compiler/testData/diagnostics/tests/builderInference/overloadResolutionByLambdaReturnType.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@TestMetadata("compiler/testData/diagnostics/tests/builderInference/additional")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
public class Additional {
|
||||||
|
@Test
|
||||||
|
public void testAllFilesPresentInAdditional() throws Exception {
|
||||||
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/builderInference/additional"), Pattern.compile("^(.+)\\.(kt|kts)$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("BuildeeSupertypeAsTypeVariableSourceInClassifiers.kt")
|
||||||
|
public void testBuildeeSupertypeAsTypeVariableSourceInClassifiers() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/builderInference/additional/BuildeeSupertypeAsTypeVariableSourceInClassifiers.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("BuildeeSupertypeAsTypeVariableSourceInFunctions.kt")
|
||||||
|
public void testBuildeeSupertypeAsTypeVariableSourceInFunctions() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/builderInference/additional/BuildeeSupertypeAsTypeVariableSourceInFunctions.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("BuildeeSupertypeAsTypeVariableSourceInProperties.kt")
|
||||||
|
public void testBuildeeSupertypeAsTypeVariableSourceInProperties() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/builderInference/additional/BuildeeSupertypeAsTypeVariableSourceInProperties.kt");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@TestMetadata("compiler/testData/diagnostics/tests/builderInference/issues")
|
@TestMetadata("compiler/testData/diagnostics/tests/builderInference/issues")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
|||||||
+28
@@ -3856,6 +3856,34 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
|||||||
runTest("compiler/testData/diagnostics/tests/builderInference/overloadResolutionByLambdaReturnType.kt");
|
runTest("compiler/testData/diagnostics/tests/builderInference/overloadResolutionByLambdaReturnType.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@TestMetadata("compiler/testData/diagnostics/tests/builderInference/additional")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
public class Additional {
|
||||||
|
@Test
|
||||||
|
public void testAllFilesPresentInAdditional() throws Exception {
|
||||||
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/builderInference/additional"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true, "multiplatform");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("BuildeeSupertypeAsTypeVariableSourceInClassifiers.kt")
|
||||||
|
public void testBuildeeSupertypeAsTypeVariableSourceInClassifiers() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/builderInference/additional/BuildeeSupertypeAsTypeVariableSourceInClassifiers.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("BuildeeSupertypeAsTypeVariableSourceInFunctions.kt")
|
||||||
|
public void testBuildeeSupertypeAsTypeVariableSourceInFunctions() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/builderInference/additional/BuildeeSupertypeAsTypeVariableSourceInFunctions.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("BuildeeSupertypeAsTypeVariableSourceInProperties.kt")
|
||||||
|
public void testBuildeeSupertypeAsTypeVariableSourceInProperties() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/builderInference/additional/BuildeeSupertypeAsTypeVariableSourceInProperties.kt");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@TestMetadata("compiler/testData/diagnostics/tests/builderInference/issues")
|
@TestMetadata("compiler/testData/diagnostics/tests/builderInference/issues")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
|||||||
+28
@@ -3862,6 +3862,34 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
|||||||
runTest("compiler/testData/diagnostics/tests/builderInference/overloadResolutionByLambdaReturnType.kt");
|
runTest("compiler/testData/diagnostics/tests/builderInference/overloadResolutionByLambdaReturnType.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@TestMetadata("compiler/testData/diagnostics/tests/builderInference/additional")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
public class Additional {
|
||||||
|
@Test
|
||||||
|
public void testAllFilesPresentInAdditional() throws Exception {
|
||||||
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/builderInference/additional"), Pattern.compile("^(.*)\\.kts?$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true, "multiplatform");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("BuildeeSupertypeAsTypeVariableSourceInClassifiers.kt")
|
||||||
|
public void testBuildeeSupertypeAsTypeVariableSourceInClassifiers() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/builderInference/additional/BuildeeSupertypeAsTypeVariableSourceInClassifiers.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("BuildeeSupertypeAsTypeVariableSourceInFunctions.kt")
|
||||||
|
public void testBuildeeSupertypeAsTypeVariableSourceInFunctions() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/builderInference/additional/BuildeeSupertypeAsTypeVariableSourceInFunctions.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("BuildeeSupertypeAsTypeVariableSourceInProperties.kt")
|
||||||
|
public void testBuildeeSupertypeAsTypeVariableSourceInProperties() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/builderInference/additional/BuildeeSupertypeAsTypeVariableSourceInProperties.kt");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@TestMetadata("compiler/testData/diagnostics/tests/builderInference/issues")
|
@TestMetadata("compiler/testData/diagnostics/tests/builderInference/issues")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
|||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
fun test() {
|
||||||
|
// a primary constructor call
|
||||||
|
build {
|
||||||
|
KlassA(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
// a secondary constructor call
|
||||||
|
build {
|
||||||
|
KlassB(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
// delegation to a super-constructor from a primary constructor
|
||||||
|
build {
|
||||||
|
class KlassC constructor(): BaseKlassC(this@build)
|
||||||
|
}
|
||||||
|
|
||||||
|
// delegation to a super-constructor from a secondary constructor
|
||||||
|
build {
|
||||||
|
class KlassD: BaseKlassD {
|
||||||
|
constructor() : super(this@build)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// inheritance via delegation
|
||||||
|
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>build<!> {
|
||||||
|
class KlassE: BaseBuildee<TargetType> by this@build
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
interface BaseBuildee<BBTV>
|
||||||
|
class DerivedBuildee<DBTV>: BaseBuildee<DBTV>
|
||||||
|
|
||||||
|
fun <FTV> build(instructions: DerivedBuildee<FTV>.() -> Unit): DerivedBuildee<FTV> {
|
||||||
|
return DerivedBuildee<FTV>().apply(instructions)
|
||||||
|
}
|
||||||
|
|
||||||
|
class TargetType
|
||||||
|
|
||||||
|
class KlassA constructor(base: BaseBuildee<TargetType>)
|
||||||
|
|
||||||
|
class KlassB {
|
||||||
|
constructor(base: BaseBuildee<TargetType>)
|
||||||
|
}
|
||||||
|
|
||||||
|
open class BaseKlassC(base: BaseBuildee<TargetType>)
|
||||||
|
|
||||||
|
open class BaseKlassD(base: BaseBuildee<TargetType>)
|
||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
fun test() {
|
||||||
|
// a primary constructor call
|
||||||
|
build {
|
||||||
|
KlassA(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
// a secondary constructor call
|
||||||
|
build {
|
||||||
|
KlassB(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
// delegation to a super-constructor from a primary constructor
|
||||||
|
build {
|
||||||
|
class KlassC constructor(): BaseKlassC(this@build)
|
||||||
|
}
|
||||||
|
|
||||||
|
// delegation to a super-constructor from a secondary constructor
|
||||||
|
build {
|
||||||
|
class KlassD: BaseKlassD {
|
||||||
|
constructor() : super(this@build)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// inheritance via delegation
|
||||||
|
build {
|
||||||
|
class KlassE: BaseBuildee<TargetType> by this@build
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
interface BaseBuildee<BBTV>
|
||||||
|
class DerivedBuildee<DBTV>: BaseBuildee<DBTV>
|
||||||
|
|
||||||
|
fun <FTV> build(instructions: DerivedBuildee<FTV>.() -> Unit): DerivedBuildee<FTV> {
|
||||||
|
return DerivedBuildee<FTV>().apply(instructions)
|
||||||
|
}
|
||||||
|
|
||||||
|
class TargetType
|
||||||
|
|
||||||
|
class KlassA constructor(base: BaseBuildee<TargetType>)
|
||||||
|
|
||||||
|
class KlassB {
|
||||||
|
constructor(base: BaseBuildee<TargetType>)
|
||||||
|
}
|
||||||
|
|
||||||
|
open class BaseKlassC(base: BaseBuildee<TargetType>)
|
||||||
|
|
||||||
|
open class BaseKlassD(base: BaseBuildee<TargetType>)
|
||||||
+60
@@ -0,0 +1,60 @@
|
|||||||
|
fun test() {
|
||||||
|
// simple function call
|
||||||
|
build {
|
||||||
|
consumeA(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
// function call with a named argument
|
||||||
|
build {
|
||||||
|
consumeB(base = this)
|
||||||
|
}
|
||||||
|
|
||||||
|
// local function definition with a default parameter value
|
||||||
|
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>build<!> {
|
||||||
|
fun consumeC(base: BaseBuildee<TargetType> = this) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// local function definition with a return type and a block body
|
||||||
|
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>build<!> {
|
||||||
|
fun consumeD(): BaseBuildee<TargetType> { return this }
|
||||||
|
}
|
||||||
|
|
||||||
|
// local function definition with a return type and an expression body
|
||||||
|
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>build<!> {
|
||||||
|
fun consumeE(): BaseBuildee<TargetType> = this
|
||||||
|
}
|
||||||
|
|
||||||
|
// call of a function with a vararg parameter
|
||||||
|
build {
|
||||||
|
consumeF(this, this)
|
||||||
|
}
|
||||||
|
|
||||||
|
// call of an extension function
|
||||||
|
build {
|
||||||
|
this.consumeG()
|
||||||
|
}
|
||||||
|
|
||||||
|
// call of an infix function
|
||||||
|
build {
|
||||||
|
this consumeH this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
open class BaseBuildee<BBTV>
|
||||||
|
class DerivedBuildee<DBTV>: BaseBuildee<DBTV>()
|
||||||
|
|
||||||
|
fun <FTV> build(instructions: DerivedBuildee<FTV>.() -> Unit): DerivedBuildee<FTV> {
|
||||||
|
return DerivedBuildee<FTV>().apply(instructions)
|
||||||
|
}
|
||||||
|
|
||||||
|
class TargetType
|
||||||
|
|
||||||
|
fun consumeA(base: BaseBuildee<TargetType>) {}
|
||||||
|
|
||||||
|
fun consumeB(base: BaseBuildee<TargetType>) {}
|
||||||
|
|
||||||
|
fun consumeF(vararg bases: BaseBuildee<TargetType>) {}
|
||||||
|
|
||||||
|
fun BaseBuildee<TargetType>.consumeG() {}
|
||||||
|
|
||||||
|
infix fun BaseBuildee<TargetType>.consumeH(base: BaseBuildee<TargetType>) {}
|
||||||
+60
@@ -0,0 +1,60 @@
|
|||||||
|
fun test() {
|
||||||
|
// simple function call
|
||||||
|
build {
|
||||||
|
consumeA(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
// function call with a named argument
|
||||||
|
build {
|
||||||
|
consumeB(base = this)
|
||||||
|
}
|
||||||
|
|
||||||
|
// local function definition with a default parameter value
|
||||||
|
build {
|
||||||
|
fun consumeC(base: BaseBuildee<TargetType> = this) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// local function definition with a return type and a block body
|
||||||
|
build {
|
||||||
|
fun consumeD(): BaseBuildee<TargetType> { return this }
|
||||||
|
}
|
||||||
|
|
||||||
|
// local function definition with a return type and an expression body
|
||||||
|
build {
|
||||||
|
fun consumeE(): BaseBuildee<TargetType> = this
|
||||||
|
}
|
||||||
|
|
||||||
|
// call of a function with a vararg parameter
|
||||||
|
build {
|
||||||
|
consumeF(this, this)
|
||||||
|
}
|
||||||
|
|
||||||
|
// call of an extension function
|
||||||
|
build {
|
||||||
|
this.consumeG()
|
||||||
|
}
|
||||||
|
|
||||||
|
// call of an infix function
|
||||||
|
build {
|
||||||
|
this consumeH this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
open class BaseBuildee<BBTV>
|
||||||
|
class DerivedBuildee<DBTV>: BaseBuildee<DBTV>()
|
||||||
|
|
||||||
|
fun <FTV> build(instructions: DerivedBuildee<FTV>.() -> Unit): DerivedBuildee<FTV> {
|
||||||
|
return DerivedBuildee<FTV>().apply(instructions)
|
||||||
|
}
|
||||||
|
|
||||||
|
class TargetType
|
||||||
|
|
||||||
|
fun consumeA(base: BaseBuildee<TargetType>) {}
|
||||||
|
|
||||||
|
fun consumeB(base: BaseBuildee<TargetType>) {}
|
||||||
|
|
||||||
|
fun consumeF(vararg bases: BaseBuildee<TargetType>) {}
|
||||||
|
|
||||||
|
fun BaseBuildee<TargetType>.consumeG() {}
|
||||||
|
|
||||||
|
infix fun BaseBuildee<TargetType>.consumeH(base: BaseBuildee<TargetType>) {}
|
||||||
+110
@@ -0,0 +1,110 @@
|
|||||||
|
// WITH_REFLECT
|
||||||
|
// DIAGNOSTICS: -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE
|
||||||
|
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
// initialization of an immutable local value
|
||||||
|
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>build<!> {
|
||||||
|
val baseA: BaseBuildee<TargetType> = this
|
||||||
|
}
|
||||||
|
|
||||||
|
// assignment to a mutable local variable
|
||||||
|
build {
|
||||||
|
var baseB = BaseBuildee<TargetType>()
|
||||||
|
baseB = this
|
||||||
|
}
|
||||||
|
|
||||||
|
// a destructuring declaration
|
||||||
|
build {
|
||||||
|
val (_: BaseBuildee<TargetType>, _: BaseBuildee<TargetType>) = this to this
|
||||||
|
}
|
||||||
|
|
||||||
|
// body of a getter of an immutable property
|
||||||
|
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>build<!> {
|
||||||
|
class LocalWrapper {
|
||||||
|
val baseC: BaseBuildee<TargetType>
|
||||||
|
get() = this@build
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialization of a mutable property's backing field
|
||||||
|
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>build<!> {
|
||||||
|
class LocalWrapper {
|
||||||
|
var baseD: BaseBuildee<TargetType> = this@build
|
||||||
|
set(value) {
|
||||||
|
field = BaseBuildee()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// body of a setter of a mutable property
|
||||||
|
build {
|
||||||
|
class LocalWrapper {
|
||||||
|
var baseE: BaseBuildee<TargetType> = BaseBuildee()
|
||||||
|
set(value) {
|
||||||
|
field = this@build
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// assignment via a mutable property's setter
|
||||||
|
build {
|
||||||
|
baseF = this
|
||||||
|
}
|
||||||
|
|
||||||
|
// declaration of a property delegated via getValue/setValue
|
||||||
|
build {
|
||||||
|
val baseG: BaseBuildee<TargetType> by Delegate(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
// assignment to a property delegated via getValue/setValue
|
||||||
|
build {
|
||||||
|
baseH = this
|
||||||
|
}
|
||||||
|
|
||||||
|
// declaration of a property delegated via provideDelegate
|
||||||
|
build {
|
||||||
|
val baseI: BaseBuildee<TargetType> by DelegateProvider(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
// assignment to a property delegated via provideDelegate
|
||||||
|
build {
|
||||||
|
baseJ = this
|
||||||
|
}
|
||||||
|
|
||||||
|
// an extension property
|
||||||
|
build {
|
||||||
|
this.baseK
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
open class BaseBuildee<BBTV>
|
||||||
|
class DerivedBuildee<DBTV>: BaseBuildee<DBTV>()
|
||||||
|
|
||||||
|
fun <FTV> build(instructions: DerivedBuildee<FTV>.() -> Unit): DerivedBuildee<FTV> {
|
||||||
|
return DerivedBuildee<FTV>().apply(instructions)
|
||||||
|
}
|
||||||
|
|
||||||
|
class TargetType
|
||||||
|
|
||||||
|
var baseF
|
||||||
|
get() = BaseBuildee<TargetType>()
|
||||||
|
set(value) {}
|
||||||
|
|
||||||
|
class Delegate<T>(private var arg: T) {
|
||||||
|
operator fun getValue(thisRef: Any?, property: KProperty<*>): T = arg
|
||||||
|
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
|
||||||
|
arg = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var baseH by Delegate(BaseBuildee<TargetType>())
|
||||||
|
|
||||||
|
class DelegateProvider<T>(private val arg: T) {
|
||||||
|
operator fun provideDelegate(thisRef: Any?, property: KProperty<*>): Delegate<T> = Delegate(arg)
|
||||||
|
}
|
||||||
|
|
||||||
|
var baseJ by DelegateProvider(BaseBuildee<TargetType>())
|
||||||
|
|
||||||
|
val BaseBuildee<TargetType>.baseK get() = this
|
||||||
+110
@@ -0,0 +1,110 @@
|
|||||||
|
// WITH_REFLECT
|
||||||
|
// DIAGNOSTICS: -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE
|
||||||
|
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
// initialization of an immutable local value
|
||||||
|
build {
|
||||||
|
val baseA: BaseBuildee<TargetType> = this
|
||||||
|
}
|
||||||
|
|
||||||
|
// assignment to a mutable local variable
|
||||||
|
build {
|
||||||
|
var baseB = BaseBuildee<TargetType>()
|
||||||
|
baseB = this
|
||||||
|
}
|
||||||
|
|
||||||
|
// a destructuring declaration
|
||||||
|
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>build<!> {
|
||||||
|
val (_: BaseBuildee<TargetType>, _: BaseBuildee<TargetType>) = this to this
|
||||||
|
}
|
||||||
|
|
||||||
|
// body of a getter of an immutable property
|
||||||
|
build {
|
||||||
|
class LocalWrapper {
|
||||||
|
val baseC: BaseBuildee<TargetType>
|
||||||
|
get() = this@build
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialization of a mutable property's backing field
|
||||||
|
build {
|
||||||
|
class LocalWrapper {
|
||||||
|
var baseD: BaseBuildee<TargetType> = this@build
|
||||||
|
set(value) {
|
||||||
|
field = BaseBuildee()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// body of a setter of a mutable property
|
||||||
|
build {
|
||||||
|
class LocalWrapper {
|
||||||
|
var baseE: BaseBuildee<TargetType> = BaseBuildee()
|
||||||
|
set(value) {
|
||||||
|
field = this@build
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// assignment via a mutable property's setter
|
||||||
|
build {
|
||||||
|
baseF = this
|
||||||
|
}
|
||||||
|
|
||||||
|
// declaration of a property delegated via getValue/setValue
|
||||||
|
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>build<!> {
|
||||||
|
val baseG: BaseBuildee<TargetType> by Delegate(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
// assignment to a property delegated via getValue/setValue
|
||||||
|
build {
|
||||||
|
baseH = this
|
||||||
|
}
|
||||||
|
|
||||||
|
// declaration of a property delegated via provideDelegate
|
||||||
|
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>build<!> {
|
||||||
|
val baseI: BaseBuildee<TargetType> by DelegateProvider(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
// assignment to a property delegated via provideDelegate
|
||||||
|
build {
|
||||||
|
baseJ = this
|
||||||
|
}
|
||||||
|
|
||||||
|
// an extension property
|
||||||
|
build {
|
||||||
|
this.baseK
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
open class BaseBuildee<BBTV>
|
||||||
|
class DerivedBuildee<DBTV>: BaseBuildee<DBTV>()
|
||||||
|
|
||||||
|
fun <FTV> build(instructions: DerivedBuildee<FTV>.() -> Unit): DerivedBuildee<FTV> {
|
||||||
|
return DerivedBuildee<FTV>().apply(instructions)
|
||||||
|
}
|
||||||
|
|
||||||
|
class TargetType
|
||||||
|
|
||||||
|
var baseF
|
||||||
|
get() = BaseBuildee<TargetType>()
|
||||||
|
set(value) {}
|
||||||
|
|
||||||
|
class Delegate<T>(private var arg: T) {
|
||||||
|
operator fun getValue(thisRef: Any?, property: KProperty<*>): T = arg
|
||||||
|
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
|
||||||
|
arg = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var baseH by Delegate(BaseBuildee<TargetType>())
|
||||||
|
|
||||||
|
class DelegateProvider<T>(private val arg: T) {
|
||||||
|
operator fun provideDelegate(thisRef: Any?, property: KProperty<*>): Delegate<T> = Delegate(arg)
|
||||||
|
}
|
||||||
|
|
||||||
|
var baseJ by DelegateProvider(BaseBuildee<TargetType>())
|
||||||
|
|
||||||
|
val BaseBuildee<TargetType>.baseK get() = this
|
||||||
Generated
+28
@@ -3862,6 +3862,34 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
runTest("compiler/testData/diagnostics/tests/builderInference/overloadResolutionByLambdaReturnType.kt");
|
runTest("compiler/testData/diagnostics/tests/builderInference/overloadResolutionByLambdaReturnType.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@TestMetadata("compiler/testData/diagnostics/tests/builderInference/additional")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
public class Additional {
|
||||||
|
@Test
|
||||||
|
public void testAllFilesPresentInAdditional() throws Exception {
|
||||||
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/builderInference/additional"), Pattern.compile("^(.*)\\.kts?$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("BuildeeSupertypeAsTypeVariableSourceInClassifiers.kt")
|
||||||
|
public void testBuildeeSupertypeAsTypeVariableSourceInClassifiers() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/builderInference/additional/BuildeeSupertypeAsTypeVariableSourceInClassifiers.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("BuildeeSupertypeAsTypeVariableSourceInFunctions.kt")
|
||||||
|
public void testBuildeeSupertypeAsTypeVariableSourceInFunctions() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/builderInference/additional/BuildeeSupertypeAsTypeVariableSourceInFunctions.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("BuildeeSupertypeAsTypeVariableSourceInProperties.kt")
|
||||||
|
public void testBuildeeSupertypeAsTypeVariableSourceInProperties() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/builderInference/additional/BuildeeSupertypeAsTypeVariableSourceInProperties.kt");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@TestMetadata("compiler/testData/diagnostics/tests/builderInference/issues")
|
@TestMetadata("compiler/testData/diagnostics/tests/builderInference/issues")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
|||||||
Reference in New Issue
Block a user