Merge remote branch 'origin/master'

This commit is contained in:
Andrey Breslav
2011-09-13 17:17:52 +04:00
3 changed files with 41 additions and 4 deletions
@@ -57,7 +57,7 @@ public class JetPropertyAccessor extends JetDeclaration implements JetDeclaratio
@Override
public boolean hasDeclaredReturnType() {
return false;
return true;
}
@NotNull
@@ -544,8 +544,8 @@ public class ClassDescriptorResolver {
type = typeResolver.resolveType(scope, typeReference);
JetType inType = propertyDescriptor.getInType();
if (inType != null) {
if (!semanticServices.getTypeChecker().isSubtypeOf(type, inType)) {
trace.getErrorHandler().genericError(typeReference.getNode(), "Setter parameter type must be a subtype of the type of the property, i.e. " + inType);
if (!semanticServices.getTypeChecker().equalTypes(type, inType)) {
trace.getErrorHandler().genericError(typeReference.getNode(), "Setter parameter type must be equal to the type of the property, i.e. " + inType);
}
}
else {
@@ -579,10 +579,14 @@ public class ClassDescriptorResolver {
if (getter != null) {
List<AnnotationDescriptor> annotations = annotationResolver.resolveAnnotations(scope, getter.getModifierList());
JetType returnType = null;
JetType outType = propertyDescriptor.getOutType();
JetType returnType = outType;
JetTypeReference returnTypeReference = getter.getReturnTypeReference();
if (returnTypeReference != null) {
returnType = typeResolver.resolveType(scope, returnTypeReference);
if (outType != null && !semanticServices.getTypeChecker().equalTypes(returnType, outType)) {
trace.getErrorHandler().genericError(returnTypeReference.getNode(), "Getter return type must be equal to the type of the property, i.e. " + propertyDescriptor.getReturnType());
}
}
getterDescriptor = new PropertyGetterDescriptor(
@@ -0,0 +1,33 @@
class A() {
var x: Int = 0
get() = <error>"s"</error>
set(value: <error>String</error>) {
$x = <error>value</error>
}
val y: Int
get(): <error>String</error> = "s"
val z: Int
get() {
return <error>"s"</error>
}
var a: Any = 1
set(v: <error>String</error>) {
$a = v
}
val b: Int
get(): <error>Any</error> = "s"
val c: Int
get() {
return 1
}
val d = 1
get() {
return $d
}
val e = 1
get(): <error>String</error> {
return <error>$e</error>
}
}