Remove hack introduced for in IteratorForTranslator.

This commit is contained in:
Pavel V. Talanov
2012-08-10 20:28:58 +04:00
parent f140f611ed
commit ec905d3892
@@ -21,11 +21,9 @@ import com.intellij.openapi.util.Pair;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.psi.JetForExpression;
import org.jetbrains.k2js.translate.context.Namer;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.general.Translation;
import org.jetbrains.k2js.translate.reference.CallBuilder;
@@ -64,25 +62,7 @@ public final class IteratorForTranslator extends ForTranslator {
@NotNull
private JsExpression hasNextMethodInvocation() {
CallableDescriptor hasNextFunction = getHasNextCallable(bindingContext(), getLoopRange(expression));
if (hasNextFunction instanceof FunctionDescriptor && !isJavaUtilIterator(hasNextFunction)) {
return translateMethodInvocation(iterator.second, hasNextFunction);
}
// develar: I don't know, why hasNext called as function for PropertyDescriptor, our JS side define it as property and all other code translate it as property
JsNameRef hasNext = new JsNameRef(Namer.getNameForAccessor("hasNext", true, context().isEcma5()));
hasNext.setQualifier(iterator.second);
if (context().isEcma5()) {
return hasNext;
}
else {
return new JsInvocation(hasNext);
}
}
// kotlin iterator define hasNext as property, but java util as function, our js side expects as property
private static boolean isJavaUtilIterator(CallableDescriptor descriptor) {
DeclarationDescriptor declaration = descriptor.getContainingDeclaration();
return declaration.getName().getName().equals("Iterator");
return translateMethodInvocation(iterator.second, hasNextFunction);
}
@NotNull