Disallow PropertyMetadataImpl in conventions for delegated properties

This commit is contained in:
Evgeny Gerashchenko
2015-02-19 16:14:37 +03:00
parent 056daeaadb
commit af7eba64f7
6 changed files with 28 additions and 5 deletions
@@ -128,7 +128,8 @@ public class DelegatedPropertyResolver {
return psiFactory.createExpression(builtIns.getPropertyMetadataImpl().getName().asString() +
"(\"" +
propertyDescriptor.getName().asString() +
"\")");
"\"): " +
builtIns.getPropertyMetadata().getName().asString());
}
public void resolveDelegatedPropertyPDMethod(
@@ -0,0 +1,5 @@
val a: Int by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>A()<!>
class A {
fun get(t: Any?, p: PropertyMetadataImpl): Int = 1
}
@@ -0,0 +1,11 @@
package
internal val a: kotlin.Int
internal final class A {
public constructor A()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
internal final fun get(/*0*/ t: kotlin.Any?, /*1*/ p: kotlin.PropertyMetadataImpl): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -3141,6 +3141,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
doTest(fileName);
}
@TestMetadata("disallowImplInTypeParameter.kt")
public void testDisallowImplInTypeParameter() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/delegatedProperty/disallowImplInTypeParameter.kt");
doTest(fileName);
}
@TestMetadata("genericGetter.kt")
public void testGenericGetter() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/delegatedProperty/genericGetter.kt");
@@ -8,12 +8,12 @@ fun format(event: String, property: String, value: Int): String
object LoggerDelegate {
var log = ""
fun get(state: State, desc: PropertyMetadataImpl): Int {
fun get(state: State, desc: PropertyMetadata): Int {
log += format("get", desc.name, state.realValue)
return state.realValue
}
fun set(state: State, desc: PropertyMetadataImpl, value: Int) {
fun set(state: State, desc: PropertyMetadata, value: Int) {
log += format("set", desc.name, value)
state.realValue = value
}
@@ -7,9 +7,9 @@ trait Base {
}
class Delegate(val multiplier: Int) {
fun get(state: State, desc: PropertyMetadataImpl): Int = multiplier * state.value
fun get(state: State, desc: PropertyMetadata): Int = multiplier * state.value
fun set(state: State, desc: PropertyMetadataImpl, value: Int) {
fun set(state: State, desc: PropertyMetadata, value: Int) {
state.value = value / multiplier
}