diff --git a/.idea/workspace.xml b/.idea/workspace.xml index aefa13e9d4b..c9874b1aca6 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -6,10 +6,8 @@ - - - + @@ -229,7 +227,7 @@ - + @@ -259,15 +257,15 @@ - + - + - - - + + + @@ -291,10 +289,10 @@ - + - + @@ -331,24 +329,6 @@ - - - - - - - - - - - - - - - - - - @@ -394,10 +374,28 @@ - + - + + + + + + + + + + + + + + + + + + + @@ -442,7 +440,6 @@ @@ -1538,7 +1536,7 @@ - + @@ -1549,7 +1547,7 @@ - + @@ -1592,7 +1590,7 @@ @@ -1639,41 +1637,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1723,18 +1686,6 @@ - - - - - - - - - - - - @@ -1751,11 +1702,58 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java index bef555a5437..0bd0fe66432 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java +++ b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java @@ -13,8 +13,7 @@ import java.util.HashMap; import java.util.Map; import static org.jetbrains.jet.resolve.DescriptorRenderer.getFQName; -import static org.jetbrains.k2js.translate.utils.DescriptorUtils.getFunctionByName; -import static org.jetbrains.k2js.translate.utils.DescriptorUtils.getPropertyByName; +import static org.jetbrains.k2js.translate.utils.DescriptorUtils.*; /** * @author Talanov Pavel @@ -33,7 +32,6 @@ public final class StandardClasses { return standardClasses; } - private static void bindIterator(StandardClasses standardClasses, ClassDescriptor iteratorClass) { standardClasses.declareStandardTopLevelObject(iteratorClass, "ArrayIterator"); @@ -100,35 +98,45 @@ public final class StandardClasses { //TODO: refactor public boolean isStandardObject(@NotNull DeclarationDescriptor descriptor) { - if ((descriptor instanceof ClassDescriptor) || (descriptor instanceof FunctionDescriptor)) { + if (canBeTopLevelObject(descriptor)) { if (topLevelNameMap.containsKey(getFQName(descriptor))) { return true; } } - if ((descriptor instanceof FunctionDescriptor) || (descriptor instanceof PropertyDescriptor)) { - DeclarationDescriptor containing = descriptor.getContainingDeclaration(); - assert containing != null : "Cannot be on top level."; + if (canBeInnerObject(descriptor)) { + DeclarationDescriptor containing = getContainingDeclaration(descriptor); if (!isStandardObject(containing)) { return false; } - Map methodMapForClass = methodNameMap.get(getFQName(containing)); + Map methodMapForClass = methodMapForDescriptor(containing); return methodMapForClass.containsKey(descriptor.getName()); } return false; } + private Map methodMapForDescriptor(DeclarationDescriptor containing) { + return methodNameMap.get(getFQName(containing)); + } + + private boolean canBeInnerObject(DeclarationDescriptor descriptor) { + return (descriptor instanceof FunctionDescriptor) || (descriptor instanceof PropertyDescriptor); + } + + private boolean canBeTopLevelObject(DeclarationDescriptor descriptor) { + return (descriptor instanceof ClassDescriptor) || (descriptor instanceof FunctionDescriptor); + } + @NotNull public JsName getStandardObjectName(@NotNull DeclarationDescriptor descriptor) { - if ((descriptor instanceof ClassDescriptor) || (descriptor instanceof FunctionDescriptor)) { + if (canBeTopLevelObject(descriptor)) { JsName result = topLevelNameMap.get(getFQName(descriptor)); if (result != null) { return result; } } - if ((descriptor instanceof FunctionDescriptor) || (descriptor instanceof PropertyDescriptor)) { - DeclarationDescriptor containing = descriptor.getContainingDeclaration(); - assert containing != null : "Cannot have top level functions."; - Map methodMapForClass = methodNameMap.get(getFQName(containing)); + if (canBeInnerObject(descriptor)) { + DeclarationDescriptor containing = getContainingDeclaration(descriptor); + Map methodMapForClass = methodMapForDescriptor(containing); return methodMapForClass.get(descriptor.getName()); } throw new AssertionError("Only classes and functions can be standard objects."); diff --git a/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java b/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java index 8d0a375da82..46d8a70f1d1 100644 --- a/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java +++ b/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java @@ -110,4 +110,11 @@ public final class DescriptorUtils { public static boolean isVariableDescriptor(@Nullable DeclarationDescriptor referencedDescriptor) { return referencedDescriptor instanceof VariableAsFunctionDescriptor; } + + @NotNull + public static DeclarationDescriptor getContainingDeclaration(@NotNull DeclarationDescriptor descriptor) { + DeclarationDescriptor containing = descriptor.getContainingDeclaration(); + assert containing != null : "Should be called on objects that have containing declaration."; + return containing; + } }