From 71b1eac050115fecfc6f0f11e97ed1f71e9e0847 Mon Sep 17 00:00:00 2001 From: Pavel Talanov Date: Thu, 8 Dec 2011 17:14:14 +0400 Subject: [PATCH] arrayList simple test. --- .../k2js/translate/context/Declarations.java | 6 ++--- .../translate/context/StandardClasses.java | 5 ++-- .../translate/context/TranslationContext.java | 27 ++++++++++++++++--- .../translate/utils/TranslationUtils.java | 26 +++++------------- translator/testFiles/kotlin_lib.js | 16 +++++------ 5 files changed, 44 insertions(+), 36 deletions(-) diff --git a/translator/src/org/jetbrains/k2js/translate/context/Declarations.java b/translator/src/org/jetbrains/k2js/translate/context/Declarations.java index a12b36d5e76..66aee80a1fd 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/Declarations.java +++ b/translator/src/org/jetbrains/k2js/translate/context/Declarations.java @@ -50,7 +50,7 @@ public final class Declarations { } @NotNull - public NamingScope getScope(@NotNull DeclarationDescriptor descriptor) { + /*package*/ NamingScope getScope(@NotNull DeclarationDescriptor descriptor) { NamingScope scope = descriptorToScopeMap.get(descriptor.getOriginal()); assert scope != null : "Unknown declaration"; return scope; @@ -67,12 +67,12 @@ public final class Declarations { return descriptorToNameMap.containsKey(descriptor.getOriginal()); } - public boolean hasQualifier(@NotNull DeclarationDescriptor descriptor) { + /*package*/ boolean hasQualifier(@NotNull DeclarationDescriptor descriptor) { return (descriptorToQualifierMap.get(descriptor.getOriginal()) != null); } @NotNull - public JsNameRef getQualifier(@NotNull DeclarationDescriptor descriptor) { + /*package*/ JsNameRef getQualifier(@NotNull DeclarationDescriptor descriptor) { JsNameRef qualifier = descriptorToQualifierMap.get(descriptor.getOriginal()); assert qualifier != null : "Cannot be null. Use hasQualifier to check."; return qualifier; diff --git a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java index 4a9a10ef29b..8dd072dcf16 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java +++ b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java @@ -92,13 +92,14 @@ public final class StandardClasses { private void declareStandardMethodOrProperty(@NotNull DeclarationDescriptor descriptor, @NotNull String kotlinLibName) { String containingFQName = getFQName(getContainingDeclaration(descriptor)); - declareStandardInnerDeclaration(containingFQName, getFQName(descriptor), kotlinLibName); + declareStandardInnerDeclaration(containingFQName, descriptor.getName(), kotlinLibName); } private void declareStandardInnerDeclaration(@NotNull String fullQualifiedClassName, - @NotNull String fullQualifiedMethodName, + @NotNull String shortMethodName, @NotNull String kotlinLibName) { JsScope classScope = scopeMap.get(fullQualifiedClassName); + String fullQualifiedMethodName = fullQualifiedClassName + "." + shortMethodName; nameMap.put(fullQualifiedMethodName, classScope.declareName(kotlinLibName)); } diff --git a/translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java b/translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java index be42019b695..51dc1de400c 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java +++ b/translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java @@ -96,8 +96,8 @@ public final class TranslationContext { if (aliaser().hasAliasForDeclaration(descriptor)) { return aliaser().getAliasForDeclaration(descriptor); } - if (staticContext.getStandardClasses().isStandardObject(descriptor)) { - return staticContext.getStandardClasses().getStandardObjectName(descriptor); + if (standardClasses().isStandardObject(descriptor)) { + return standardClasses().getStandardObjectName(descriptor); } if (dynamicContext.isDeclared(descriptor)) { return dynamicContext.getLocalName(descriptor); @@ -108,6 +108,20 @@ public final class TranslationContext { throw new AssertionError("Undefined descriptor: " + DescriptorRenderer.getFQName(descriptor)); } + @NotNull + public JsNameRef getQualifierForDescriptor(@NotNull DeclarationDescriptor descriptor) { + if (standardClasses().isStandardObject(descriptor)) { + return namer().kotlinObject(); + } + return declarations().getQualifier(descriptor); + } + + + public boolean hasQualifierForDescriptor(@NotNull DeclarationDescriptor descriptor) { + return (declarations().hasQualifier(descriptor) || + standardClasses().isStandardObject(descriptor)); + } + @NotNull public JsName getNameForElement(@NotNull JetElement element) { DeclarationDescriptor descriptor = BindingUtils.getDescriptorForElement(bindingContext(), element); @@ -123,12 +137,12 @@ public final class TranslationContext { } public boolean isStandardObject(@NotNull DeclarationDescriptor descriptor) { - return staticContext.getStandardClasses().isStandardObject(descriptor); + return standardClasses().isStandardObject(descriptor); } @NotNull public JsName getNameForStandardObject(@NotNull DeclarationDescriptor descriptor) { - return staticContext.getStandardClasses().getStandardObjectName(descriptor); + return standardClasses().getStandardObjectName(descriptor); } @NotNull @@ -184,6 +198,11 @@ public final class TranslationContext { return staticContext.getProgram(); } + @NotNull + private StandardClasses standardClasses() { + return staticContext.getStandardClasses(); + } + @NotNull public JsScope jsScope() { return dynamicContext.jsScope(); diff --git a/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java b/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java index 60382849dcb..5b5f5c907d6 100644 --- a/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java +++ b/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java @@ -72,7 +72,7 @@ public final class TranslationUtils { } assert BindingUtils.isOwnedByNamespace(descriptor) : "Only classes and namespaces may own backing fields."; - JsNameRef qualifier = context.declarations().getQualifier(descriptor); + JsNameRef qualifier = context.getQualifierForDescriptor(descriptor); return AstUtil.qualified(backingFieldName, qualifier); } @@ -95,29 +95,18 @@ public final class TranslationUtils { return AstUtil.newAssignmentStatement(backingFieldReference, parameter.getName().makeRef()); } - - public static boolean hasQualifier(@NotNull TranslationContext context, @NotNull DeclarationDescriptor descriptor) { - return context.declarations().hasQualifier(descriptor); - } - @NotNull public static JsNameRef getQualifiedReference(@NotNull TranslationContext context, @NotNull DeclarationDescriptor descriptor) { JsName name = context.declarations().getName(descriptor); JsNameRef reference = name.makeRef(); - if (hasQualifier(context, descriptor)) { - JsNameRef qualifier = getQualifier(context, descriptor); + if (context.hasQualifierForDescriptor(descriptor)) { + JsNameRef qualifier = context.getQualifierForDescriptor(descriptor); AstUtil.setQualifier(reference, qualifier); } return reference; } - @NotNull - private static JsNameRef getQualifier(@NotNull TranslationContext context, - @NotNull DeclarationDescriptor descriptor) { - return context.declarations().getQualifier(descriptor); - } - @NotNull public static JsNameRef getThisQualifiedNameReference(@NotNull TranslationContext context, @NotNull JsName name) { @@ -211,13 +200,12 @@ public final class TranslationUtils { @Nullable public static JsExpression getImplicitReceiver(@NotNull TranslationContext context, @NotNull DeclarationDescriptor referencedDescriptor) { - if (!context.isDeclared(referencedDescriptor)) return null; - if (BindingUtils.isOwnedByClass(referencedDescriptor)) { return TranslationUtils.getThisQualifier(context); } - if (!BindingUtils.isOwnedByNamespace(referencedDescriptor)) return null; - - return context.declarations().getQualifier(referencedDescriptor); + if (BindingUtils.isOwnedByNamespace(referencedDescriptor)) { + return context.getQualifierForDescriptor(referencedDescriptor); + } + return null; } } diff --git a/translator/testFiles/kotlin_lib.js b/translator/testFiles/kotlin_lib.js index b92c6af725f..2504235b1d5 100644 --- a/translator/testFiles/kotlin_lib.js +++ b/translator/testFiles/kotlin_lib.js @@ -486,31 +486,31 @@ Kotlin.Array = Class.create({ Kotlin.ArrayList = Class.create({ initialize:function (len) { this.array = []; - this.size = 0; + this.$size = 0; }, get:function (index) { - if ((index < 0) || (index > this.size)) { + if ((index < 0) || (index > this.$size)) { throw Kotlin.Exceptions.IndexOutOfBounds; } return (this.array)[index]; }, set:function (index, value) { - if ((index < 0) || (index > this.size)) { + if ((index < 0) || (index > this.$size)) { throw Kotlin.Exceptions.IndexOutOfBounds; } (this.array)[index] = value; }, size:function () { - return this.size; + return this.$size; }, iterator:function () { return new Kotlin.ArrayIterator(this); }, isEmpty:function () { - return (this.size == 0); + return (this.$size == 0); }, add:function (element) { - this.array[size++] = element; + this.array[this.$size++] = element; }, addAll:function (collection) { var it = collection.iterator(); @@ -519,10 +519,10 @@ Kotlin.ArrayList = Class.create({ } }, remove:function (index) { - for (var i = index; i < this.size - 1; ++i) { + for (var i = index; i < this.$size - 1; ++i) { this.array[i] = this.array[i + 1]; } - this.size--; + this.$size--; } });