diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt index 47dd4e6e0d8..73ddf865d9e 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt @@ -68,6 +68,7 @@ class JavaClassUseSiteMemberScope( getterSymbol: FirNamedFunctionSymbol, setterSymbol: FirNamedFunctionSymbol?, property: FirProperty, + takeModalityFromGetter: Boolean, ): FirAccessorSymbol { return accessorByNameMap.getOrPut(property.name) { buildSyntheticProperty { @@ -79,7 +80,13 @@ class JavaClassUseSiteMemberScope( ) delegateGetter = getterSymbol.fir delegateSetter = setterSymbol?.fir - status = getterSymbol.fir.status.copy(newModality = chooseModalityForAccessor(property, delegateGetter)) + status = getterSymbol.fir.status.copy( + newModality = if (takeModalityFromGetter) { + delegateGetter.modality ?: property.modality + } else { + chooseModalityForAccessor(property, delegateGetter) + } + ) deprecation = getDeprecationsFromAccessors(delegateGetter, delegateSetter, session.languageVersionSettings.apiVersion) }.symbol } @@ -118,8 +125,8 @@ class JavaClassUseSiteMemberScope( } if (propertyFromSupertype !is FirPropertySymbol) continue val overrideInClass = - propertyFromSupertype.createOverridePropertyIfExists(declaredMemberScope) - ?: propertyFromSupertype.createOverridePropertyIfExists(superTypesScope) + propertyFromSupertype.createOverridePropertyIfExists(declaredMemberScope, takeModalityFromGetter = true) + ?: propertyFromSupertype.createOverridePropertyIfExists(superTypesScope, takeModalityFromGetter = false) when { overrideInClass != null -> { directOverriddenProperties.getOrPut(overrideInClass) { mutableListOf() }.add(propertyFromSupertype) @@ -131,7 +138,10 @@ class JavaClassUseSiteMemberScope( } } - private fun FirVariableSymbol<*>.createOverridePropertyIfExists(scope: FirScope): FirPropertySymbol? { + private fun FirVariableSymbol<*>.createOverridePropertyIfExists( + scope: FirScope, + takeModalityFromGetter: Boolean + ): FirPropertySymbol? { if (this !is FirPropertySymbol) return null val getterSymbol = this.findGetterOverride(scope) ?: return null val setterSymbol = @@ -141,7 +151,7 @@ class JavaClassUseSiteMemberScope( null if (setterSymbol != null && setterSymbol.fir.modality != getterSymbol.fir.modality) return null - return generateAccessorSymbol(getterSymbol, setterSymbol, fir) + return generateAccessorSymbol(getterSymbol, setterSymbol, fir, takeModalityFromGetter) } private fun FirPropertySymbol.findGetterOverride( diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembersAroundJava.fir.kt b/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembersAroundJava.fir.kt deleted file mode 100644 index c9e0568dfa7..00000000000 --- a/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembersAroundJava.fir.kt +++ /dev/null @@ -1,27 +0,0 @@ -// FULL_JDK -// ISSUE: KT-47542 - -// FILE: PlaceholderExceptionSupport.java - -public interface PlaceholderExceptionSupport { - String getMessage(); -} - -// FILE: ExceptionWithAbstractMessage.java - -public class ExceptionWithAbstractMessage extends RuntimeException implements PlaceholderExceptionSupport { - public ExceptionWithAbstractMessage(String x) { super(x); } - - abstract String getMessage(); -} - -// FILE: PlaceholderException.java - -public class PlaceholderException extends RuntimeException implements PlaceholderExceptionSupport { - public PlaceholderException(String x) { super(x); } -} - -// FILE: main.kt -class KotlinTestSuccess : PlaceholderException("OK") {} - -class KotlinTestFailure : ExceptionWithAbstractMessage("FAIL") {} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembersAroundJava.kt b/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembersAroundJava.kt index 874a76aa495..b2f5a223178 100644 --- a/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembersAroundJava.kt +++ b/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembersAroundJava.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FULL_JDK // ISSUE: KT-47542