added better error reporting, showing the real location of the kotlin code that causes the problem
This commit is contained in:
@@ -19,9 +19,13 @@ package org.jetbrains.k2js.translate.reference;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.dart.compiler.backend.js.ast.*;
|
import com.google.dart.compiler.backend.js.ast.*;
|
||||||
import com.google.dart.compiler.util.AstUtil;
|
import com.google.dart.compiler.util.AstUtil;
|
||||||
|
import com.intellij.lang.ASTNode;
|
||||||
|
import com.intellij.psi.PsiElement;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
|
import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils;
|
||||||
|
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.ExpressionAsFunctionDescriptor;
|
import org.jetbrains.jet.lang.resolve.calls.ExpressionAsFunctionDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.ResolvedCall;
|
import org.jetbrains.jet.lang.resolve.calls.ResolvedCall;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.VariableAsFunctionResolvedCall;
|
import org.jetbrains.jet.lang.resolve.calls.VariableAsFunctionResolvedCall;
|
||||||
@@ -124,8 +128,24 @@ public final class CallTranslator extends AbstractTranslator {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private JsExpression intrinsicInvocation() {
|
private JsExpression intrinsicInvocation() {
|
||||||
assert descriptor instanceof FunctionDescriptor;
|
assert descriptor instanceof FunctionDescriptor;
|
||||||
Intrinsic intrinsic = context().intrinsics().getFunctionIntrinsic((FunctionDescriptor) descriptor);
|
try {
|
||||||
return intrinsic.apply(callParameters.getThisOrReceiverOrNull(), arguments, context());
|
Intrinsic intrinsic = context().intrinsics().getFunctionIntrinsic((FunctionDescriptor) descriptor);
|
||||||
|
return intrinsic.apply(callParameters.getThisOrReceiverOrNull(), arguments, context());
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
PsiElement element = BindingContextUtils.descriptorToDeclaration(bindingContext(), descriptor);
|
||||||
|
if (element == null) {
|
||||||
|
element = BindingContextUtils.descriptorToDeclaration(bindingContext(), descriptor.getOriginal());
|
||||||
|
}
|
||||||
|
if (element == null && descriptor instanceof ASTNode) {
|
||||||
|
element = DiagnosticUtils.getClosestPsiElement((ASTNode) descriptor);
|
||||||
|
}
|
||||||
|
if (element != null) {
|
||||||
|
String location = DiagnosticUtils.atLocation(element);
|
||||||
|
throw new IllegalStateException(e.getMessage() + " at " + location, e);
|
||||||
|
} else {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isConstructor() {
|
private boolean isConstructor() {
|
||||||
|
|||||||
+14
-1
@@ -17,11 +17,15 @@
|
|||||||
package org.jetbrains.k2js.translate.reference;
|
package org.jetbrains.k2js.translate.reference;
|
||||||
|
|
||||||
import com.google.dart.compiler.backend.js.ast.JsExpression;
|
import com.google.dart.compiler.backend.js.ast.JsExpression;
|
||||||
|
import com.intellij.lang.ASTNode;
|
||||||
|
import com.intellij.psi.PsiElement;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
|
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
|
||||||
import org.jetbrains.k2js.translate.context.TranslationContext;
|
import org.jetbrains.k2js.translate.context.TranslationContext;
|
||||||
|
|
||||||
import static org.jetbrains.k2js.translate.general.Translation.translateAsExpression;
|
import static org.jetbrains.k2js.translate.general.Translation.translateAsExpression;
|
||||||
@@ -68,7 +72,16 @@ public final class QualifiedExpressionTranslator {
|
|||||||
((JetSimpleNameExpression)selector, receiver, callType, context);
|
((JetSimpleNameExpression)selector, receiver, callType, context);
|
||||||
}
|
}
|
||||||
if (selector instanceof JetCallExpression) {
|
if (selector instanceof JetCallExpression) {
|
||||||
return CallExpressionTranslator.translate((JetCallExpression)selector, receiver, callType, context);
|
try {
|
||||||
|
return CallExpressionTranslator.translate((JetCallExpression)selector, receiver, callType, context);
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
if (selector != null) {
|
||||||
|
String location = DiagnosticUtils.atLocation(selector);
|
||||||
|
throw new IllegalStateException(e.getMessage() + " at " + location, e);
|
||||||
|
} else {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//TODO: never get there
|
//TODO: never get there
|
||||||
if (selector instanceof JetSimpleNameExpression) {
|
if (selector instanceof JetSimpleNameExpression) {
|
||||||
|
|||||||
Reference in New Issue
Block a user