From c84f9cde07acaf3d9275362742507926dc1ee39b Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Fri, 1 Oct 2021 19:16:11 +0300 Subject: [PATCH] [JS] Check the `DECLARES_VARIABLE` directive for all matching functions Not just the first one. --- .../kotlin/js/test/utils/AstSearchUtil.java | 16 +++++++++++++- .../js/test/utils/DirectiveTestUtils.java | 22 +++++++++++-------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/utils/AstSearchUtil.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/utils/AstSearchUtil.java index 0b90e81b006..5048d962f6d 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/utils/AstSearchUtil.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/utils/AstSearchUtil.java @@ -24,18 +24,32 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.js.inline.util.CollectUtilsKt; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import static org.jetbrains.kotlin.js.inline.util.CollectUtilsKt.collectNamedFunctions; public class AstSearchUtil { @NotNull - public static JsFunction getFunction(@NotNull JsNode searchRoot, String name) { + public static JsFunction getFunction(@NotNull JsNode searchRoot, @NotNull String name) { JsFunction function = findByIdent(collectNamedFunctions(searchRoot), name); assert function != null: "Function `" + name + "` was not found"; return function; } + @NotNull + public static List getFunctions(@NotNull JsNode searchRoot, @NotNull String name) { + Map functions = collectNamedFunctions(searchRoot); + assert !functions.isEmpty() : "Function `" + name + "` was not found"; + return functions + .entrySet() + .stream() + .filter(e -> e.getKey().getIdent().equals(name)) + .map(Map.Entry::getValue) + .collect(Collectors.toList()); + } + @NotNull public static JsExpression getMetadataOrFunction(@NotNull JsNode searchRoot, @NotNull String name) { JsExpression property = findByIdent(CollectUtilsKt.collectNamedFunctionsOrMetadata(searchRoot), name); 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 5b74d77e2fd..f1de46fc082 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 @@ -316,17 +316,21 @@ public class DirectiveTestUtils { void processEntry(@NotNull JsNode ast, @NotNull ArgumentsHelper arguments) throws Exception { String functionName = arguments.getNamedArgument("function"); String varName = arguments.getNamedArgument("name"); - JsFunction function = AstSearchUtil.getFunction(ast, functionName); + List functions = AstSearchUtil.getFunctions(ast, functionName); boolean[] varDeclared = new boolean[1]; - function.accept(new RecursiveJsVisitor() { - @Override - public void visit(@NotNull JsVars.JsVar x) { - super.visit(x); - if (x.getName().getIdent().equals(varName)) { - varDeclared[0] = true; + for (JsFunction function : functions) { + function.accept(new RecursiveJsVisitor() { + @Override + public void visit(@NotNull JsVars.JsVar x) { + super.visit(x); + if (x.getName().getIdent().equals(varName)) { + varDeclared[0] = true; + } } - } - }); + }); + if (varDeclared[0]) + break; + } assertTrue("Function " + functionName + " does not declare variable " + varName, varDeclared[0]); }