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 9f2cbd56aa4..d381d903e3d 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 @@ -160,7 +160,7 @@ internal class SymbolLightAccessorMethod private constructor( propertySymbol.computeModalityForMethod( isTopLevel = isTopLevel, - suppressFinal = containingClass.isInterface || propertySymbol.isOverride, + suppressFinal = containingClass.isInterface, result = modifiers, ) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightSimpleMethod.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightSimpleMethod.kt index 834897632f0..eb737108541 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightSimpleMethod.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightSimpleMethod.kt @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin import org.jetbrains.kotlin.asJava.classes.lazyPub -import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.light.classes.symbol.* import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations import org.jetbrains.kotlin.light.classes.symbol.annotations.hasAnnotation @@ -90,13 +89,10 @@ internal class SymbolLightSimpleMethod( private fun computeModifiers(functionSymbol: KtFunctionSymbol): Set { if (functionSymbol.hasInlineOnlyAnnotation()) return setOf(PsiModifier.FINAL, PsiModifier.PRIVATE) - val finalModifier = kotlinOrigin?.hasModifier(KtTokens.FINAL_KEYWORD) == true - val modifiers = mutableSetOf() - functionSymbol.computeModalityForMethod( isTopLevel = isTopLevel, - suppressFinal = containingClass.isInterface || (!finalModifier && functionSymbol.isOverride), + suppressFinal = containingClass.isInterface, result = modifiers ) @@ -109,9 +105,11 @@ internal class SymbolLightSimpleMethod( if (!suppressStatic && functionSymbol.hasJvmStaticAnnotation()) { modifiers.add(PsiModifier.STATIC) } + if (functionSymbol.hasAnnotation(STRICTFP_ANNOTATION_CLASS_ID, null)) { modifiers.add(PsiModifier.STRICTFP) } + if (functionSymbol.hasAnnotation(SYNCHRONIZED_ANNOTATION_CLASS_ID, null)) { modifiers.add(PsiModifier.SYNCHRONIZED) } diff --git a/compiler/testData/asJava/lightClasses/DataClassWithCustomImplementedMembers.fir.java b/compiler/testData/asJava/lightClasses/DataClassWithCustomImplementedMembers.fir.java index fe218250d55..930f490baab 100644 --- a/compiler/testData/asJava/lightClasses/DataClassWithCustomImplementedMembers.fir.java +++ b/compiler/testData/asJava/lightClasses/DataClassWithCustomImplementedMembers.fir.java @@ -9,7 +9,7 @@ public static final class Equals /* p.Wrapper.Equals*/ { private final p.G code; @java.lang.Override() - public boolean equals(@org.jetbrains.annotations.Nullable() java.lang.Object);// equals(java.lang.Object) + public final boolean equals(@org.jetbrains.annotations.Nullable() java.lang.Object);// equals(java.lang.Object) @org.jetbrains.annotations.NotNull() public final p.G component1();// component1() @@ -32,7 +32,7 @@ public static final class Equals /* p.Wrapper.Equals*/ { private final p.G code; @java.lang.Override() - public int hashCode();// hashCode() + public final int hashCode();// hashCode() @org.jetbrains.annotations.NotNull() public final p.G component1();// component1() @@ -56,7 +56,7 @@ public static final class Equals /* p.Wrapper.Equals*/ { @java.lang.Override() @org.jetbrains.annotations.NotNull() - public java.lang.String toString();// toString() + public final java.lang.String toString();// toString() @org.jetbrains.annotations.NotNull() public final p.G component1();// component1() diff --git a/compiler/testData/asJava/lightClasses/EnumEntry.fir.java b/compiler/testData/asJava/lightClasses/EnumEntry.fir.java index 7efedea858c..08e3a1519dd 100644 --- a/compiler/testData/asJava/lightClasses/EnumEntry.fir.java +++ b/compiler/testData/asJava/lightClasses/EnumEntry.fir.java @@ -6,7 +6,7 @@ static final class FirstEntry /* p.KotlinEnum.FirstEntry*/ extends p.KotlinEnum FirstEntry();// .ctor() @java.lang.Override() - public void abstractFun();// abstractFun() + public final void abstractFun();// abstractFun() public final int getFirstEntryProp();// getFirstEntryProp() diff --git a/compiler/testData/asJava/lightClasses/InheritingInterfaceDefaultImpls.fir.java b/compiler/testData/asJava/lightClasses/InheritingInterfaceDefaultImpls.fir.java index 5872a6d61dd..80751bfc6e2 100644 --- a/compiler/testData/asJava/lightClasses/InheritingInterfaceDefaultImpls.fir.java +++ b/compiler/testData/asJava/lightClasses/InheritingInterfaceDefaultImpls.fir.java @@ -1,6 +1,6 @@ public final class Inheritor /* p.Inheritor*/ implements p.I, p.I2 { @java.lang.Override() - public void g();// g() + public final void g();// g() public Inheritor();// .ctor() diff --git a/compiler/testData/asJava/lightClasses/NonDataClassWithComponentFunctions.fir.java b/compiler/testData/asJava/lightClasses/NonDataClassWithComponentFunctions.fir.java index b9c610c42ec..774e5aabf04 100644 --- a/compiler/testData/asJava/lightClasses/NonDataClassWithComponentFunctions.fir.java +++ b/compiler/testData/asJava/lightClasses/NonDataClassWithComponentFunctions.fir.java @@ -3,13 +3,13 @@ public final class A /* p.A*/ { @java.lang.Override() @org.jetbrains.annotations.NotNull() - public java.lang.String toString();// toString() + public final java.lang.String toString();// toString() @java.lang.Override() - public boolean equals(@org.jetbrains.annotations.Nullable() java.lang.Object);// equals(java.lang.Object) + public final boolean equals(@org.jetbrains.annotations.Nullable() java.lang.Object);// equals(java.lang.Object) @java.lang.Override() - public int hashCode();// hashCode() + public final int hashCode();// hashCode() public A(int);// .ctor(int) diff --git a/compiler/testData/asJava/lightClasses/compilationErrors/TwoOverrides.fir.java b/compiler/testData/asJava/lightClasses/compilationErrors/TwoOverrides.fir.java index 6cacc5de1af..6ae49a7caf1 100644 --- a/compiler/testData/asJava/lightClasses/compilationErrors/TwoOverrides.fir.java +++ b/compiler/testData/asJava/lightClasses/compilationErrors/TwoOverrides.fir.java @@ -1,11 +1,11 @@ public final class TwoOverrides /* TwoOverrides*/ implements java.lang.Iterable, kotlin.collections.Iterable, kotlin.jvm.internal.markers.KMappedMarker { @java.lang.Override() @org.jetbrains.annotations.Nullable() - public java.lang.Void iterator();// iterator() + public final java.lang.Void iterator();// iterator() @java.lang.Override() @org.jetbrains.annotations.Nullable() - public java.lang.Void iterator();// iterator() + public final java.lang.Void iterator();// iterator() public TwoOverrides();// .ctor() diff --git a/compiler/testData/asJava/lightClasses/ideRegression/ImplementingCharSequenceAndNumber.fir.java b/compiler/testData/asJava/lightClasses/ideRegression/ImplementingCharSequenceAndNumber.fir.java index 049c01701ea..33d8b12cc1b 100644 --- a/compiler/testData/asJava/lightClasses/ideRegression/ImplementingCharSequenceAndNumber.fir.java +++ b/compiler/testData/asJava/lightClasses/ideRegression/ImplementingCharSequenceAndNumber.fir.java @@ -5,42 +5,42 @@ public final class Container /* p1.Container*/ { public static final class MyNumber /* p1.Container.MyNumber*/ extends java.lang.Number { @java.lang.Override() - public byte toByte();// toByte() + public final byte toByte();// toByte() @java.lang.Override() - public char toChar();// toChar() + public final char toChar();// toChar() @java.lang.Override() - public double toDouble();// toDouble() + public final double toDouble();// toDouble() @java.lang.Override() - public float toFloat();// toFloat() + public final float toFloat();// toFloat() @java.lang.Override() - public int toInt();// toInt() + public final int toInt();// toInt() @java.lang.Override() - public long toLong();// toLong() + public final long toLong();// toLong() @java.lang.Override() - public short toShort();// toShort() + public final short toShort();// toShort() public MyNumber();// .ctor() }public static final class MyString /* p1.Container.MyString*/ implements java.lang.CharSequence { @java.lang.Override() @org.jetbrains.annotations.NotNull() - public java.lang.CharSequence subSequence(int, int);// subSequence(int, int) + public final java.lang.CharSequence subSequence(int, int);// subSequence(int, int) @java.lang.Override() - public char get(int);// get(int) + public final char get(int);// get(int) public MyString();// .ctor() - public error.NonExistentClass chars();// chars() + public final error.NonExistentClass chars();// chars() - public error.NonExistentClass codePoints();// codePoints() + public final error.NonExistentClass codePoints();// codePoints() - public int getLength();// getLength() + public final int getLength();// getLength() }} diff --git a/compiler/testData/asJava/lightClasses/ideRegression/ImplementingMap.fir.java b/compiler/testData/asJava/lightClasses/ideRegression/ImplementingMap.fir.java index d248ba14ce3..7419f0de810 100644 --- a/compiler/testData/asJava/lightClasses/ideRegression/ImplementingMap.fir.java +++ b/compiler/testData/asJava/lightClasses/ideRegression/ImplementingMap.fir.java @@ -1,6 +1,6 @@ public final class TypeHierarchyMap /* p1.TypeHierarchyMap*/ implements java.util.Map, TValue>, kotlin.collections.Map, TValue>, kotlin.jvm.internal.markers.KMappedMarker { @java.lang.Override() - public boolean containsKey(@org.jetbrains.annotations.NotNull() java.lang.Class);// containsKey(java.lang.Class) + public final boolean containsKey(@org.jetbrains.annotations.NotNull() java.lang.Class);// containsKey(java.lang.Class) public TypeHierarchyMap();// .ctor() diff --git a/compiler/testData/asJava/lightClasses/ideRegression/ImplementingMutableSet.fir.java b/compiler/testData/asJava/lightClasses/ideRegression/ImplementingMutableSet.fir.java index d0eedb9aba6..75d74442d82 100644 --- a/compiler/testData/asJava/lightClasses/ideRegression/ImplementingMutableSet.fir.java +++ b/compiler/testData/asJava/lightClasses/ideRegression/ImplementingMutableSet.fir.java @@ -11,13 +11,13 @@ public final class SmartSet /* SmartSet*/ extends kotlin.collections.Abstrac @java.lang.Override() @org.jetbrains.annotations.NotNull() - public java.util.Iterator iterator();// iterator() + public final java.util.Iterator iterator();// iterator() @java.lang.Override() - public boolean add(T);// add(T) + public final boolean add(T);// add(T) @java.lang.Override() - public void clear();// clear() + public final void clear();// clear() @kotlin.jvm.JvmStatic() @org.jetbrains.annotations.NotNull() @@ -29,9 +29,9 @@ public final class SmartSet /* SmartSet*/ extends kotlin.collections.Abstrac private SmartSet();// .ctor() - public int getSize();// getSize() + public final int getSize();// getSize() - public void setSize(int);// setSize(int) + public final void setSize(int);// setSize(int) public static final class Companion /* SmartSet.Companion*/ { diff --git a/compiler/testData/asJava/lightClasses/ideRegression/InheritingInterfaceDefaultImpls.fir.java b/compiler/testData/asJava/lightClasses/ideRegression/InheritingInterfaceDefaultImpls.fir.java index 5872a6d61dd..80751bfc6e2 100644 --- a/compiler/testData/asJava/lightClasses/ideRegression/InheritingInterfaceDefaultImpls.fir.java +++ b/compiler/testData/asJava/lightClasses/ideRegression/InheritingInterfaceDefaultImpls.fir.java @@ -1,6 +1,6 @@ public final class Inheritor /* p.Inheritor*/ implements p.I, p.I2 { @java.lang.Override() - public void g();// g() + public final void g();// g() public Inheritor();// .ctor() diff --git a/compiler/testData/asJava/lightClasses/ideRegression/OverridingFinalInternal.fir.java b/compiler/testData/asJava/lightClasses/ideRegression/OverridingFinalInternal.fir.java index 7314bddfe8a..3d3eed60c30 100644 --- a/compiler/testData/asJava/lightClasses/ideRegression/OverridingFinalInternal.fir.java +++ b/compiler/testData/asJava/lightClasses/ideRegression/OverridingFinalInternal.fir.java @@ -1,8 +1,8 @@ public final class C /* p.C*/ { public C();// .ctor() - public int af();// af() + public final int af();// af() - public int getAp();// getAp() + public final int getAp();// getAp() } diff --git a/compiler/testData/asJava/lightClasses/ideRegression/OverridingInternal.fir.java b/compiler/testData/asJava/lightClasses/ideRegression/OverridingInternal.fir.java index 41f97b77eac..276a7bccd50 100644 --- a/compiler/testData/asJava/lightClasses/ideRegression/OverridingInternal.fir.java +++ b/compiler/testData/asJava/lightClasses/ideRegression/OverridingInternal.fir.java @@ -3,10 +3,10 @@ public final class C /* p.C*/ { public C();// .ctor() - public int af();// af() + public final int af();// af() - public int getAp();// getAp() + public final int getAp();// getAp() - public int getIp();// getIp() + public final int getIp();// getIp() } diff --git a/compiler/testData/asJava/lightClasses/ideRegression/OverridingProtected.fir.java b/compiler/testData/asJava/lightClasses/ideRegression/OverridingProtected.fir.java index 7314bddfe8a..3d3eed60c30 100644 --- a/compiler/testData/asJava/lightClasses/ideRegression/OverridingProtected.fir.java +++ b/compiler/testData/asJava/lightClasses/ideRegression/OverridingProtected.fir.java @@ -1,8 +1,8 @@ public final class C /* p.C*/ { public C();// .ctor() - public int af();// af() + public final int af();// af() - public int getAp();// getAp() + public final int getAp();// getAp() } diff --git a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/IntOverridesAny.fir.java b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/IntOverridesAny.fir.java index f6abe58c1ed..d500cc83ad7 100644 --- a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/IntOverridesAny.fir.java +++ b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/IntOverridesAny.fir.java @@ -2,10 +2,10 @@ public final class C /* C*/ implements Tr { private final int v; @java.lang.Override() - public int foo();// foo() + public final int foo();// foo() public C();// .ctor() - public int getV();// getV() + public final int getV();// getV() } diff --git a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/OverrideAnyWithUnit.fir.java b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/OverrideAnyWithUnit.fir.java index 15fe272c5e3..9103e2a0f90 100644 --- a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/OverrideAnyWithUnit.fir.java +++ b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/OverrideAnyWithUnit.fir.java @@ -1,6 +1,6 @@ public final class C /* C*/ implements Base { @java.lang.Override() - public void foo();// foo() + public final void foo();// foo() public C();// .ctor() diff --git a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/UnitAsGenericArgument.fir.java b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/UnitAsGenericArgument.fir.java index d3f81e07572..5e34d3a3623 100644 --- a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/UnitAsGenericArgument.fir.java +++ b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/UnitAsGenericArgument.fir.java @@ -1,6 +1,6 @@ public final class C /* C*/ implements Base { @java.lang.Override() - public void foo(@org.jetbrains.annotations.NotNull() kotlin.Unit);// foo(kotlin.Unit) + public final void foo(@org.jetbrains.annotations.NotNull() kotlin.Unit);// foo(kotlin.Unit) public C();// .ctor() diff --git a/compiler/testData/asJava/ultraLightClasses/coroutines.fir.java b/compiler/testData/asJava/ultraLightClasses/coroutines.fir.java index e576373f273..689e3f8b558 100644 --- a/compiler/testData/asJava/ultraLightClasses/coroutines.fir.java +++ b/compiler/testData/asJava/ultraLightClasses/coroutines.fir.java @@ -29,7 +29,7 @@ public abstract interface Base /* Base*/ { public final class Derived /* Derived*/ implements Base { @java.lang.Override() @org.jetbrains.annotations.Nullable() - public java.lang.Object foo(@org.jetbrains.annotations.NotNull() kotlin.coroutines.Continuation);// foo(kotlin.coroutines.Continuation) + public final java.lang.Object foo(@org.jetbrains.annotations.NotNull() kotlin.coroutines.Continuation);// foo(kotlin.coroutines.Continuation) public Derived();// .ctor() diff --git a/compiler/testData/asJava/ultraLightClasses/delegatingToInterfaces.fir.java b/compiler/testData/asJava/ultraLightClasses/delegatingToInterfaces.fir.java index c6eab6c3441..4a7ff037ecd 100644 --- a/compiler/testData/asJava/ultraLightClasses/delegatingToInterfaces.fir.java +++ b/compiler/testData/asJava/ultraLightClasses/delegatingToInterfaces.fir.java @@ -17,10 +17,10 @@ public final class BaseImpl /* BaseImpl*/ implements Base { private final int x; @java.lang.Override() - public void printMessage();// printMessage() + public final void printMessage();// printMessage() @java.lang.Override() - public void printMessageLine();// printMessageLine() + public final void printMessageLine();// printMessageLine() public BaseImpl(int);// .ctor(int) @@ -30,10 +30,10 @@ public final class BaseImpl /* BaseImpl*/ implements Base { public final class Derived /* Derived*/ implements Base { @java.lang.Override() - public int foo(@org.jetbrains.annotations.NotNull() java.lang.String, @org.jetbrains.annotations.Nullable() java.lang.Object);// foo(java.lang.String, java.lang.Object) + public final void printMessage();// printMessage() @java.lang.Override() - public void printMessage();// printMessage() + public int foo(@org.jetbrains.annotations.NotNull() java.lang.String, @org.jetbrains.annotations.Nullable() java.lang.Object);// foo(java.lang.String, java.lang.Object) @java.lang.Override() public void printMessageLine();// printMessageLine() diff --git a/compiler/testData/asJava/ultraLightClasses/implementingKotlinCollections.fir.java b/compiler/testData/asJava/ultraLightClasses/implementingKotlinCollections.fir.java index a72d3becbf7..04b977f69dc 100644 --- a/compiler/testData/asJava/ultraLightClasses/implementingKotlinCollections.fir.java +++ b/compiler/testData/asJava/ultraLightClasses/implementingKotlinCollections.fir.java @@ -1,7 +1,7 @@ public final class MyList /* MyList*/ implements java.util.List, kotlin.collections.List, kotlin.jvm.internal.markers.KMappedMarker { @java.lang.Override() @org.jetbrains.annotations.NotNull() - public java.lang.String get(int);// get(int) + public final java.lang.String get(int);// get(int) public MyList();// .ctor() diff --git a/compiler/testData/asJava/ultraLightClasses/inferringAnonymousObjectTypes.fir.java b/compiler/testData/asJava/ultraLightClasses/inferringAnonymousObjectTypes.fir.java index 39006776184..3ed38cd8fab 100644 --- a/compiler/testData/asJava/ultraLightClasses/inferringAnonymousObjectTypes.fir.java +++ b/compiler/testData/asJava/ultraLightClasses/inferringAnonymousObjectTypes.fir.java @@ -29,7 +29,7 @@ final class C /* C*/ { final class null /* null*/ { @java.lang.Override() @org.jetbrains.annotations.NotNull() - public java.lang.String toString();// toString() + public final java.lang.String toString();// toString() private ();// .ctor() @@ -51,7 +51,7 @@ public final class ValidPublicSupertype /* ValidPublicSupertype*/ { final class null /* null*/ implements java.lang.Runnable { @java.lang.Override() - public void run();// run() + public final void run();// run() private ();// .ctor() @@ -59,7 +59,7 @@ final class null /* null*/ implements java.lang.Runnable { final class null /* null*/ implements java.lang.Runnable { @java.lang.Override() - public void run();// run() + public final void run();// run() private ();// .ctor() @@ -84,7 +84,7 @@ public final class InvalidPublicSupertype /* InvalidPublicSupertype*/ { final class null /* null*/ implements I, java.lang.Runnable { @java.lang.Override() - public void run();// run() + public final void run();// run() private ();// .ctor() @@ -92,7 +92,7 @@ final class null /* null*/ implements I, java.lang.Runnable { final class null /* null*/ implements I, java.lang.Runnable { @java.lang.Override() - public void run();// run() + public final void run();// run() private ();// .ctor() diff --git a/compiler/testData/asJava/ultraLightClasses/inheritance.fir.java b/compiler/testData/asJava/ultraLightClasses/inheritance.fir.java index f4279dacf3b..8c4e7395bdc 100644 --- a/compiler/testData/asJava/ultraLightClasses/inheritance.fir.java +++ b/compiler/testData/asJava/ultraLightClasses/inheritance.fir.java @@ -38,14 +38,14 @@ public final class Derived /* Derived*/ extends Base implements IntfWithProp { private final int x = 3 /* initializer type: int */; @java.lang.Override() - public error.NonExistentClass v();// v() + public final error.NonExistentClass v();// v() @java.lang.Override() - public int abs();// abs() + public final int abs();// abs() public Derived(int);// .ctor(int) - public int getX();// getX() + public final int getX();// getX() } @@ -76,6 +76,6 @@ public abstract class AnotherDerived /* AnotherDerived*/ extends Base { final class Private /* Private*/ { public Private();// .ctor() - public boolean getOverridesNothing();// getOverridesNothing() + public final boolean getOverridesNothing();// getOverridesNothing() } diff --git a/compiler/testData/asJava/ultraLightClasses/inlineClasses.fir.java b/compiler/testData/asJava/ultraLightClasses/inlineClasses.fir.java index 132994763bf..5baabce2464 100644 --- a/compiler/testData/asJava/ultraLightClasses/inlineClasses.fir.java +++ b/compiler/testData/asJava/ultraLightClasses/inlineClasses.fir.java @@ -30,8 +30,8 @@ public final class InlineInheritance /* InlineInheritance*/ { public final int getV();// getV() - public int getX();// getX() + public final int getX();// getX() - public int y();// y() + public final int y();// y() } diff --git a/compiler/testData/asJava/ultraLightClasses/objects.fir.java b/compiler/testData/asJava/ultraLightClasses/objects.fir.java index fe4842ce0d6..c956a92ef5e 100644 --- a/compiler/testData/asJava/ultraLightClasses/objects.fir.java +++ b/compiler/testData/asJava/ultraLightClasses/objects.fir.java @@ -105,7 +105,7 @@ public final class Obj /* Obj*/ implements java.lang.Runnable { public static final Obj INSTANCE; @java.lang.Override() - public void run();// run() + public final void run();// run() @kotlin.jvm.JvmStatic() public static final int zoo();// zoo()