diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 37efbe6ffdf..a8abe5e57f4 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1574,36 +1574,12 @@ public class ExpressionCodegen extends JetVisitor implem boolean isSuper = r instanceof JetSuperExpression; propertyDescriptor = accessablePropertyDescriptor(propertyDescriptor); StackValue.Property iValue = - intermediateValueForProperty(propertyDescriptor, directToField, isSuper ? (JetSuperExpression) r : null); - if (!directToField && resolvedCall != null && !isSuper) { - receiver.put(propertyDescriptor.getReceiverParameter() != null || isStatic - ? receiver.type - : iValue.methodOwner.getAsmType(), v); - } - else { - if (!isStatic) { - if (receiver == StackValue.none()) { - if (resolvedCall != null && resolvedCall.getThisObject() instanceof ExtensionReceiver) { - receiver = generateReceiver(((ExtensionReceiver) resolvedCall.getThisObject()).getDeclarationDescriptor()); - } - else { - receiver = generateThisOrOuter((ClassDescriptor) propertyDescriptor.getContainingDeclaration(), false); - } - } - if (directToField) { - receiver = StackValue.receiverWithoutReceiverArgument(receiver); - } - JetType receiverType = bindingContext.get(BindingContext.EXPRESSION_TYPE, r); - receiver.put(receiverType != null && !isSuper ? asmType(receiverType) : OBJECT_TYPE, v); - if (receiverType != null) { - ClassDescriptor propReceiverDescriptor = (ClassDescriptor) propertyDescriptor.getContainingDeclaration(); - if (!isInterface(propReceiverDescriptor) && - isInterface(receiverType.getConstructor().getDeclarationDescriptor())) { - v.checkcast(asmType(propReceiverDescriptor.getDefaultType())); - } - } - } + intermediateValueForProperty(propertyDescriptor, directToField, isSuper ? (JetSuperExpression) r : null); + if (directToField) { + receiver = StackValue.receiverWithoutReceiverArgument(receiver); } + receiver.put(receiver.type, v); + return iValue; } diff --git a/compiler/testData/codegen/box/properties/generalAccess.kt b/compiler/testData/codegen/box/properties/generalAccess.kt new file mode 100644 index 00000000000..ccb206e0a84 --- /dev/null +++ b/compiler/testData/codegen/box/properties/generalAccess.kt @@ -0,0 +1,54 @@ +package As + +val staticProperty : String = "1" + +val String.staticExt = "1" + +open class A(val init: String) { + + open val property : String = init + + private val privateProperty : String = init + + val String.ext = "1" + + val Int.myInc : Int + get() = this + 1 + + open fun getPrivate() : String { + return privateProperty; + } + + open fun getExt() : String { + return "0".ext; + } + + public var backingField : Int = 0 + get() = $backingField.myInc + set(s) = $backingField = s + +} + +open class B(init: String) : A("1") { + + override val property: String = init + + fun getOpenProperty(): String { + return super.property + } + + fun getWithBackingFieldProperty(): String { + return $property + } +} + +fun box() : String { + val a = A("1"); + val b = B("0"); + a.backingField = 0 + val result = a.property + a.getPrivate() + staticProperty + "0".staticExt + a.getExt() + + a.backingField + a.backingField + + b.getOpenProperty() + b.property + b.getWithBackingFieldProperty() + + return if (result == "1111111100") "OK" else "fail" +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java index 9cc379d47e8..6a144bb74b3 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -3053,6 +3053,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/codegen/box/properties"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("generalAccess.kt") + public void testGeneralAccess() throws Exception { + doTest("compiler/testData/codegen/box/properties/generalAccess.kt"); + } + @TestMetadata("kt1159.kt") public void testKt1159() throws Exception { doTest("compiler/testData/codegen/box/properties/kt1159.kt");