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);
|
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")
|
@TestMetadata("multipleReferences.kt")
|
||||||
public void testMultipleReferences() throws Exception {
|
public void testMultipleReferences() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/multipleReferences.kt");
|
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) {
|
if (TranslationUtils.shouldAccessViaFunctions(descriptor) || descriptor.isExtensionProperty) {
|
||||||
addFunction(descriptor.getter!!, getterExpr)
|
addFunction(descriptor.getter!!, getterExpr, expression.getter ?: expression)
|
||||||
descriptor.setter?.let { addFunction(it, setterExpr!!) }
|
descriptor.setter?.let { addFunction(it, setterExpr!!, expression.setter ?: expression) }
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
addProperty(descriptor, getterExpr, setterExpr)
|
addProperty(descriptor, getterExpr, setterExpr)
|
||||||
@@ -87,7 +87,7 @@ abstract class AbstractDeclarationVisitor : TranslatorVisitor<Unit>() {
|
|||||||
override fun visitNamedFunction(expression: KtNamedFunction, context: TranslationContext) {
|
override fun visitNamedFunction(expression: KtNamedFunction, context: TranslationContext) {
|
||||||
val descriptor = BindingUtils.getFunctionDescriptor(context.bindingContext(), expression)
|
val descriptor = BindingUtils.getFunctionDescriptor(context.bindingContext(), expression)
|
||||||
val jsFunction = if (descriptor.modality != Modality.ABSTRACT) translateFunction(descriptor, expression, context) else null
|
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?) {}
|
override fun visitTypeAlias(typeAlias: KtTypeAlias, data: TranslationContext?) {}
|
||||||
@@ -115,7 +115,8 @@ abstract class AbstractDeclarationVisitor : TranslatorVisitor<Unit>() {
|
|||||||
|
|
||||||
protected abstract fun addFunction(
|
protected abstract fun addFunction(
|
||||||
descriptor: FunctionDescriptor,
|
descriptor: FunctionDescriptor,
|
||||||
expression: JsExpression?
|
expression: JsExpression?,
|
||||||
|
psi: KtElement
|
||||||
)
|
)
|
||||||
|
|
||||||
protected abstract fun addProperty(
|
protected abstract fun addProperty(
|
||||||
|
|||||||
+5
-5
@@ -97,7 +97,7 @@ class DeclarationBodyVisitor(
|
|||||||
initializerStatements.add(statement)
|
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 (!descriptor.hasOrInheritsParametersWithDefaultValue() || !descriptor.isOverridableOrOverrides) {
|
||||||
if (expression != null) {
|
if (expression != null) {
|
||||||
context.addDeclarationStatement(context.addFunctionToPrototype(containingClass, descriptor, expression))
|
context.addDeclarationStatement(context.addFunctionToPrototype(containingClass, descriptor, expression))
|
||||||
@@ -120,11 +120,11 @@ class DeclarationBodyVisitor(
|
|||||||
.innerBlock(caller.body)
|
.innerBlock(caller.body)
|
||||||
|
|
||||||
val callbackName = JsScope.declareTemporaryName("callback" + Namer.DEFAULT_PARAMETER_IMPLEMENTOR_SUFFIX)
|
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 defaultInvocation = JsInvocation(callee, listOf<JsExpression>()).apply { source = psi }
|
||||||
val callbackInvocation = JsInvocation(callbackName.makeRef())
|
val callbackInvocation = JsInvocation(callbackName.makeRef()).apply { source = psi }
|
||||||
val chosenInvocation = JsConditional(callbackName.makeRef(), callbackInvocation, defaultInvocation)
|
val chosenInvocation = JsConditional(callbackName.makeRef(), callbackInvocation, defaultInvocation).source(psi)
|
||||||
defaultInvocation.arguments += caller.parameters.map { it.name.makeRef() }
|
defaultInvocation.arguments += caller.parameters.map { it.name.makeRef() }
|
||||||
callbackInvocation.arguments += defaultInvocation.arguments.map { it.deepCopy() }
|
callbackInvocation.arguments += defaultInvocation.arguments.map { it.deepCopy() }
|
||||||
caller.parameters.add(JsParameter(callbackName))
|
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.BindingUtils
|
||||||
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils
|
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils
|
||||||
import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils
|
import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils
|
||||||
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import org.jetbrains.kotlin.psi.KtProperty
|
import org.jetbrains.kotlin.psi.KtProperty
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
|
|
||||||
@@ -44,7 +45,7 @@ class FileDeclarationVisitor(private val context: TranslationContext) : Abstract
|
|||||||
super.visitProperty(expression, context)
|
super.visitProperty(expression, context)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun addFunction(descriptor: FunctionDescriptor, expression: JsExpression?) {
|
override fun addFunction(descriptor: FunctionDescriptor, expression: JsExpression?, psi: KtElement) {
|
||||||
if (expression == null) return
|
if (expression == null) return
|
||||||
addFunctionButNotExport(descriptor, expression)
|
addFunctionButNotExport(descriptor, expression)
|
||||||
context.export(descriptor)
|
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