From 035788aeaa11e4050e18fdd3bfa01e613a49d3bb Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Mon, 16 Nov 2020 12:05:32 +0100 Subject: [PATCH] Fix JS regexp tester (WEB-48205) GitOrigin-RevId: f90744bfdaad84bc8a0dada4cc77a5ad0183bd03 --- .../src/org/intellij/lang/regexp/RegExpMatch.java | 6 ++++++ .../ecmascript/EcmaScriptRegExpMatcherProvider.java | 8 +++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpMatch.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpMatch.java index 8197c9f1c232..4576866aaacf 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpMatch.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpMatch.java @@ -11,6 +11,12 @@ public class RegExpMatch { private final IntList groups = new IntArrayList(); + public RegExpMatch() {} + + public RegExpMatch(int start, int end) { + add(start, end); + } + public void add(int start, int end) { groups.add(start); groups.add(end); diff --git a/RegExpSupport/src/org/intellij/lang/regexp/ecmascript/EcmaScriptRegExpMatcherProvider.java b/RegExpSupport/src/org/intellij/lang/regexp/ecmascript/EcmaScriptRegExpMatcherProvider.java index df2dda988720..0f740cfa3f42 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/ecmascript/EcmaScriptRegExpMatcherProvider.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/ecmascript/EcmaScriptRegExpMatcherProvider.java @@ -51,9 +51,11 @@ public class EcmaScriptRegExpMatcherProvider implements RegExpMatcherProvider { "var match;\n" + "\n" + "var RegExpMatch = Java.type(\"org.intellij.lang.regexp.RegExpMatch\");\n" + + "var prev = null;\n" + "while ((match = regexp.exec(str)) !== null) {\n" + - " var r = new RegExpMatch();\n" + - " r.add(match.index, regexp.lastIndex);\n" + + " var r = new RegExpMatch(match.index, regexp.lastIndex);\n" + + " if (r.equals(prev)) break;\n" + + " prev = r;\n" + " result.add(r);\n" + "}\n" + "result"; @@ -61,7 +63,7 @@ public class EcmaScriptRegExpMatcherProvider implements RegExpMatcherProvider { bindings.put("result", new SmartList<>()); @SuppressWarnings("unchecked") final List result = (List)engine.eval(script, bindings); CheckRegExpForm.setMatches(regExpFile, result); - return RegExpMatchResult.FOUND; + return result.isEmpty() ? RegExpMatchResult.NO_MATCH : RegExpMatchResult.FOUND; } catch (Exception e) { return RegExpMatchResult.BAD_REGEXP;