diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/utils/CallCounter.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/utils/CallCounter.java index 9f88fc7152d..c48443c73b4 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/utils/CallCounter.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/utils/CallCounter.java @@ -19,23 +19,31 @@ package org.jetbrains.kotlin.js.test.utils; import com.google.dart.compiler.backend.js.ast.*; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; public class CallCounter extends RecursiveJsVisitor { private final List callsNameRefs = new ArrayList(); + @NotNull + private final Set exceptFunctionNames; + @NotNull public static CallCounter countCalls(@NotNull JsNode node) { - CallCounter visitor = new CallCounter(); + return countCalls(node, Collections.emptySet()); + } + + @NotNull + public static CallCounter countCalls(@NotNull JsNode node, @NotNull Set exceptFunctionNames) { + CallCounter visitor = new CallCounter(new HashSet(exceptFunctionNames)); node.accept(visitor); return visitor; } - CallCounter() {} + CallCounter(@NotNull Set exceptFunctionNames) { + this.exceptFunctionNames = exceptFunctionNames; + } public int getTotalCallsCount() { return callsNameRefs.size(); @@ -61,7 +69,10 @@ public class CallCounter extends RecursiveJsVisitor { JsExpression qualifier = invocation.getQualifier(); if (qualifier instanceof JsNameRef) { - callsNameRefs.add((JsNameRef) qualifier); + JsNameRef nameRef = (JsNameRef) qualifier; + if (!exceptFunctionNames.contains(nameRef.getIdent())) { + callsNameRefs.add(nameRef); + } } } diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/utils/DirectiveTestUtils.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/utils/DirectiveTestUtils.java index b23f6fd854e..e69ced2ccd3 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/utils/DirectiveTestUtils.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/utils/DirectiveTestUtils.java @@ -34,7 +34,15 @@ public class DirectiveTestUtils { private static final DirectiveHandler FUNCTION_CONTAINS_NO_CALLS = new DirectiveHandler("CHECK_CONTAINS_NO_CALLS") { @Override void processEntry(@NotNull JsNode ast, @NotNull ArgumentsHelper arguments) throws Exception { - checkFunctionContainsNoCalls(ast, arguments.getFirst()); + Set exceptNames = new HashSet(); + String exceptNamesArg = arguments.findNamedArgument("except"); + if (exceptNamesArg != null) { + for (String exceptName : exceptNamesArg.split(";")) { + exceptNames.add(exceptName.trim()); + } + } + + checkFunctionContainsNoCalls(ast, arguments.getFirst(), exceptNames); } }; @@ -179,9 +187,10 @@ public class DirectiveTestUtils { } } - public static void checkFunctionContainsNoCalls(JsNode node, String functionName) throws Exception { + public static void checkFunctionContainsNoCalls(JsNode node, String functionName, @NotNull Set exceptFunctionNames) + throws Exception { JsFunction function = AstSearchUtil.getFunction(node, functionName); - CallCounter counter = CallCounter.countCalls(function); + CallCounter counter = CallCounter.countCalls(function, exceptFunctionNames); int callsCount = counter.getTotalCallsCount(); String errorMessage = functionName + " contains calls"; diff --git a/js/js.translator/testData/inline/cases/vararg.kt b/js/js.translator/testData/inline/cases/vararg.kt index d5a9a5afbb1..66bd5652acc 100644 --- a/js/js.translator/testData/inline/cases/vararg.kt +++ b/js/js.translator/testData/inline/cases/vararg.kt @@ -3,7 +3,7 @@ package foo // CHECK_CONTAINS_NO_CALLS: test1 // CHECK_CONTAINS_NO_CALLS: test2 -// CHECK_CONTAINS_NO_CALLS: test3 +// CHECK_CONTAINS_NO_CALLS: test3 except=slice internal inline fun concat(vararg strings: String): String { var result = ""