Fix generation of JS source maps for default parameters
(Of open member functions)
This commit is contained in:
@@ -102,6 +102,12 @@ public class JsLineNumberTestGenerated extends AbstractJsLineNumberTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("memberFunWithDefaultParam.kt")
|
||||
public void testMemberFunWithDefaultParam() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/memberFunWithDefaultParam.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("multipleReferences.kt")
|
||||
public void testMultipleReferences() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/multipleReferences.kt");
|
||||
|
||||
+5
-4
@@ -76,8 +76,8 @@ abstract class AbstractDeclarationVisitor : TranslatorVisitor<Unit>() {
|
||||
}
|
||||
|
||||
if (TranslationUtils.shouldAccessViaFunctions(descriptor) || descriptor.isExtensionProperty) {
|
||||
addFunction(descriptor.getter!!, getterExpr)
|
||||
descriptor.setter?.let { addFunction(it, setterExpr!!) }
|
||||
addFunction(descriptor.getter!!, getterExpr, expression.getter ?: expression)
|
||||
descriptor.setter?.let { addFunction(it, setterExpr!!, expression.setter ?: expression) }
|
||||
}
|
||||
else {
|
||||
addProperty(descriptor, getterExpr, setterExpr)
|
||||
@@ -87,7 +87,7 @@ abstract class AbstractDeclarationVisitor : TranslatorVisitor<Unit>() {
|
||||
override fun visitNamedFunction(expression: KtNamedFunction, context: TranslationContext) {
|
||||
val descriptor = BindingUtils.getFunctionDescriptor(context.bindingContext(), expression)
|
||||
val jsFunction = if (descriptor.modality != Modality.ABSTRACT) translateFunction(descriptor, expression, context) else null
|
||||
addFunction(descriptor, jsFunction)
|
||||
addFunction(descriptor, jsFunction, expression)
|
||||
}
|
||||
|
||||
override fun visitTypeAlias(typeAlias: KtTypeAlias, data: TranslationContext?) {}
|
||||
@@ -115,7 +115,8 @@ abstract class AbstractDeclarationVisitor : TranslatorVisitor<Unit>() {
|
||||
|
||||
protected abstract fun addFunction(
|
||||
descriptor: FunctionDescriptor,
|
||||
expression: JsExpression?
|
||||
expression: JsExpression?,
|
||||
psi: KtElement
|
||||
)
|
||||
|
||||
protected abstract fun addProperty(
|
||||
|
||||
+5
-5
@@ -97,7 +97,7 @@ class DeclarationBodyVisitor(
|
||||
initializerStatements.add(statement)
|
||||
}
|
||||
|
||||
override fun addFunction(descriptor: FunctionDescriptor, expression: JsExpression?) {
|
||||
override fun addFunction(descriptor: FunctionDescriptor, expression: JsExpression?, psi: KtElement) {
|
||||
if (!descriptor.hasOrInheritsParametersWithDefaultValue() || !descriptor.isOverridableOrOverrides) {
|
||||
if (expression != null) {
|
||||
context.addDeclarationStatement(context.addFunctionToPrototype(containingClass, descriptor, expression))
|
||||
@@ -120,11 +120,11 @@ class DeclarationBodyVisitor(
|
||||
.innerBlock(caller.body)
|
||||
|
||||
val callbackName = JsScope.declareTemporaryName("callback" + Namer.DEFAULT_PARAMETER_IMPLEMENTOR_SUFFIX)
|
||||
val callee = JsNameRef(bodyName, JsThisRef())
|
||||
val callee = JsNameRef(bodyName, JsThisRef()).source(psi)
|
||||
|
||||
val defaultInvocation = JsInvocation(callee, listOf<JsExpression>())
|
||||
val callbackInvocation = JsInvocation(callbackName.makeRef())
|
||||
val chosenInvocation = JsConditional(callbackName.makeRef(), callbackInvocation, defaultInvocation)
|
||||
val defaultInvocation = JsInvocation(callee, listOf<JsExpression>()).apply { source = psi }
|
||||
val callbackInvocation = JsInvocation(callbackName.makeRef()).apply { source = psi }
|
||||
val chosenInvocation = JsConditional(callbackName.makeRef(), callbackInvocation, defaultInvocation).source(psi)
|
||||
defaultInvocation.arguments += caller.parameters.map { it.name.makeRef() }
|
||||
callbackInvocation.arguments += defaultInvocation.arguments.map { it.deepCopy() }
|
||||
caller.parameters.add(JsParameter(callbackName))
|
||||
|
||||
+2
-1
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.js.translate.context.TranslationContext
|
||||
import org.jetbrains.kotlin.js.translate.utils.BindingUtils
|
||||
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils
|
||||
import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtProperty
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
|
||||
@@ -44,7 +45,7 @@ class FileDeclarationVisitor(private val context: TranslationContext) : Abstract
|
||||
super.visitProperty(expression, context)
|
||||
}
|
||||
|
||||
override fun addFunction(descriptor: FunctionDescriptor, expression: JsExpression?) {
|
||||
override fun addFunction(descriptor: FunctionDescriptor, expression: JsExpression?, psi: KtElement) {
|
||||
if (expression == null) return
|
||||
addFunctionButNotExport(descriptor, expression)
|
||||
context.export(descriptor)
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
open class A {
|
||||
open fun foo(x: Int = 23): Int = x
|
||||
|
||||
fun bar() = 42
|
||||
}
|
||||
|
||||
class B : A() {
|
||||
override fun foo(x: Int): Int {
|
||||
return x * 2
|
||||
}
|
||||
}
|
||||
|
||||
// LINES: 2 * 2 2 2 * 4 * 7 9
|
||||
Reference in New Issue
Block a user