diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 12832349811..6ab1399ba54 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -16,6 +16,8 @@ + + @@ -189,25 +191,13 @@ - + - - - - - - - - - - - - - + @@ -258,10 +248,10 @@ - + - + @@ -270,7 +260,16 @@ - + + + + + + + + + + @@ -289,10 +288,10 @@ - + - + @@ -316,19 +315,28 @@ - + - + - - + + + + + + + + + + + @@ -347,15 +355,6 @@ - - - - - - - - - @@ -407,7 +406,6 @@ @@ -690,6 +689,58 @@ - - - - - - - - - - - - - - + @@ -986,6 +1010,29 @@ + + + + + + + + + + @@ -1313,55 +1360,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1404,27 +1402,79 @@ - + - - - - - - + + - + - + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java index a17a8d7c041..77df685d7a9 100644 --- a/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java @@ -24,8 +24,7 @@ import static com.google.dart.compiler.util.AstUtil.not; import static org.jetbrains.k2js.translate.utils.BindingUtils.*; import static org.jetbrains.k2js.translate.utils.DescriptorUtils.getVariableDescriptorForVariableAsFunction; import static org.jetbrains.k2js.translate.utils.DescriptorUtils.isConstructorDescriptor; -import static org.jetbrains.k2js.translate.utils.PsiUtils.isInOrNotInOperation; -import static org.jetbrains.k2js.translate.utils.PsiUtils.isNotInOperation; +import static org.jetbrains.k2js.translate.utils.PsiUtils.*; import static org.jetbrains.k2js.translate.utils.TranslationUtils.*; /** @@ -54,6 +53,7 @@ public final class CallTranslator extends AbstractTranslator { return new CallTranslator(receiver, arguments, (FunctionDescriptor) descriptor, context); } + //TODO: method too long @NotNull private CallTranslator buildFromBinary(@NotNull JetBinaryExpression binaryExpression, boolean swapReceiverAndArgument) { @@ -119,16 +119,10 @@ public final class CallTranslator extends AbstractTranslator { @NotNull ValueParameterDescriptor parameterDescriptor, @NotNull TranslationContext context) { ResolvedValueArgument actualArgument = formalToActualArguments.get(parameterDescriptor); if (actualArgument instanceof DefaultValueArgument) { - assert parameterDescriptor.hasDefaultValue() : "Unsupplied parameter must have default value."; - JetParameter psiParameter = getParameterForDescriptor(context.bindingContext(), parameterDescriptor); - JetExpression defaultValue = psiParameter.getDefaultValue(); - assert defaultValue != null : "No default value found in PSI."; - return defaultValue; + return getDefaultArgument(context.bindingContext(), parameterDescriptor); + } else { + return getExpressionArgument(actualArgument); } - List argumentExpressions = actualArgument.getArgumentExpressions(); - assert !argumentExpressions.isEmpty() : "Actual arguments must be supplied."; - assert argumentExpressions.size() == 1 : "Varargs not supported."; - return argumentExpressions.get(0); } } diff --git a/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java b/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java index 9b5513a31d6..e03ca37cbbc 100644 --- a/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java +++ b/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java @@ -288,4 +288,14 @@ public final class BindingUtils { return null; } + @NotNull + public static JetExpression getDefaultArgument(@NotNull BindingContext context, + @NotNull ValueParameterDescriptor parameterDescriptor) { + assert parameterDescriptor.hasDefaultValue() : "Unsupplied parameter must have default value."; + JetParameter psiParameter = getParameterForDescriptor(context, parameterDescriptor); + JetExpression defaultValue = psiParameter.getDefaultValue(); + assert defaultValue != null : "No default value found in PSI."; + return defaultValue; + } + } diff --git a/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java b/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java index 2da16e22b91..433fd6b4137 100644 --- a/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java +++ b/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java @@ -4,9 +4,12 @@ import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.*; +import org.jetbrains.jet.lang.resolve.calls.ResolvedValueArgument; import org.jetbrains.jet.lexer.JetToken; import org.jetbrains.jet.lexer.JetTokens; +import java.util.List; + /** * @author Pavel Talanov */ @@ -84,4 +87,12 @@ public final class PsiUtils { assert loopParameter != null; return loopParameter; } + + @NotNull + public static JetExpression getExpressionArgument(@NotNull ResolvedValueArgument actualArgument) { + List argumentExpressions = actualArgument.getArgumentExpressions(); + assert !argumentExpressions.isEmpty() : "Actual arguments must be supplied."; + assert argumentExpressions.size() == 1 : "Varargs not supported."; + return argumentExpressions.get(0); + } }