diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/MethodAdditionalAnnotationsProvider.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/MethodAdditionalAnnotationsProvider.kt index 9081ac71afe..e6c290f51cb 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/MethodAdditionalAnnotationsProvider.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/MethodAdditionalAnnotationsProvider.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.light.classes.symbol.annotations import com.intellij.psi.PsiAnnotation import com.intellij.psi.PsiElement import com.intellij.psi.PsiModifierList -import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethod +import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase import org.jetbrains.kotlin.load.java.JvmAnnotationNames internal object MethodAdditionalAnnotationsProvider : AdditionalAnnotationsProvider { @@ -38,4 +38,4 @@ internal object MethodAdditionalAnnotationsProvider : AdditionalAnnotationsProvi override fun isSpecialQualifier(qualifiedName: String): Boolean = false } -private fun PsiElement.isMethodWithOverride(): Boolean = this is SymbolLightMethod<*> && (isDelegated || isOverride()) +private fun PsiElement.isMethodWithOverride(): Boolean = this is SymbolLightMethodBase && (isDelegated || isOverride()) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt index fe8aad9031a..751f1a63876 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt @@ -199,19 +199,22 @@ internal class SymbolLightAccessorMethod private constructor( annotationUseSiteTargetFilter = accessorSite.toFilter(), ), ), - additionalAnnotationsProvider = NullabilityAnnotationsProvider { - val nullabilityApplicable = isGetter && - !(isParameter && this.containingClass.isAnnotationType) && - !modifierList.hasModifierProperty(PsiModifier.PRIVATE) + additionalAnnotationsProvider = CompositeAdditionalAnnotationsProvider( + NullabilityAnnotationsProvider { + val nullabilityApplicable = isGetter && + !(isParameter && this.containingClass.isAnnotationType) && + !modifierList.hasModifierProperty(PsiModifier.PRIVATE) - if (nullabilityApplicable) { - containingPropertySymbolPointer.withSymbol(ktModule) { propertySymbol -> - getTypeNullability(propertySymbol.returnType) + if (nullabilityApplicable) { + containingPropertySymbolPointer.withSymbol(ktModule) { propertySymbol -> + getTypeNullability(propertySymbol.returnType) + } + } else { + NullabilityType.Unknown } - } else { - NullabilityType.Unknown - } - } + }, + MethodAdditionalAnnotationsProvider + ) ), ) } diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/ImplementingCharSequenceAndNumber.fir.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/ImplementingCharSequenceAndNumber.fir.java index e84928a0c96..a97352e2fe4 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/ImplementingCharSequenceAndNumber.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/ImplementingCharSequenceAndNumber.fir.java @@ -40,8 +40,9 @@ public final class Container /* p1.Container*/ { @java.lang.Override() public char get(int);// get(int) - public MyString();// .ctor() - + @java.lang.Override() public int getLength();// getLength() + + public MyString();// .ctor() } } diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/ImplementingMutableSet.fir.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/ImplementingMutableSet.fir.java index 76f53d9cd95..5e51e74e5c2 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/ImplementingMutableSet.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/ImplementingMutableSet.fir.java @@ -16,6 +16,9 @@ public final class SmartSet /* SmartSet*/ extends kotlin.collections.Abstrac @java.lang.Override() public boolean add(T);// add(T) + @java.lang.Override() + public int getSize();// getSize() + @java.lang.Override() public void clear();// clear() @@ -29,8 +32,6 @@ public final class SmartSet /* SmartSet*/ extends kotlin.collections.Abstrac private SmartSet();// .ctor() - public int getSize();// getSize() - public void setSize(int);// setSize(int) public static final class Companion /* SmartSet.Companion*/ { diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingFinalInternal.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingFinalInternal.java index 461956cd6fa..5189d59ed88 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingFinalInternal.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingFinalInternal.java @@ -2,7 +2,8 @@ public final class C /* p.C*/ extends p.A { @java.lang.Override() public int af$light_idea_test_case();// af$light_idea_test_case() - public C();// .ctor() - + @java.lang.Override() public int getAp$light_idea_test_case();// getAp$light_idea_test_case() + + public C();// .ctor() } diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingInternal.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingInternal.java index ed1bed9b542..e8f68d1a4d1 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingInternal.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingInternal.java @@ -4,9 +4,11 @@ public final class C /* p.C*/ extends p.A implements p.I { @java.lang.Override() public int af$light_idea_test_case();// af$light_idea_test_case() - public C();// .ctor() - + @java.lang.Override() public int getAp$light_idea_test_case();// getAp$light_idea_test_case() + @java.lang.Override() public int getIp$light_idea_test_case();// getIp$light_idea_test_case() + + public C();// .ctor() } diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingProtected.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingProtected.java index dd8d55f1f9b..084b02e9956 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingProtected.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingProtected.java @@ -2,6 +2,7 @@ public final class C /* p.C*/ extends p.A { @java.lang.Override() protected int af();// af() + @java.lang.Override() protected int getAp();// getAp() public C();// .ctor() diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/IntOverridesAny.fir.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/IntOverridesAny.fir.java index 1aca2857ff5..357e781fdb5 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/IntOverridesAny.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/nullabilityAnnotations/IntOverridesAny.fir.java @@ -4,7 +4,8 @@ public final class C /* C*/ implements Tr { @java.lang.Override() public int foo();// foo() - public C();// .ctor() - + @java.lang.Override() public int getV();// getV() + + public C();// .ctor() } diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/DelegatedProperty.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/DelegatedProperty.fir.java index 92059165e3f..fd5e2dde21e 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/DelegatedProperty.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/DelegatedProperty.fir.java @@ -71,12 +71,15 @@ public static final class Derived /* Container.Derived*/ extends Container.Base @org.jetbrains.annotations.NotNull() private final Container.Delegate d$delegate; + @java.lang.Override() @org.jetbrains.annotations.NotNull() public java.lang.String getB();// getB() + @java.lang.Override() @org.jetbrains.annotations.NotNull() public java.lang.String getC();// getC() + @java.lang.Override() @org.jetbrains.annotations.NotNull() public java.lang.String getD();// getD() diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/inheritance.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/inheritance.fir.java index 77cb1d633c4..fd5f22e0331 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/inheritance.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/inheritance.fir.java @@ -8,17 +8,20 @@ public abstract class AnotherDerived /* AnotherDerived*/ extends Base { @java.lang.Override() protected final void v();// v() + @java.lang.Override() protected int getZ();// getZ() + @java.lang.Override() + public int getX$light_idea_test_case();// getX$light_idea_test_case() + + @java.lang.Override() + public int getY();// getY() + public AnotherDerived(int, int, int);// .ctor(int, int, int) public abstract int getAbstractProp();// getAbstractProp() public abstract void noReturn(@org.jetbrains.annotations.NotNull() java.lang.String);// noReturn(java.lang.String) - - public int getX$light_idea_test_case();// getX$light_idea_test_case() - - public int getY();// getY() } public abstract class Base /* Base*/ { @@ -55,9 +58,10 @@ public final class Derived /* Derived*/ extends Base implements IntfWithProp { @java.lang.Override() public int abs();// abs() - public Derived(int);// .ctor(int) - + @java.lang.Override() public int getX();// getX() + + public Derived(int);// .ctor(int) } public abstract interface Intf /* Intf*/ { @@ -69,7 +73,8 @@ public abstract interface IntfWithProp /* IntfWithProp*/ extends Intf { } final class Private /* Private*/ { - public Private();// .ctor() - + @java.lang.Override() public boolean getOverridesNothing();// getOverridesNothing() + + public Private();// .ctor() } diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/inlineClasses.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/inlineClasses.fir.java index fb5e4d479d8..e641408efc5 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/inlineClasses.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/inlineClasses.fir.java @@ -9,12 +9,13 @@ public enum Foo /* Foo*/ { public final class InlineInheritance /* InlineInheritance*/ implements I { private final int v; + @java.lang.Override() + public int getX();// getX() + @java.lang.Override() public int y();// y() public final int getV();// getV() - - public int getX();// getX() } public final class InlinedDelegate /* InlinedDelegate*/ {