From 3678b343b6465d085dfd25926569fc04d746fffa Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 15 Apr 2011 18:54:25 +0400 Subject: [PATCH] Temporary fix for duplicate key in constructor resolution --- idea/src/jet/lang/Library.jet | 20 +++++++++---------- .../jet/lang/resolve/BindingContext.java | 2 -- .../jet/lang/resolve/BindingTraceContext.java | 20 ++++++++++++------- .../lang/types/DeclarationDescriptorImpl.java | 2 +- idea/testData/codegen/forInArray.jet | 4 ++-- 5 files changed, 26 insertions(+), 22 deletions(-) diff --git a/idea/src/jet/lang/Library.jet b/idea/src/jet/lang/Library.jet index ea0cee780d1..6a8b3d0224b 100644 --- a/idea/src/jet/lang/Library.jet +++ b/idea/src/jet/lang/Library.jet @@ -1,6 +1,15 @@ namespace jet.lang -class Array { +class Iterator { + fun next() : T + val hasNext : Boolean +} + +class Iterable { + fun iterator() : Iterator +} + +class Array : Iterable { fun get(index : Int) : T fun set(index : Int, value : T) : Unit } @@ -34,15 +43,6 @@ class Range> { fun contains(item : T) : Boolean } -class Iterator { - fun next() : T - val hasNext : Boolean -} - -class Iterable { - fun iterator() : Iterator -} - class IntRange : Range, Iterable { } diff --git a/idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java b/idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java index a7c9c9ffe39..ee530abe7d6 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java @@ -14,8 +14,6 @@ public interface BindingContext { FunctionDescriptor getFunctionDescriptor(JetFunction declaration); PropertyDescriptor getPropertyDescriptor(JetProperty declaration); - DeclarationDescriptor getDeclarationDescriptor(JetDeclaration declaration); - JetType getExpressionType(JetExpression expression); JetScope getTopLevelScope(); diff --git a/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java b/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java index 694b4ec2086..7bc55e59a4f 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java @@ -20,6 +20,7 @@ public class BindingTraceContext extends BindingTrace implements BindingContext private final Map types = new HashMap(); private final Map descriptorToDeclarations = new HashMap(); private final Map declarationsToDescriptors = new HashMap(); + private final Map constructorDeclarationsToDescriptors = new HashMap(); private final Set blocks = new HashSet(); private final Set statements = new HashSet(); @@ -54,8 +55,18 @@ public class BindingTraceContext extends BindingTrace implements BindingContext @Override public void recordDeclarationResolution(@NotNull PsiElement declaration, @NotNull DeclarationDescriptor descriptor) { - descriptorToDeclarations.put(descriptor.getOriginal(), declaration); - declarationsToDescriptors.put(declaration, descriptor.getOriginal()); + safePut(descriptorToDeclarations, descriptor.getOriginal(), declaration); + if (descriptor instanceof ConstructorDescriptor) { + safePut(constructorDeclarationsToDescriptors, declaration, (ConstructorDescriptor) descriptor); + } + else { + safePut(declarationsToDescriptors, declaration, descriptor.getOriginal()); + } + } + + private void safePut(Map map, K key, V value) { + V oldValue = map.put(key, value); +// assert oldValue == null || oldValue == value : key + ": " + oldValue + " and " + value; } @Override @@ -75,11 +86,6 @@ public class BindingTraceContext extends BindingTrace implements BindingContext //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - @Override - public DeclarationDescriptor getDeclarationDescriptor(JetDeclaration declaration) { - return declarationsToDescriptors.get(declaration); - } - public NamespaceDescriptor getNamespaceDescriptor(JetNamespace declaration) { return (NamespaceDescriptor) declarationsToDescriptors.get(declaration); } diff --git a/idea/src/org/jetbrains/jet/lang/types/DeclarationDescriptorImpl.java b/idea/src/org/jetbrains/jet/lang/types/DeclarationDescriptorImpl.java index bddb033b8b0..161245cc9b6 100644 --- a/idea/src/org/jetbrains/jet/lang/types/DeclarationDescriptorImpl.java +++ b/idea/src/org/jetbrains/jet/lang/types/DeclarationDescriptorImpl.java @@ -44,6 +44,6 @@ public abstract class DeclarationDescriptorImpl extends AnnotatedImpl implements @Override public String toString() { - return DescriptorUtil.renderPresentableText(this) + "[" + getClass().getCanonicalName()+ "]"; + return DescriptorUtil.renderPresentableText(this) + "[" + getClass().getCanonicalName() + "@" + System.identityHashCode(this) + "]"; } } diff --git a/idea/testData/codegen/forInArray.jet b/idea/testData/codegen/forInArray.jet index 34ea37453db..e6acac23ac5 100644 --- a/idea/testData/codegen/forInArray.jet +++ b/idea/testData/codegen/forInArray.jet @@ -1,7 +1,7 @@ -fun concat(l: Array): String { +fun concat(l: Array): String? { val sb = new StringBuilder() for(s in l) { sb.append(s) } - s.toString() + sb.toString() }