JS backend: Fix tracked used descriptors
This commit is contained in:
@@ -72,4 +72,16 @@ public final class ClosureTest extends SingleFileTranslationTest {
|
|||||||
public void testClosureThisInConstructor() throws Exception {
|
public void testClosureThisInConstructor() throws Exception {
|
||||||
checkFooBoxIsOk();
|
checkFooBoxIsOk();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testClosureFunctionAsArgument() throws Exception {
|
||||||
|
checkFooBoxIsOk();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testClosureLocalFunction() throws Exception {
|
||||||
|
checkFooBoxIsOk();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testClosureLocalLiteralFunction() throws Exception {
|
||||||
|
checkFooBoxIsOk();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -164,7 +164,6 @@ public final class StaticContext {
|
|||||||
packageFqName.isRoot() ? null : getQualifierForParentPackage(packageFqName.parent()));
|
packageFqName.isRoot() ? null : getQualifierForParentPackage(packageFqName.parent()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: usage tracker
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public JsName getNameForDescriptor(@NotNull DeclarationDescriptor descriptor) {
|
public JsName getNameForDescriptor(@NotNull DeclarationDescriptor descriptor) {
|
||||||
JsName name = names.get(descriptor.getOriginal());
|
JsName name = names.get(descriptor.getOriginal());
|
||||||
|
|||||||
@@ -171,6 +171,7 @@ public class TranslationContext {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public JsName getNameForDescriptor(@NotNull DeclarationDescriptor descriptor) {
|
public JsName getNameForDescriptor(@NotNull DeclarationDescriptor descriptor) {
|
||||||
|
descriptorUsedInThisContext(descriptor); // TODO drop this
|
||||||
return staticContext.getNameForDescriptor(descriptor);
|
return staticContext.getNameForDescriptor(descriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,6 +187,7 @@ public class TranslationContext {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public JsNameRef getQualifiedReference(@NotNull DeclarationDescriptor descriptor) {
|
public JsNameRef getQualifiedReference(@NotNull DeclarationDescriptor descriptor) {
|
||||||
|
descriptorUsedInThisContext(descriptor); // TODO drop this
|
||||||
return staticContext.getQualifiedReference(descriptor);
|
return staticContext.getQualifiedReference(descriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -261,9 +263,7 @@ public class TranslationContext {
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public JsExpression getAliasForDescriptor(@NotNull DeclarationDescriptor descriptor) {
|
public JsExpression getAliasForDescriptor(@NotNull DeclarationDescriptor descriptor) {
|
||||||
if (usageTracker != null) {
|
descriptorUsedInThisContext(descriptor);
|
||||||
usageTracker.triggerUsed(descriptor);
|
|
||||||
}
|
|
||||||
return aliasingContext.getAliasForDescriptor(descriptor);
|
return aliasingContext.getAliasForDescriptor(descriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,9 +278,7 @@ public class TranslationContext {
|
|||||||
effectiveDescriptor = descriptor;
|
effectiveDescriptor = descriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (usageTracker != null) {
|
descriptorUsedInThisContext(effectiveDescriptor);
|
||||||
usageTracker.triggerUsed(effectiveDescriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
JsExpression alias = aliasingContext.getAliasForDescriptor(effectiveDescriptor);
|
JsExpression alias = aliasingContext.getAliasForDescriptor(effectiveDescriptor);
|
||||||
return alias == null ? JsLiteral.THIS : alias;
|
return alias == null ? JsLiteral.THIS : alias;
|
||||||
@@ -297,4 +295,10 @@ public class TranslationContext {
|
|||||||
public JsNameRef define(String name, JsExpression expression) {
|
public JsNameRef define(String name, JsExpression expression) {
|
||||||
return getDefinitionPlace().define(name, expression);
|
return getDefinitionPlace().define(name, expression);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void descriptorUsedInThisContext(DeclarationDescriptor effectiveDescriptor) {
|
||||||
|
if (usageTracker != null) {
|
||||||
|
usageTracker.triggerUsed(effectiveDescriptor);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package foo
|
||||||
|
|
||||||
|
fun test(f: () -> String): String {
|
||||||
|
val funLit = { f() }
|
||||||
|
return funLit()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
return test { "OK" }
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package foo
|
||||||
|
|
||||||
|
fun test(): String {
|
||||||
|
fun f(): String = "OK"
|
||||||
|
|
||||||
|
val funLit = { f() }
|
||||||
|
return funLit()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
return test()
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package foo
|
||||||
|
|
||||||
|
val k = {"K"}
|
||||||
|
|
||||||
|
fun test(): String {
|
||||||
|
val o = {"O"}
|
||||||
|
|
||||||
|
val funLit = { o() + k() }
|
||||||
|
return funLit()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
return test()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user