Merge pull request #99 from udalov/kt2382
KT-2382 Placing final modifier to overriden method in trait produces runtime exception
This commit is contained in:
@@ -101,7 +101,10 @@ public class FunctionCodegen {
|
||||
|
||||
Modality modality = functionDescriptor.getModality();
|
||||
if (modality == Modality.FINAL) {
|
||||
flags |= ACC_FINAL;
|
||||
DeclarationDescriptor containingDeclaration = functionDescriptor.getContainingDeclaration();
|
||||
if (!(containingDeclaration instanceof ClassDescriptor) || ((ClassDescriptor)containingDeclaration).getKind() != ClassKind.TRAIT) {
|
||||
flags |= ACC_FINAL;
|
||||
}
|
||||
}
|
||||
|
||||
OwnerKind kind = context.getContextKind();
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
//KT-2382
|
||||
|
||||
trait T {
|
||||
final fun foo() = "OK"
|
||||
}
|
||||
|
||||
class S : T { }
|
||||
|
||||
fun box(): String = S().foo()
|
||||
@@ -68,4 +68,8 @@ public class TraitsTest extends CodegenTestCase {
|
||||
public void testKt2541() {
|
||||
blackBoxFile("regressions/kt2541.kt");
|
||||
}
|
||||
|
||||
public void testFinalMethod() throws Exception {
|
||||
blackBoxFile("traits/finalMethod.jet");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user