[FIR] Fix duplicate WRONG_NULLABILITY_FOR_JAVA_OVERRIDE

Also, the test shows a missing warning in K1 which is present in K2.

#KT-63600 Fixed
#KT-63599
#KT-63745
#KT-63746
This commit is contained in:
Kirill Rakhman
2023-11-20 10:46:21 +01:00
committed by Space Team
parent 54c2339dfb
commit 4882ac6599
9 changed files with 171 additions and 4 deletions
@@ -240,6 +240,12 @@ public class FirPsiOldFrontendForeignAnnotationsCompiledJavaTestGenerated extend
runTest("compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/nullabilityNicknames.kt");
}
@Test
@TestMetadata("override.kt")
public void testOverride() throws Exception {
runTest("compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/override.kt");
}
@Test
@TestMetadata("safeCalls.kt")
public void testSafeCalls() throws Exception {
@@ -298,6 +298,12 @@ public class FirPsiOldFrontendForeignAnnotationsCompiledJavaWithPsiClassReadingT
runTest("compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/nullabilityNicknames.kt");
}
@Test
@TestMetadata("override.kt")
public void testOverride() throws Exception {
runTest("compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/override.kt");
}
@Test
@TestMetadata("safeCalls.kt")
public void testSafeCalls() throws Exception {
@@ -298,6 +298,12 @@ public class FirPsiOldFrontendForeignAnnotationsSourceJavaTestGenerated extends
runTest("compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/nullabilityNicknames.kt");
}
@Test
@TestMetadata("override.kt")
public void testOverride() throws Exception {
runTest("compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/override.kt");
}
@Test
@TestMetadata("safeCalls.kt")
public void testSafeCalls() throws Exception {
@@ -35,6 +35,7 @@ object FirOverrideJavaNullabilityWarningChecker : FirAbstractOverrideChecker() {
for (member in declaration.declarations) {
var anyBaseEnhanced = false
var anyReported = false
if (member is FirSimpleFunction) {
val enhancedOverrides = scope
@@ -44,7 +45,8 @@ object FirOverrideJavaNullabilityWarningChecker : FirAbstractOverrideChecker() {
val substitutedBase = it.fir.substituteOrNull(substitutor, context) ?: return@map it
anyBaseEnhanced = true
if (!context.session.firOverrideChecker.isOverriddenFunction(member, substitutedBase)) {
if (!anyReported && !context.session.firOverrideChecker.isOverriddenFunction(member, substitutedBase)) {
anyReported = true
reporter.reportOn(
member.source,
FirJvmErrors.WRONG_NULLABILITY_FOR_JAVA_OVERRIDE,
@@ -57,7 +59,7 @@ object FirOverrideJavaNullabilityWarningChecker : FirAbstractOverrideChecker() {
substitutedBase.symbol
}
if (anyBaseEnhanced) {
if (anyBaseEnhanced && !anyReported) {
member.symbol.checkReturnType(enhancedOverrides, typeCheckerState, context)?.let {
reporter.reportOn(
member.source, FirJvmErrors.WRONG_NULLABILITY_FOR_JAVA_OVERRIDE, member.symbol, it, context
@@ -72,7 +74,8 @@ object FirOverrideJavaNullabilityWarningChecker : FirAbstractOverrideChecker() {
val substitutedBase = it.fir.substituteOrNull(substitutor, context) ?: return@map it
anyBaseEnhanced = true
if (!context.session.firOverrideChecker.isOverriddenProperty(member, substitutedBase)) {
if (!anyReported && !context.session.firOverrideChecker.isOverriddenProperty(member, substitutedBase)) {
anyReported = true
reporter.reportOn(
member.source,
FirJvmErrors.WRONG_NULLABILITY_FOR_JAVA_OVERRIDE,
@@ -85,7 +88,7 @@ object FirOverrideJavaNullabilityWarningChecker : FirAbstractOverrideChecker() {
substitutedBase.symbol
}
if (anyBaseEnhanced) {
if (anyBaseEnhanced && !anyReported) {
member.symbol.checkReturnType(enhancedOverrides, typeCheckerState, context)?.let {
reporter.reportOn(
member.source, FirJvmErrors.WRONG_NULLABILITY_FOR_JAVA_OVERRIDE, member.symbol, it, context