[FIR] Fix generating data class if there is non-property in primary constructor

#KT-44554 Fixed
This commit is contained in:
Dmitriy Novozhilov
2021-02-08 11:04:03 +03:00
committed by TeamCityServer
parent 30b5bfe767
commit 2b088f1147
6 changed files with 41 additions and 4 deletions
@@ -244,6 +244,11 @@ public class LazyBodyIsNotTouchedTilContractsPhaseTestGenerated extends Abstract
runTest("compiler/fir/analysis-tests/testData/resolve/implicitTypeInFakeOverride.kt");
}
@TestMetadata("incorrectDataClass.kt")
public void testIncorrectDataClass() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/incorrectDataClass.kt");
}
@TestMetadata("incorrectSuperCall.kt")
public void testIncorrectSuperCall() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/incorrectSuperCall.kt");
@@ -0,0 +1,17 @@
FILE: incorrectDataClass.kt
public final data class Foo : R|kotlin/Any| {
public constructor(a: R|kotlin/Int|, b: R|kotlin/Int|): R|Foo| {
super<R|kotlin/Any|>()
}
public final val b: R|kotlin/Int| = R|<local>/b|
public get(): R|kotlin/Int|
public final val c: R|kotlin/Int| = Int(4)
public get(): R|kotlin/Int|
public final operator fun component1(): R|kotlin/Int|
public final fun copy(b: R|kotlin/Int| = this@R|/Foo|.R|/Foo.b|): R|Foo|
}
@@ -0,0 +1,5 @@
// ISSUE: KT-44554
data class Foo(a: Int, val b: Int) {
val c = 4
}
@@ -284,6 +284,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest {
runTest("compiler/fir/analysis-tests/testData/resolve/implicitTypeInFakeOverride.kt");
}
@Test
@TestMetadata("incorrectDataClass.kt")
public void testIncorrectDataClass() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/incorrectDataClass.kt");
}
@Test
@TestMetadata("incorrectSuperCall.kt")
public void testIncorrectSuperCall() throws Exception {
@@ -287,6 +287,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos
runTest("compiler/fir/analysis-tests/testData/resolve/implicitTypeInFakeOverride.kt");
}
@Test
@TestMetadata("incorrectDataClass.kt")
public void testIncorrectDataClass() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/incorrectDataClass.kt");
}
@Test
@TestMetadata("incorrectSuperCall.kt")
public void testIncorrectSuperCall() throws Exception {
@@ -862,9 +862,7 @@ class RawFirBuilder(
}
if (classOrObject.hasModifier(DATA_KEYWORD) && firPrimaryConstructor != null) {
val zippedParameters = classOrObject.primaryConstructorParameters.zip(
declarations.filterIsInstance<FirProperty>(),
)
val zippedParameters = classOrObject.primaryConstructorParameters.filter { it.hasValOrVar() } zip declarations.filterIsInstance<FirProperty>()
DataClassMembersGenerator(
baseSession,
classOrObject,
@@ -877,7 +875,7 @@ class RawFirBuilder(
// just making a shallow copy isn't enough type ref may be a function type ref
// and contain value parameters inside
withDefaultSourceElementKind(newKind) {
(property.returnTypeRef.psi as KtTypeReference).toFirOrImplicitType()
(property.returnTypeRef.psi as KtTypeReference?).toFirOrImplicitType()
}
},
).generate()