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 @@
-
+
@@ -1605,7 +1603,6 @@
-
@@ -1630,6 +1627,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;
+ }
}