diff --git a/idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java b/idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java index e6bf519b2a7..76e9ba00b31 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java @@ -57,11 +57,11 @@ public class ClassDescriptorResolver { } if (declaration instanceof JetProperty) { JetProperty property = (JetProperty) declaration; - // TODO : Caution: a cyclic dependency possible if (property.getPropertyTypeRef() != null) { - return resolvePropertyDescriptor(JetScope.EMPTY, property); + return resolvePropertyDescriptor(outerScope, property); } else { + // TODO : Caution: a cyclic dependency possible throw new UnsupportedOperationException(); } } diff --git a/idea/src/org/jetbrains/jet/lang/resolve/TypeResolver.java b/idea/src/org/jetbrains/jet/lang/resolve/TypeResolver.java index 49a21cbcd2f..13a5a7fbb68 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/TypeResolver.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/TypeResolver.java @@ -41,7 +41,7 @@ public class TypeResolver { typeConstructor, nullable, resolveTypeProjections(scope, typeConstructor, type.getTypeArguments()), - JetStandardClasses.STUB + classDescriptor.getMemberDomain() ); } else if (type.getTypeArguments().isEmpty()) { @@ -52,6 +52,7 @@ public class TypeResolver { typeParameterDescriptor.getTypeConstructor(), nullable || hasNullableBound(typeParameterDescriptor), Collections.emptyList(), + // TODO : joint domain JetStandardClasses.STUB ); } diff --git a/idea/src/org/jetbrains/jet/lang/types/JetTypeChecker.java b/idea/src/org/jetbrains/jet/lang/types/JetTypeChecker.java index 844e61e94a2..92d33bb6001 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetTypeChecker.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetTypeChecker.java @@ -255,6 +255,13 @@ public class JetTypeChecker { result[0] = JetStandardClasses.getUnitType(); } + @Override + public void visitNewExpression(JetNewExpression expression) { + // TODO : type argument inference + JetTypeReference typeReference = expression.getTypeReference(); + result[0] = TypeResolver.INSTANCE.resolveType(scope, typeReference); + } + @Override public void visitDotQualifiedExpression(JetDotQualifiedExpression expression) { JetExpression receiverExpression = expression.getReceiverExpression(); diff --git a/idea/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java b/idea/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java index 24a837ec224..4c20091a261 100644 --- a/idea/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java +++ b/idea/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java @@ -304,7 +304,15 @@ public class JetTypeCheckerTest extends LightDaemonAnalyzerTestCase { assertType("if (1) {() => val a = 1; a; var b = a; b} else null", "Function0?"); } -// public void testImplicitConversions() throws Exception { + public void testNew() throws Exception { + assertType("new Base_T()", "Base_T"); + } + + public void testPropertiesInClasses() throws Exception { + assertType("new Properties().p", "Int"); + } + + // public void testImplicitConversions() throws Exception { // assertConvertibleTo("1", JetStandardClasses.getByteType()); // } // @@ -399,6 +407,7 @@ public class JetTypeCheckerTest extends LightDaemonAnalyzerTestCase { "open class Derived_inT : Base_inT", "open class Base_outT", "open class Derived_outT : Base_outT", + "class Properties { val p : Int }" }; public static JetScope BASIC_SCOPE = new JetScopeAdapter(JetStandardClasses.STANDARD_CLASSES) {