From c9cba3e1cc01b4aef0e91f7c2cd8eeb5916d3c5b Mon Sep 17 00:00:00 2001 From: svtk Date: Wed, 25 Jan 2012 13:52:56 +0400 Subject: [PATCH] KT-939 CommonSupertypes erases scopes associated to types --- .../jet/lang/types/CommonSupertypes.java | 10 +++++++++- .../diagnostics/tests/scopes/kt939.jet | 20 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/tests/scopes/kt939.jet diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/CommonSupertypes.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/CommonSupertypes.java index 7239cb8752b..f686fe42e78 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/CommonSupertypes.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/CommonSupertypes.java @@ -1,8 +1,11 @@ package org.jetbrains.jet.lang.types; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.descriptors.ClassDescriptor; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; +import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import java.util.*; @@ -153,7 +156,12 @@ public class CommonSupertypes { } // TODO : attributes? - return new JetTypeImpl(Collections.emptyList(), constructor, nullable, newProjections, JetStandardClasses.STUB); // TODO : scope + JetScope newScope = JetStandardClasses.STUB; + DeclarationDescriptor declarationDescriptor = constructor.getDeclarationDescriptor(); + if (declarationDescriptor instanceof ClassDescriptor) { + newScope = ((ClassDescriptor) declarationDescriptor).getMemberScope(newProjections); + } + return new JetTypeImpl(Collections.emptyList(), constructor, nullable, newProjections, newScope); } @NotNull diff --git a/compiler/testData/diagnostics/tests/scopes/kt939.jet b/compiler/testData/diagnostics/tests/scopes/kt939.jet new file mode 100644 index 00000000000..4717a3b4313 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/kt939.jet @@ -0,0 +1,20 @@ +package kt939 + +//+JDK + +//KT-939 CommonSupertypes erases scopes associated to types + +fun compare(o1 : String?, o2 : String?) : Int { + val l1 = o1?.length ?: 0 + val l2 = o2?.length ?: 0 + return l1 - l2 // '-' is unresolved, because the type of l1 is Int with an empty member scope +} + +//KT-1117 Unresolved reference to multiply sign + +fun test() { + (System.getProperty("path.separator")?.length ?: 4) * 55 + 5 + + val x = System.getProperty("path.separator")?.length ?: 4 + x * 55 + 5 +} \ No newline at end of file