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:
Alexander Udalov
2012-07-30 02:40:58 -07:00
3 changed files with 17 additions and 1 deletions
@@ -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");
}
}