automatic conversion of RegExpParseTest to ParsingTestCase
authorBas Leijdekkers <basleijdekkers@gmail.com>
Mon, 27 Jun 2016 16:14:03 +0000 (18:14 +0200)
committerBas Leijdekkers <basleijdekkers@gmail.com>
Tue, 28 Jun 2016 14:26:31 +0000 (16:26 +0200)
272 files changed:
RegExpSupport/test/org/intellij/lang/regexp/RegExpParsingTest.java [new file with mode: 0644]
RegExpSupport/testData/psi/Anchors1.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Anchors10.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Anchors2.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Anchors3.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Anchors4.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Anchors5.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Anchors6.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Anchors7.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Anchors8.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Anchors9.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Backrefs1.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Backrefs2.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Backrefs3.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Backrefs4.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Backrefs5.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Backrefs6.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Backrefs7.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Backrefs8.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Backrefs9.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Bug1.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Bug10.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Bug2.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Bug3.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Bug4.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Bug5.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Bug6.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Bug7.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Bug8.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Bug9.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses1.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses10.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses11.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses12.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses13.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses14.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses15.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses16.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses17.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses18.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses19.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses2.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses20.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses21.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses22.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses23.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses24.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses25.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses26.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses27.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses28.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses29.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses3.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses30.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses31.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses32.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses33.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses34.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses35.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses36.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses37.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses38.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses39.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses4.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses40.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses41.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses42.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses43.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses44.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses45.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses46.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses47.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses48.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses49.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses5.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses50.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses51.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses52.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses53.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses54.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses55.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses56.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses57.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses58.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses59.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses6.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses60.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses61.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses62.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses63.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses64.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses65.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses66.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses67.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses68.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses7.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses8.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Charclasses9.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Complex1.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Complex2.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Complex3.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Complex4.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Complex5.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Complex6.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Complex7.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes1.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes10.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes11.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes12.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes13.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes14.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes15.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes16.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes17.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes18.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes19.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes2.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes20.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes21.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes22.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes23.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes24.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes25.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes3.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes4.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes5.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes6.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes7.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes8.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Escapes9.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups1.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups10.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups11.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups12.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups13.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups14.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups15.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups16.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups17.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups18.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups19.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups2.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups20.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups21.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups22.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups23.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups24.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups25.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups26.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups27.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups28.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups29.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups3.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups30.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups31.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups32.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups33.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups34.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups35.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups4.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups5.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups6.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups7.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups8.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Groups9.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Incomplete1.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Incomplete10.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Incomplete11.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Incomplete12.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Incomplete13.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Incomplete2.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Incomplete3.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Incomplete4.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Incomplete5.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Incomplete6.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Incomplete7.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Incomplete8.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Incomplete9.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Namedchars1.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Namedchars10.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Namedchars2.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Namedchars3.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Namedchars4.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Namedchars5.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Namedchars6.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Namedchars7.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Namedchars8.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Namedchars9.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Options1.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Options2.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Options3.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers1.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers10.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers11.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers12.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers13.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers14.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers15.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers16.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers17.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers18.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers19.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers2.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers20.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers21.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers3.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers4.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers5.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers6.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers7.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers8.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Quantifiers9.txt [new file with mode: 0644]
RegExpSupport/testData/psi/RealLife1.txt [new file with mode: 0644]
RegExpSupport/testData/psi/RealLife10.txt [new file with mode: 0644]
RegExpSupport/testData/psi/RealLife2.txt [new file with mode: 0644]
RegExpSupport/testData/psi/RealLife3.txt [new file with mode: 0644]
RegExpSupport/testData/psi/RealLife4.txt [new file with mode: 0644]
RegExpSupport/testData/psi/RealLife5.txt [new file with mode: 0644]
RegExpSupport/testData/psi/RealLife6.txt [new file with mode: 0644]
RegExpSupport/testData/psi/RealLife7.txt [new file with mode: 0644]
RegExpSupport/testData/psi/RealLife8.txt [new file with mode: 0644]
RegExpSupport/testData/psi/RealLife9.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Regressions1.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Regressions2.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Regressions3.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Regressions4.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple1.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple10.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple11.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple12.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple13.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple14.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple15.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple16.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple17.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple18.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple19.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple2.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple20.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple21.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple22.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple3.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple4.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple5.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple6.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple7.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple8.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Simple9.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests1.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests10.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests11.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests12.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests13.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests14.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests15.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests16.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests17.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests18.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests19.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests2.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests20.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests21.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests22.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests23.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests24.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests3.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests4.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests5.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests6.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests7.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests8.txt [new file with mode: 0644]
RegExpSupport/testData/psi/Tests9.txt [new file with mode: 0644]

diff --git a/RegExpSupport/test/org/intellij/lang/regexp/RegExpParsingTest.java b/RegExpSupport/test/org/intellij/lang/regexp/RegExpParsingTest.java
new file mode 100644 (file)
index 0000000..8aba439
--- /dev/null
@@ -0,0 +1,322 @@
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.intellij.lang.regexp;
+
+import com.intellij.openapi.application.PathManager;
+import com.intellij.testFramework.ParsingTestCase;
+
+import java.io.IOException;
+
+/**
+ * @author Bas Leijdekkers
+ */
+public class RegExpParsingTest extends ParsingTestCase {
+
+  public RegExpParsingTest() {
+    super("psi", "regexp", new RegExpParserDefinition());
+  }
+
+  @Override
+  protected String getTestDataPath() {
+    return PathManager.getHomePath() + "/community/RegExpSupport/testData/";
+  }
+
+  public void testSimple1() throws IOException { doCodeTest("|"); }
+  public void testSimple2() throws IOException { doCodeTest("(|\\$.*)\\.class"); }
+  public void testSimple3() throws IOException { doCodeTest("abc"); }
+  public void testSimple4() throws IOException { doCodeTest("multiple words of text"); }
+  public void testSimple5() throws IOException { doCodeTest("ab|cd"); }
+  public void testSimple6() throws IOException { doCodeTest("a*"); }
+  public void testSimple7() throws IOException { doCodeTest("ab*c"); }
+  public void testSimple8() throws IOException { doCodeTest("ab*bc"); }
+  public void testSimple9() throws IOException { doCodeTest("ab+bc"); }
+  public void testSimple10() throws IOException { doCodeTest("ab?bc"); }
+  public void testSimple11() throws IOException { doCodeTest("ab?c"); }
+  public void testSimple12() throws IOException { doCodeTest("a.c"); }
+  public void testSimple13() throws IOException { doCodeTest("a.*c"); }
+  public void testSimple14() throws IOException { doCodeTest("*a"); }
+  public void testSimple15() throws IOException { doCodeTest(/* fixme */"a<weak_warning descr=\"Single repetition\">{1}</weak_warning>"); }
+  public void testSimple16() throws IOException { doCodeTest("a{}"); }
+  public void testSimple17() throws IOException { doCodeTest("a{"); }
+  public void testSimple18() throws IOException { doCodeTest("a}"); }
+  public void testSimple19() throws IOException { doCodeTest("a{1,}"); }
+  public void testSimple20() throws IOException { doCodeTest("a{1,2}"); }
+  public void testSimple21() throws IOException { doCodeTest("a{1,foo}"); }
+  public void testSimple22() throws IOException { doCodeTest(/* fixme */"<weak_warning descr=\"Redundant character escape\">\\;</weak_warning>"); }
+
+  public void testQuantifiers1() throws IOException { doCodeTest("a?"); }
+  public void testQuantifiers2() throws IOException { doCodeTest("a+"); }
+  public void testQuantifiers3() throws IOException { doCodeTest("a*"); }
+  public void testQuantifiers4() throws IOException { doCodeTest("a??"); }
+  public void testQuantifiers5() throws IOException { doCodeTest("a+?"); }
+  public void testQuantifiers6() throws IOException { doCodeTest("a*?"); }
+  public void testQuantifiers7() throws IOException { doCodeTest("a?+"); }
+  public void testQuantifiers8() throws IOException { doCodeTest("a++"); }
+  public void testQuantifiers9() throws IOException { doCodeTest("a*+"); }
+  public void testQuantifiers10() throws IOException { doCodeTest("a**"); }
+  public void testQuantifiers11() throws IOException { doCodeTest("a{2}"); }
+  public void testQuantifiers12() throws IOException { doCodeTest("a{1,2}"); }
+  public void testQuantifiers13() throws IOException { doCodeTest("a{2,1}"); }
+  public void testQuantifiers14() throws IOException { doCodeTest(/* fixme */"a<weak_warning descr=\"Repetition range replaceable by '?'\">{0,1}</weak_warning>"); }
+  public void testQuantifiers15() throws IOException { doCodeTest(/* fixme */"a<weak_warning descr=\"Repetition range replaceable by '+'\">{1,}</weak_warning>"); }
+  public void testQuantifiers16() throws IOException { doCodeTest(/* fixme */"a<weak_warning descr=\"Repetition range replaceable by '*'\">{0,}</weak_warning>"); }
+  public void testQuantifiers17() throws IOException { doCodeTest(/* fixme */"a<weak_warning descr=\"Single repetition\">{1}</weak_warning>"); }
+  public void testQuantifiers18() throws IOException { doCodeTest(/* fixme */"a<weak_warning descr=\"Fixed repetition range\">{3,3}</weak_warning>"); }
+  public void testQuantifiers19() throws IOException { doCodeTest("a{"); }
+  public void testQuantifiers20() throws IOException { doCodeTest("a}"); }
+  public void testQuantifiers21() throws IOException { doCodeTest("a{}"); }
+
+  public void testCharclasses1() throws IOException { doCodeTest("a[bc]d"); }
+  public void testCharclasses2() throws IOException { doCodeTest("a[b-d]e"); }
+  public void testCharclasses3() throws IOException { doCodeTest("a[b-d]"); }
+  public void testCharclasses4() throws IOException { doCodeTest("a[b-a]"); }
+  public void testCharclasses5() throws IOException { doCodeTest("a[-b]"); }
+  public void testCharclasses6() throws IOException { doCodeTest("a[b-]"); }
+  public void testCharclasses7() throws IOException { doCodeTest("[a-[b]]"); }
+  public void testCharclasses8() throws IOException { doCodeTest("a[b&&[cd]]"); }
+  public void testCharclasses9() throws IOException { doCodeTest("a[b-&&[cd]]"); }
+  public void testCharclasses10() throws IOException { doCodeTest("a[b&&-]"); }
+  public void testCharclasses11() throws IOException { doCodeTest("a[b&&-b]"); }
+  public void testCharclasses12() throws IOException { doCodeTest("[&&]"); }
+  public void testCharclasses13() throws IOException { doCodeTest("[&&[^\\d]]"); }
+  public void testCharclasses14() throws IOException { doCodeTest("[a&&]"); }
+  public void testCharclasses15() throws IOException { doCodeTest("a[b&&c&&d]"); }
+  public void testCharclasses16() throws IOException { doCodeTest("a[b&&c&&d-e&&f]"); }
+  public void testCharclasses17() throws IOException { doCodeTest("[a&&]"); }
+  public void testCharclasses18() throws IOException { doCodeTest("a[a[b][c]]"); }
+  public void testCharclasses19() throws IOException { doCodeTest("[a-[]]"); }
+  public void testCharclasses20() throws IOException { doCodeTest("[a-[b"); }
+  public void testCharclasses21() throws IOException { doCodeTest("[a[^b]]"); }
+  public void testCharclasses22() throws IOException { doCodeTest("a[a[b[c]][d]]"); }
+  public void testCharclasses23() throws IOException { doCodeTest("a[\\t--]"); }
+  public void testCharclasses24() throws IOException { doCodeTest("a[\\t--]"); }
+  public void testCharclasses25() throws IOException { doCodeTest("a[\\t---]"); }
+  public void testCharclasses26() throws IOException { doCodeTest("a[-]?c"); }
+  public void testCharclasses27() throws IOException { doCodeTest("a["); }
+  public void testCharclasses28() throws IOException { doCodeTest("a]"); }
+  public void testCharclasses29() throws IOException { doCodeTest("[a-["); }
+  public void testCharclasses30() throws IOException { doCodeTest("a[]]"); }
+  public void testCharclasses31() throws IOException { doCodeTest("a[^bc]d"); }
+  public void testCharclasses32() throws IOException { doCodeTest("a[^bc]"); }
+  public void testCharclasses33() throws IOException { doCodeTest("a[]b"); }
+  public void testCharclasses34() throws IOException { doCodeTest("[^]"); }
+  public void testCharclasses35() throws IOException { doCodeTest("[abhgefdc]ij"); }
+  public void testCharclasses36() throws IOException { doCodeTest("[a-zA-Z_][a-zA-Z0-9_]*"); }
+  public void testCharclasses37() throws IOException { doCodeTest("([a-c]+?)c"); }
+  public void testCharclasses38() throws IOException { doCodeTest("([ab]*?)b"); }
+  public void testCharclasses39() throws IOException { doCodeTest("([ab]*)b"); }
+  public void testCharclasses40() throws IOException { doCodeTest("([ab]??)b"); }
+  public void testCharclasses41() throws IOException { doCodeTest("(c[ab]?)b"); }
+  public void testCharclasses42() throws IOException { doCodeTest("(c[ab]??)b"); }
+  public void testCharclasses43() throws IOException { doCodeTest("(c[ab]*?)b"); }
+  public void testCharclasses44() throws IOException { doCodeTest("a[bcd]+dcdcde"); }
+  public void testCharclasses45() throws IOException { doCodeTest("[k]"); }
+  public void testCharclasses46() throws IOException { doCodeTest("a[bcd]*dcdcde"); }
+  public void testCharclasses47() throws IOException { doCodeTest("[^ab]*"); }
+  public void testCharclasses48() throws IOException { doCodeTest("a[.]b"); }
+  public void testCharclasses49() throws IOException { doCodeTest("a[+*?]b"); }
+  public void testCharclasses50() throws IOException { doCodeTest("a[\\p{IsDigit}\\p{IsAlpha}]b"); }
+  public void testCharclasses51() throws IOException { doCodeTest("[\\p{L}&&[^\\p{Lu}]]"); }
+  public void testCharclasses52() throws IOException { doCodeTest("\\pL\\pM\\pZ\\pS\\pN\\pP\\pC\\PL\\PM\\PZ\\PS\\PN\\PP\\PC"); }
+  public void testCharclasses53() throws IOException { doCodeTest("\\pA"); }
+  public void testCharclasses54() throws IOException { doCodeTest("\\pl"); }
+  public void testCharclasses55() throws IOException { doCodeTest("a\\p"); }
+  public void testCharclasses56() throws IOException { doCodeTest("a\\p{}"); }
+  public void testCharclasses57() throws IOException { doCodeTest("a\\p}"); }
+  public void testCharclasses58() throws IOException { doCodeTest("a\\p{123}"); }
+  public void testCharclasses59() throws IOException { doCodeTest("[\\p{nothing}]"); }
+  public void testCharclasses60() throws IOException { doCodeTest(/* fixme */"a\\p{<error descr=\"Character family name expected\">*</error>}b"); }
+  public void testCharclasses61() throws IOException { doCodeTest(/* fixme */"[<warning descr=\"Redundant character range\">\\w-\\w</warning>]"); }
+  public void testCharclasses62() throws IOException { doCodeTest("[a-\\w]"); }
+  public void testCharclasses63() throws IOException { doCodeTest("(?x)abc #foo \\q bar\n# foo\n(?-xi)xyz(?i:ABC)"); }
+  public void testCharclasses64() throws IOException { doCodeTest("[\\ud800\\udc00-\\udbff\\udfff]"); }
+  public void testCharclasses65() throws IOException { doCodeTest("\\R"); }
+  public void testCharclasses66() throws IOException { doCodeTest("\\X"); }
+  public void testCharclasses67() throws IOException { doCodeTest(/* fixme */"<weak_warning descr=\"Redundant character escape\">\\-</weak_warning>[<weak_warning descr=\"Redundant character escape\">\\*</weak_warning>\\-\\[\\]\\\\<weak_warning descr=\"Redundant character escape\">\\+]</weak_warning>"); }
+  public void testCharclasses68() throws IOException { doCodeTest("[\\b]"); }
+
+  public void testGroups1() throws IOException { doCodeTest("()ef"); }
+  public void testGroups2() throws IOException { doCodeTest("()*"); }
+  public void testGroups3() throws IOException { doCodeTest(/* fixme */"<warning descr=\"Empty group\">()</warning>"); }
+  public void testGroups4() throws IOException { doCodeTest(/* fixme */"<warning descr=\"Empty group\">(|)</warning>"); }
+  public void testGroups5() throws IOException { doCodeTest("(*)b"); }
+  public void testGroups6() throws IOException { doCodeTest(/* fixme */"<warning descr=\"Redundant group nesting\">((a))</warning>"); }
+  public void testGroups7() throws IOException { doCodeTest("(a)b(c)"); }
+  public void testGroups8() throws IOException { doCodeTest("(a*)*"); }
+  public void testGroups9() throws IOException { doCodeTest("(a*)+"); }
+  public void testGroups10() throws IOException { doCodeTest("(a|)*"); }
+  public void testGroups11() throws IOException { doCodeTest("(ab|cd)e"); }
+  public void testGroups12() throws IOException { doCodeTest("(.*)c(.*)"); }
+  public void testGroups13() throws IOException { doCodeTest("\\((.*), (.*)\\)"); }
+  public void testGroups14() throws IOException { doCodeTest("a(bc)d"); }
+  public void testGroups15() throws IOException { doCodeTest("([abc])*d"); }
+  public void testGroups16() throws IOException { doCodeTest("((((((((((a)))))))))"); }
+  public void testGroups17() throws IOException { doCodeTest("([abc])*bcd"); }
+  public void testGroups18() throws IOException { doCodeTest("(a|b)c*d"); }
+  public void testGroups19() throws IOException { doCodeTest("a([bc]*)c*"); }
+  public void testGroups20() throws IOException { doCodeTest("((a)(b)c)(d)"); }
+  public void testGroups21() throws IOException { doCodeTest("(ab|a)b*c"); }
+  public void testGroups22() throws IOException { doCodeTest("(ab|ab*)bc"); }
+  public void testGroups23() throws IOException { doCodeTest("(a|b|c|d|e)f"); }
+  public void testGroups24() throws IOException { doCodeTest("a([bc]*)(c*d)"); }
+  public void testGroups25() throws IOException { doCodeTest("a([bc]+)(c*d)"); }
+  public void testGroups26() throws IOException { doCodeTest("a([bc]*)(c+d)"); }
+  public void testGroups27() throws IOException { doCodeTest("(a+|b)*"); }
+  public void testGroups28() throws IOException { doCodeTest("(a+|b)+"); }
+  public void testGroups29() throws IOException { doCodeTest("(a+|b)?"); }
+  public void testGroups30() throws IOException { doCodeTest("(^*"); }
+  public void testGroups31() throws IOException { doCodeTest(")("); }
+  public void testGroups32() throws IOException { doCodeTest("(?i:*)"); }
+  public void testGroups33() throws IOException { doCodeTest("(?<asdf>[a-c])\\1"); }
+  public void testGroups34() throws IOException { doCodeTest("(?<asdf>[a-c])\\k<asdf>"); }
+  public void testGroups35() throws IOException { doCodeTest(/* fixme */"<error descr=\"Unresolved named group reference\">\\k<adsf></error>"); }
+
+  public void testEscapes1() throws IOException { doCodeTest("\\q"); }
+  public void testEscapes2() throws IOException { doCodeTest("\\#"); }
+  public void testEscapes3() throws IOException { doCodeTest("a\\"); }
+  public void testEscapes4() throws IOException { doCodeTest("a\\(b"); }
+  public void testEscapes5() throws IOException { doCodeTest("a\\(*b"); }
+  public void testEscapes6() throws IOException { doCodeTest("a\\\\b"); }
+  public void testEscapes7() throws IOException { doCodeTest("\\u004a"); }
+  public void testEscapes8() throws IOException { doCodeTest("\\0123"); }
+  public void testEscapes9() throws IOException { doCodeTest("\\0"); }
+  public void testEscapes10() throws IOException { doCodeTest("\\x4a"); }
+  public void testEscapes11() throws IOException { doCodeTest("\\x{0}"); }
+  public void testEscapes12() throws IOException { doCodeTest("\\x{2011F}"); }
+  public void testEscapes13() throws IOException { doCodeTest("[\\x4a-\\x4b]"); }
+  public void testEscapes14() throws IOException { doCodeTest(/* fixme */"[<warning descr=\"Redundant character range\">a-a</warning>]"); }
+  public void testEscapes15() throws IOException { doCodeTest("[\\x4a-\\x3f]"); }
+  public void testEscapes16() throws IOException { doCodeTest(/* fixme */"[<error descr=\"Illegal character range (to < from)\">\\udbff\\udfff-\\ud800\\udc00</error>]"); }
+  public void testEscapes17() throws IOException { doCodeTest("[\\ud800\\udc00-\\udbff\\udfff]"); }
+  public void testEscapes18() throws IOException { doCodeTest(/* fixme */"[<error descr=\"Illegal character range (to < from)\">z-a</error>]"); }
+  public void testEscapes19() throws IOException { doCodeTest("[a-z]"); }
+  public void testEscapes20() throws IOException { doCodeTest("a\\Qabc?*+.))]][]\\Eb"); }
+  public void testEscapes21() throws IOException { doCodeTest("(a\\Qabc?*+.))]][]\\Eb)"); }
+  public void testEscapes22() throws IOException { doCodeTest(/* fixme */"[\\Qabc?*+.)<warning descr=\"Duplicate character ')' in character class\">)</warning>]<warning descr=\"Duplicate character ']' in character class\">]</warning>[<warning descr=\"Duplicate character ']' in character class\">]</warning>\\E]"); }
+  public void testEscapes23() throws IOException { doCodeTest("a\\Qabc?*+.))]][]\\E)"); }
+  public void testEscapes24() throws IOException { doCodeTest("\\Q\\j\\E"); }
+  public void testEscapes25() throws IOException { doCodeTest("\\c0"); }
+
+  public void testAnchors1() throws IOException { doCodeTest("^*"); }
+  public void testAnchors2() throws IOException { doCodeTest("$*"); }
+  public void testAnchors3() throws IOException { doCodeTest("^abc"); }
+  public void testAnchors4() throws IOException { doCodeTest("^abc$"); }
+  public void testAnchors5() throws IOException { doCodeTest("abc$"); }
+  public void testAnchors6() throws IOException { doCodeTest("^"); }
+  public void testAnchors7() throws IOException { doCodeTest("$"); }
+  public void testAnchors8() throws IOException { doCodeTest("$b"); }
+  public void testAnchors9() throws IOException { doCodeTest("^(ab|cd)e"); }
+  public void testAnchors10() throws IOException { doCodeTest("^a(bc+|b[eh])g|.h$"); }
+
+  public void testNamedchars1() throws IOException { doCodeTest("a*b\\s+c"); }
+  public void testNamedchars2() throws IOException { doCodeTest("\\d+"); }
+  public void testNamedchars3() throws IOException { doCodeTest("^\\p{javaJavaIdentifierStart}+\\p{javaJavaIdentifierPart}+$"); }
+  public void testNamedchars4() throws IOException { doCodeTest("\\p{IsDigit}\\p{IsAlpha}"); }
+  public void testNamedchars5() throws IOException { doCodeTest("\\p{InLATIN_1_SUPPLEMENT}"); }
+  public void testNamedchars6() throws IOException { doCodeTest("[a-e]?d\\\\e"); }
+  public void testNamedchars7() throws IOException { doCodeTest("((\\w+)/)*(\\w+)"); }
+  public void testNamedchars8() throws IOException { doCodeTest("\\p{Digit}+"); }
+  public void testNamedchars9() throws IOException { doCodeTest(/* fixme */"[:xdig<warning descr=\"Duplicate character 'i' in character class\">i</warning>t<warning descr=\"Duplicate character ':' in character class\">:</warning>]+"); }
+  public void testNamedchars10() throws IOException { doCodeTest("\\p{unknown}+"); }
+
+  public void testBackrefs1() throws IOException { doCodeTest("(ac*)c*d[ac]*\\1"); }
+  public void testBackrefs2() throws IOException { doCodeTest("(.)=\\1"); }
+  public void testBackrefs3() throws IOException { doCodeTest("([ab])=\\1"); }
+  public void testBackrefs4() throws IOException { doCodeTest("([ab]+)=\\1"); }
+  public void testBackrefs5() throws IOException { doCodeTest("(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)\\105"); }
+  public void testBackrefs6() throws IOException { doCodeTest("(.)\\11"); }
+  public void testBackrefs7() throws IOException { doCodeTest("([ab]+)=\\2"); }
+  public void testBackrefs8() throws IOException { doCodeTest("([ab]+)=\\3"); }
+  public void testBackrefs9() throws IOException { doCodeTest(/* fixme */"([ab]+=<warning descr=\"Back reference is nested into the capturing group it refers to\">\\1</warning>)"); }
+
+  public void testComplex1() throws IOException { doCodeTest("z(\\w\\s+(?:\\w\\s+\\w)+)z"); }
+  public void testComplex2() throws IOException { doCodeTest("(([hH][tT]{2}[pP]|[fF][tT][pP]):\\/\\/)?[a-zA-Z0-9\\-]+(\\.[a-zA-Z0-9\\-]+)*"); }
+  public void testComplex3() throws IOException { doCodeTest("((?:[hH][tT]{2}[pP]|[fF][tT][pP]):\\/\\/)?[a-zA-Z0-9\\-]+(\\.[a-zA-Z0-9\\-]+)*"); }
+  public void testComplex4() throws IOException { doCodeTest("(([hH][tT]{2}[pP]|[fF][tT][pP]):\\/\\/)?[a-zA-Z0-9\\-]+(?:\\.[a-zA-Z0-9\\-]+)*"); }
+  public void testComplex5() throws IOException { doCodeTest("(?:([hH][tT]{2}[pP]|[fF][tT][pP]):\\/\\/)?[a-zA-Z0-9\\-]+(\\.[a-zA-Z0-9\\-]+)*"); }
+  public void testComplex6() throws IOException { doCodeTest("^(?:([hH][tT]{2}[pP]|[fF][tT][pP]):\\/\\/)?[a-zA-Z0-9\\-]+(\\.[a-zA-Z0-9\\-]+)*$"); }
+  public void testComplex7() throws IOException { doCodeTest("^(?:(?:[hH][tT]{2}[pP]|[fF][tT][pP]):\\/\\/)?[a-zA-Z0-9\\-]+(?:\\.[a-zA-Z0-9\\-]+)*$"); }
+
+  public void testIncomplete1() throws IOException { doCodeTest("abc\\"); }
+  public void testIncomplete2() throws IOException { doCodeTest("abc[\\"); }
+  public void testIncomplete3() throws IOException { doCodeTest("abc\\x"); }
+  public void testIncomplete4() throws IOException { doCodeTest("abc\\x1"); }
+  public void testIncomplete5() throws IOException { doCodeTest("abc\\x{"); }
+  public void testIncomplete6() throws IOException { doCodeTest("abc\\x{}"); }
+  public void testIncomplete7() throws IOException { doCodeTest("abc\\x{0"); }
+  public void testIncomplete8() throws IOException { doCodeTest("abc\\u"); }
+  public void testIncomplete9() throws IOException { doCodeTest("abc\\u22"); }
+  public void testIncomplete10() throws IOException { doCodeTest("\\Qabc"); }
+  public void testIncomplete11() throws IOException { doCodeTest("\\Q"); }
+  public void testIncomplete12() throws IOException { doCodeTest("\\E"); }
+  public void testIncomplete13() throws IOException { doCodeTest("a|*"); }
+
+  public void testRegressions1() throws IOException { doCodeTest("("); }
+  public void testRegressions2() throws IOException { doCodeTest("[^^]"); }
+  public void testRegressions3() throws IOException { doCodeTest(/* fixme */"a<error>)</error><error descr=\"Pattern expected\">b</error>"); }
+  public void testRegressions4() throws IOException { doCodeTest(/* fixme */"\\s*@return(?:s)?\\s*(?:(?:\\{|:)?\\s*(?(<error descr=\"Group name or number expected\">[</error><error descr=\"Pattern expected\">^</error><error descr=\"Pattern expected\">\\</error>s<error descr=\"Pattern expected\">\\</error>}<error descr=\"Pattern expected\">]</error><error descr=\"Dangling metacharacter\">+</error><error descr=\"Unmatched closing ')'\">)</error><error descr=\"Pattern expected\">\\</error>s<error descr=\"Dangling metacharacter\">*</error><error descr=\"Pattern expected\">\\</error>}<error descr=\"Dangling metacharacter\">?</error><error descr=\"Pattern expected\">\\</error>s<error descr=\"Dangling metacharacter\">*</error><error descr=\"Unmatched closing ')'\">)</error><error descr=\"Dangling metacharacter\">?</error><error descr=\"Pattern expected\">(</error><error descr=\"Pattern expected\">.</error><error descr=\"Dangling metacharacter\">*</error><error descr=\"Unmatched closing ')'\">)</error>"); }
+
+  public void testOptions1() throws IOException { doCodeTest(/* fixme */"(?i<error descr=\"Unknown inline option flag\">Z</error>m)abc"); }
+  public void testOptions2() throws IOException { doCodeTest("(?idmsuxU)nice"); }
+  public void testOptions3() throws IOException { doCodeTest("(?idm-suxU)one(?suxU-idm)two"); }
+
+  public void testTests1() throws IOException { doCodeTest("abc)"); }
+  public void testTests2() throws IOException { doCodeTest("(abc"); }
+  public void testTests3() throws IOException { doCodeTest("a+b+c"); }
+  public void testTests4() throws IOException { doCodeTest("a**"); }
+  public void testTests5() throws IOException { doCodeTest("a++"); }
+  public void testTests6() throws IOException { doCodeTest("ab*"); }
+  public void testTests7() throws IOException { doCodeTest("abcd*efg"); }
+  public void testTests8() throws IOException { doCodeTest("a|b|c|d|e"); }
+  public void testTests9() throws IOException { doCodeTest("(bc+d$|ef*g.|h?i(j|k))"); }
+  public void testTests10() throws IOException { doCodeTest("a*(b*c*)"); }
+  public void testTests11() throws IOException { doCodeTest("a?b+c*"); }
+  public void testTests12() throws IOException { doCodeTest("i am a green (giant|man|martian)"); }
+  public void testTests13() throws IOException { doCodeTest("(wee|week)(knights|knight)"); }
+  public void testTests14() throws IOException { doCodeTest("(a.*b)(a.*b)"); }
+  public void testTests15() throws IOException { doCodeTest("(\\s*\\w+)?"); }
+  public void testTests16() throws IOException { doCodeTest("(?:a)"); }
+  public void testTests17() throws IOException { doCodeTest("(?:\\w)"); }
+  public void testTests18() throws IOException { doCodeTest("(?:\\w\\s\\w)+"); }
+  public void testTests19() throws IOException { doCodeTest("(a\\w)(?:,(a\\w))+"); }
+  public void testTests20() throws IOException { doCodeTest("abc.*?x+yz"); }
+  public void testTests21() throws IOException { doCodeTest("abc.+?x+yz"); }
+  public void testTests22() throws IOException { doCodeTest("a.+?(c|d)"); }
+  public void testTests23() throws IOException { doCodeTest("a.+(c|d)"); }
+  public void testTests24() throws IOException { doCodeTest("a+?b+?c+?"); }
+
+  public void testRealLife1() throws IOException { doCodeTest("x:found=\"(true|false)\""); }
+  public void testRealLife2() throws IOException { doCodeTest("(?:\\s)|(?:/\\*.*\\*/)|(?://[^\\n]*)"); }
+  public void testRealLife3() throws IOException { doCodeTest("((?:\\p{Alpha}\\:)?[0-9 a-z_A-Z\\-\\\\./]+)"); }
+  public void testRealLife4() throws IOException { doCodeTest("^[\\w\\+\\.\\-]{2,}:"); }
+  public void testRealLife5() throws IOException { doCodeTest("#(.*)$"); }
+  public void testRealLife6() throws IOException { doCodeTest("^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)"); }
+  public void testRealLife7() throws IOException { doCodeTest("(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)"); }
+  public void testRealLife8() throws IOException { doCodeTest("usd [+-]?[0-9]+.[0-9][0-9]"); }
+  public void testRealLife9() throws IOException { doCodeTest("\\b(\\w+)(\\s+\\1)+\\b"); }
+  public void testRealLife10() throws IOException { doCodeTest(/* fixme */".*?(<(error|warning|info)(?: descr=\"((?:[^\"\\\\]|\\\\\")*)\")?(?: type=\"([0-9A-Z_]+)\")?(?: foreground=\"([0-9xa-f]+)\")?(?: background=\"([0-9xa-f]+)\")?(?: effectcolor=\"([0-9xa-f]+)\")?(?: effecttype=\"([A-Z]+)\")?(?: fonttype=\"([0-9]+)\")?(/)?>)(.*)"); }
+
+  public void testBug1() throws IOException { doCodeTest("[{][\\w\\.]*[}]"); }
+  public void testBug2() throws IOException { doCodeTest("[a-z0-9!\\#$%&'*+/=?^_`{|}~-]+"); }
+  public void testBug3() throws IOException { doCodeTest("[\\{]"); }
+  public void testBug4() throws IOException { doCodeTest("{"); }
+  public void testBug5() throws IOException { doCodeTest("\\{"); }
+  public void testBug6() throws IOException { doCodeTest("(<=\\s)-{3,}(?>\\s)"); }
+  public void testBug7() throws IOException { doCodeTest("(?x)a\\ b\\ c"); }
+  public void testBug8() throws IOException { doCodeTest(/* fixme */"a<weak_warning descr=\"Redundant character escape\">\\ </weak_warning>b"); }
+  public void testBug9() throws IOException { doCodeTest("(^|\\.)\\*(?=(\\.|$))"); }
+  public void testBug10() throws IOException { doCodeTest("\\h \\H \\v \\V"); }
+}
diff --git a/RegExpSupport/testData/psi/Anchors1.txt b/RegExpSupport/testData/psi/Anchors1.txt
new file mode 100644 (file)
index 0000000..d09bf87
--- /dev/null
@@ -0,0 +1,8 @@
+REGEXP_FILE
+  RegExpPatternImpl: <^*>
+    RegExpBranchImpl: <^*>
+      RegExpClosureImpl: <^*>
+        RegExpBoundaryImpl: <^>
+          PsiElement(CARET)('^')
+        RegExpQuantifierImpl: <*>
+          PsiElement(STAR)('*')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Anchors10.txt b/RegExpSupport/testData/psi/Anchors10.txt
new file mode 100644 (file)
index 0000000..0045d14
--- /dev/null
@@ -0,0 +1,41 @@
+REGEXP_FILE
+  RegExpPatternImpl: <^a(bc+|b[eh])g|.h$>
+    RegExpBranchImpl: <^a(bc+|b[eh])g>
+      RegExpBoundaryImpl: <^>
+        PsiElement(CARET)('^')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpGroupImpl: <(bc+|b[eh])>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <bc+|b[eh]>
+          RegExpBranchImpl: <bc+>
+            RegExpCharImpl: <b>
+              PsiElement(CHARACTER)('b')
+            RegExpClosureImpl: <c+>
+              RegExpCharImpl: <c>
+                PsiElement(CHARACTER)('c')
+              RegExpQuantifierImpl: <+>
+                PsiElement(PLUS)('+')
+          PsiElement(UNION)('|')
+          RegExpBranchImpl: <b[eh]>
+            RegExpCharImpl: <b>
+              PsiElement(CHARACTER)('b')
+            RegExpClassImpl: <[eh]>
+              PsiElement(CLASS_BEGIN)('[')
+              RegExpUnionImpl: <eh>
+                RegExpCharImpl: <e>
+                  PsiElement(CHARACTER)('e')
+                RegExpCharImpl: <h>
+                  PsiElement(CHARACTER)('h')
+              PsiElement(CLASS_END)(']')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <g>
+        PsiElement(CHARACTER)('g')
+    PsiElement(UNION)('|')
+    RegExpBranchImpl: <.h$>
+      RegExpSimpleClassImpl: <.>
+        PsiElement(DOT)('.')
+      RegExpCharImpl: <h>
+        PsiElement(CHARACTER)('h')
+      RegExpBoundaryImpl: <$>
+        PsiElement(DOLLAR)('$')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Anchors2.txt b/RegExpSupport/testData/psi/Anchors2.txt
new file mode 100644 (file)
index 0000000..dfcae8a
--- /dev/null
@@ -0,0 +1,8 @@
+REGEXP_FILE
+  RegExpPatternImpl: <$*>
+    RegExpBranchImpl: <$*>
+      RegExpClosureImpl: <$*>
+        RegExpBoundaryImpl: <$>
+          PsiElement(DOLLAR)('$')
+        RegExpQuantifierImpl: <*>
+          PsiElement(STAR)('*')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Anchors3.txt b/RegExpSupport/testData/psi/Anchors3.txt
new file mode 100644 (file)
index 0000000..0fbf949
--- /dev/null
@@ -0,0 +1,11 @@
+REGEXP_FILE
+  RegExpPatternImpl: <^abc>
+    RegExpBranchImpl: <^abc>
+      RegExpBoundaryImpl: <^>
+        PsiElement(CARET)('^')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Anchors4.txt b/RegExpSupport/testData/psi/Anchors4.txt
new file mode 100644 (file)
index 0000000..59616fe
--- /dev/null
@@ -0,0 +1,13 @@
+REGEXP_FILE
+  RegExpPatternImpl: <^abc$>
+    RegExpBranchImpl: <^abc$>
+      RegExpBoundaryImpl: <^>
+        PsiElement(CARET)('^')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpBoundaryImpl: <$>
+        PsiElement(DOLLAR)('$')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Anchors5.txt b/RegExpSupport/testData/psi/Anchors5.txt
new file mode 100644 (file)
index 0000000..3db657b
--- /dev/null
@@ -0,0 +1,11 @@
+REGEXP_FILE
+  RegExpPatternImpl: <abc$>
+    RegExpBranchImpl: <abc$>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpBoundaryImpl: <$>
+        PsiElement(DOLLAR)('$')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Anchors6.txt b/RegExpSupport/testData/psi/Anchors6.txt
new file mode 100644 (file)
index 0000000..25634fe
--- /dev/null
@@ -0,0 +1,5 @@
+REGEXP_FILE
+  RegExpPatternImpl: <^>
+    RegExpBranchImpl: <^>
+      RegExpBoundaryImpl: <^>
+        PsiElement(CARET)('^')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Anchors7.txt b/RegExpSupport/testData/psi/Anchors7.txt
new file mode 100644 (file)
index 0000000..0edae4c
--- /dev/null
@@ -0,0 +1,5 @@
+REGEXP_FILE
+  RegExpPatternImpl: <$>
+    RegExpBranchImpl: <$>
+      RegExpBoundaryImpl: <$>
+        PsiElement(DOLLAR)('$')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Anchors8.txt b/RegExpSupport/testData/psi/Anchors8.txt
new file mode 100644 (file)
index 0000000..84380ce
--- /dev/null
@@ -0,0 +1,7 @@
+REGEXP_FILE
+  RegExpPatternImpl: <$b>
+    RegExpBranchImpl: <$b>
+      RegExpBoundaryImpl: <$>
+        PsiElement(DOLLAR)('$')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Anchors9.txt b/RegExpSupport/testData/psi/Anchors9.txt
new file mode 100644 (file)
index 0000000..60b18cc
--- /dev/null
@@ -0,0 +1,22 @@
+REGEXP_FILE
+  RegExpPatternImpl: <^(ab|cd)e>
+    RegExpBranchImpl: <^(ab|cd)e>
+      RegExpBoundaryImpl: <^>
+        PsiElement(CARET)('^')
+      RegExpGroupImpl: <(ab|cd)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <ab|cd>
+          RegExpBranchImpl: <ab>
+            RegExpCharImpl: <a>
+              PsiElement(CHARACTER)('a')
+            RegExpCharImpl: <b>
+              PsiElement(CHARACTER)('b')
+          PsiElement(UNION)('|')
+          RegExpBranchImpl: <cd>
+            RegExpCharImpl: <c>
+              PsiElement(CHARACTER)('c')
+            RegExpCharImpl: <d>
+              PsiElement(CHARACTER)('d')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Backrefs1.txt b/RegExpSupport/testData/psi/Backrefs1.txt
new file mode 100644 (file)
index 0000000..2ef3ab0
--- /dev/null
@@ -0,0 +1,35 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(ac*)c*d[ac]*\1>
+    RegExpBranchImpl: <(ac*)c*d[ac]*\1>
+      RegExpGroupImpl: <(ac*)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <ac*>
+          RegExpBranchImpl: <ac*>
+            RegExpCharImpl: <a>
+              PsiElement(CHARACTER)('a')
+            RegExpClosureImpl: <c*>
+              RegExpCharImpl: <c>
+                PsiElement(CHARACTER)('c')
+              RegExpQuantifierImpl: <*>
+                PsiElement(STAR)('*')
+        PsiElement(GROUP_END)(')')
+      RegExpClosureImpl: <c*>
+        RegExpCharImpl: <c>
+          PsiElement(CHARACTER)('c')
+        RegExpQuantifierImpl: <*>
+          PsiElement(STAR)('*')
+      RegExpCharImpl: <d>
+        PsiElement(CHARACTER)('d')
+      RegExpClosureImpl: <[ac]*>
+        RegExpClassImpl: <[ac]>
+          PsiElement(CLASS_BEGIN)('[')
+          RegExpUnionImpl: <ac>
+            RegExpCharImpl: <a>
+              PsiElement(CHARACTER)('a')
+            RegExpCharImpl: <c>
+              PsiElement(CHARACTER)('c')
+          PsiElement(CLASS_END)(']')
+        RegExpQuantifierImpl: <*>
+          PsiElement(STAR)('*')
+      RegExpBackrefImpl: <\1>
+        PsiElement(BACKREF)('\1')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Backrefs2.txt b/RegExpSupport/testData/psi/Backrefs2.txt
new file mode 100644 (file)
index 0000000..f0b81da
--- /dev/null
@@ -0,0 +1,14 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(.)=\1>
+    RegExpBranchImpl: <(.)=\1>
+      RegExpGroupImpl: <(.)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <.>
+          RegExpBranchImpl: <.>
+            RegExpSimpleClassImpl: <.>
+              PsiElement(DOT)('.')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <=>
+        PsiElement(CHARACTER)('=')
+      RegExpBackrefImpl: <\1>
+        PsiElement(BACKREF)('\1')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Backrefs3.txt b/RegExpSupport/testData/psi/Backrefs3.txt
new file mode 100644 (file)
index 0000000..32dd48f
--- /dev/null
@@ -0,0 +1,20 @@
+REGEXP_FILE
+  RegExpPatternImpl: <([ab])=\1>
+    RegExpBranchImpl: <([ab])=\1>
+      RegExpGroupImpl: <([ab])>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <[ab]>
+          RegExpBranchImpl: <[ab]>
+            RegExpClassImpl: <[ab]>
+              PsiElement(CLASS_BEGIN)('[')
+              RegExpUnionImpl: <ab>
+                RegExpCharImpl: <a>
+                  PsiElement(CHARACTER)('a')
+                RegExpCharImpl: <b>
+                  PsiElement(CHARACTER)('b')
+              PsiElement(CLASS_END)(']')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <=>
+        PsiElement(CHARACTER)('=')
+      RegExpBackrefImpl: <\1>
+        PsiElement(BACKREF)('\1')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Backrefs4.txt b/RegExpSupport/testData/psi/Backrefs4.txt
new file mode 100644 (file)
index 0000000..7d8232d
--- /dev/null
@@ -0,0 +1,23 @@
+REGEXP_FILE
+  RegExpPatternImpl: <([ab]+)=\1>
+    RegExpBranchImpl: <([ab]+)=\1>
+      RegExpGroupImpl: <([ab]+)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <[ab]+>
+          RegExpBranchImpl: <[ab]+>
+            RegExpClosureImpl: <[ab]+>
+              RegExpClassImpl: <[ab]>
+                PsiElement(CLASS_BEGIN)('[')
+                RegExpUnionImpl: <ab>
+                  RegExpCharImpl: <a>
+                    PsiElement(CHARACTER)('a')
+                  RegExpCharImpl: <b>
+                    PsiElement(CHARACTER)('b')
+                PsiElement(CLASS_END)(']')
+              RegExpQuantifierImpl: <+>
+                PsiElement(PLUS)('+')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <=>
+        PsiElement(CHARACTER)('=')
+      RegExpBackrefImpl: <\1>
+        PsiElement(BACKREF)('\1')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Backrefs5.txt b/RegExpSupport/testData/psi/Backrefs5.txt
new file mode 100644 (file)
index 0000000..210d513
--- /dev/null
@@ -0,0 +1,77 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)\105>
+    RegExpBranchImpl: <(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)\105>
+      RegExpGroupImpl: <(a)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <a>
+          RegExpBranchImpl: <a>
+            RegExpCharImpl: <a>
+              PsiElement(CHARACTER)('a')
+        PsiElement(GROUP_END)(')')
+      RegExpGroupImpl: <(b)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <b>
+          RegExpBranchImpl: <b>
+            RegExpCharImpl: <b>
+              PsiElement(CHARACTER)('b')
+        PsiElement(GROUP_END)(')')
+      RegExpGroupImpl: <(c)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <c>
+          RegExpBranchImpl: <c>
+            RegExpCharImpl: <c>
+              PsiElement(CHARACTER)('c')
+        PsiElement(GROUP_END)(')')
+      RegExpGroupImpl: <(d)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <d>
+          RegExpBranchImpl: <d>
+            RegExpCharImpl: <d>
+              PsiElement(CHARACTER)('d')
+        PsiElement(GROUP_END)(')')
+      RegExpGroupImpl: <(e)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <e>
+          RegExpBranchImpl: <e>
+            RegExpCharImpl: <e>
+              PsiElement(CHARACTER)('e')
+        PsiElement(GROUP_END)(')')
+      RegExpGroupImpl: <(f)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <f>
+          RegExpBranchImpl: <f>
+            RegExpCharImpl: <f>
+              PsiElement(CHARACTER)('f')
+        PsiElement(GROUP_END)(')')
+      RegExpGroupImpl: <(g)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <g>
+          RegExpBranchImpl: <g>
+            RegExpCharImpl: <g>
+              PsiElement(CHARACTER)('g')
+        PsiElement(GROUP_END)(')')
+      RegExpGroupImpl: <(h)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <h>
+          RegExpBranchImpl: <h>
+            RegExpCharImpl: <h>
+              PsiElement(CHARACTER)('h')
+        PsiElement(GROUP_END)(')')
+      RegExpGroupImpl: <(i)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <i>
+          RegExpBranchImpl: <i>
+            RegExpCharImpl: <i>
+              PsiElement(CHARACTER)('i')
+        PsiElement(GROUP_END)(')')
+      RegExpGroupImpl: <(j)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <j>
+          RegExpBranchImpl: <j>
+            RegExpCharImpl: <j>
+              PsiElement(CHARACTER)('j')
+        PsiElement(GROUP_END)(')')
+      RegExpBackrefImpl: <\10>
+        PsiElement(BACKREF)('\10')
+      RegExpCharImpl: <5>
+        PsiElement(CHARACTER)('5')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Backrefs6.txt b/RegExpSupport/testData/psi/Backrefs6.txt
new file mode 100644 (file)
index 0000000..017deff
--- /dev/null
@@ -0,0 +1,14 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(.)\11>
+    RegExpBranchImpl: <(.)\11>
+      RegExpGroupImpl: <(.)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <.>
+          RegExpBranchImpl: <.>
+            RegExpSimpleClassImpl: <.>
+              PsiElement(DOT)('.')
+        PsiElement(GROUP_END)(')')
+      RegExpBackrefImpl: <\1>
+        PsiElement(BACKREF)('\1')
+      RegExpCharImpl: <1>
+        PsiElement(CHARACTER)('1')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Backrefs7.txt b/RegExpSupport/testData/psi/Backrefs7.txt
new file mode 100644 (file)
index 0000000..05e0ce5
--- /dev/null
@@ -0,0 +1,23 @@
+REGEXP_FILE
+  RegExpPatternImpl: <([ab]+)=\2>
+    RegExpBranchImpl: <([ab]+)=\2>
+      RegExpGroupImpl: <([ab]+)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <[ab]+>
+          RegExpBranchImpl: <[ab]+>
+            RegExpClosureImpl: <[ab]+>
+              RegExpClassImpl: <[ab]>
+                PsiElement(CLASS_BEGIN)('[')
+                RegExpUnionImpl: <ab>
+                  RegExpCharImpl: <a>
+                    PsiElement(CHARACTER)('a')
+                  RegExpCharImpl: <b>
+                    PsiElement(CHARACTER)('b')
+                PsiElement(CLASS_END)(']')
+              RegExpQuantifierImpl: <+>
+                PsiElement(PLUS)('+')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <=>
+        PsiElement(CHARACTER)('=')
+      RegExpBackrefImpl: <\2>
+        PsiElement(BACKREF)('\2')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Backrefs8.txt b/RegExpSupport/testData/psi/Backrefs8.txt
new file mode 100644 (file)
index 0000000..2fe0168
--- /dev/null
@@ -0,0 +1,23 @@
+REGEXP_FILE
+  RegExpPatternImpl: <([ab]+)=\3>
+    RegExpBranchImpl: <([ab]+)=\3>
+      RegExpGroupImpl: <([ab]+)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <[ab]+>
+          RegExpBranchImpl: <[ab]+>
+            RegExpClosureImpl: <[ab]+>
+              RegExpClassImpl: <[ab]>
+                PsiElement(CLASS_BEGIN)('[')
+                RegExpUnionImpl: <ab>
+                  RegExpCharImpl: <a>
+                    PsiElement(CHARACTER)('a')
+                  RegExpCharImpl: <b>
+                    PsiElement(CHARACTER)('b')
+                PsiElement(CLASS_END)(']')
+              RegExpQuantifierImpl: <+>
+                PsiElement(PLUS)('+')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <=>
+        PsiElement(CHARACTER)('=')
+      RegExpBackrefImpl: <\3>
+        PsiElement(BACKREF)('\3')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Backrefs9.txt b/RegExpSupport/testData/psi/Backrefs9.txt
new file mode 100644 (file)
index 0000000..66df9c8
--- /dev/null
@@ -0,0 +1,203 @@
+REGEXP_FILE
+  RegExpPatternImpl: <([ab]+=<warning descr="Back reference is nested into the capturing group it refers to">\1</warning>)>
+    RegExpBranchImpl: <([ab]+=<warning descr="Back reference is nested into the capturing group it refers to">\1</warning>)>
+      RegExpGroupImpl: <([ab]+=<warning descr="Back reference is nested into the capturing group it refers to">\1</warning>)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <[ab]+=<warning descr="Back reference is nested into the capturing group it refers to">\1</warning>>
+          RegExpBranchImpl: <[ab]+=<warning descr="Back reference is nested into the capturing group it refers to">\1</warning>>
+            RegExpClosureImpl: <[ab]+>
+              RegExpClassImpl: <[ab]>
+                PsiElement(CLASS_BEGIN)('[')
+                RegExpUnionImpl: <ab>
+                  RegExpCharImpl: <a>
+                    PsiElement(CHARACTER)('a')
+                  RegExpCharImpl: <b>
+                    PsiElement(CHARACTER)('b')
+                PsiElement(CLASS_END)(']')
+              RegExpQuantifierImpl: <+>
+                PsiElement(PLUS)('+')
+            RegExpCharImpl: <=>
+              PsiElement(CHARACTER)('=')
+            RegExpCharImpl: <<>
+              PsiElement(CHARACTER)('<')
+            RegExpCharImpl: <w>
+              PsiElement(CHARACTER)('w')
+            RegExpCharImpl: <a>
+              PsiElement(CHARACTER)('a')
+            RegExpCharImpl: <r>
+              PsiElement(CHARACTER)('r')
+            RegExpCharImpl: <n>
+              PsiElement(CHARACTER)('n')
+            RegExpCharImpl: <i>
+              PsiElement(CHARACTER)('i')
+            RegExpCharImpl: <n>
+              PsiElement(CHARACTER)('n')
+            RegExpCharImpl: <g>
+              PsiElement(CHARACTER)('g')
+            RegExpCharImpl: < >
+              PsiElement(CHARACTER)(' ')
+            RegExpCharImpl: <d>
+              PsiElement(CHARACTER)('d')
+            RegExpCharImpl: <e>
+              PsiElement(CHARACTER)('e')
+            RegExpCharImpl: <s>
+              PsiElement(CHARACTER)('s')
+            RegExpCharImpl: <c>
+              PsiElement(CHARACTER)('c')
+            RegExpCharImpl: <r>
+              PsiElement(CHARACTER)('r')
+            RegExpCharImpl: <=>
+              PsiElement(CHARACTER)('=')
+            RegExpCharImpl: <">
+              PsiElement(CHARACTER)('"')
+            RegExpCharImpl: <B>
+              PsiElement(CHARACTER)('B')
+            RegExpCharImpl: <a>
+              PsiElement(CHARACTER)('a')
+            RegExpCharImpl: <c>
+              PsiElement(CHARACTER)('c')
+            RegExpCharImpl: <k>
+              PsiElement(CHARACTER)('k')
+            RegExpCharImpl: < >
+              PsiElement(CHARACTER)(' ')
+            RegExpCharImpl: <r>
+              PsiElement(CHARACTER)('r')
+            RegExpCharImpl: <e>
+              PsiElement(CHARACTER)('e')
+            RegExpCharImpl: <f>
+              PsiElement(CHARACTER)('f')
+            RegExpCharImpl: <e>
+              PsiElement(CHARACTER)('e')
+            RegExpCharImpl: <r>
+              PsiElement(CHARACTER)('r')
+            RegExpCharImpl: <e>
+              PsiElement(CHARACTER)('e')
+            RegExpCharImpl: <n>
+              PsiElement(CHARACTER)('n')
+            RegExpCharImpl: <c>
+              PsiElement(CHARACTER)('c')
+            RegExpCharImpl: <e>
+              PsiElement(CHARACTER)('e')
+            RegExpCharImpl: < >
+              PsiElement(CHARACTER)(' ')
+            RegExpCharImpl: <i>
+              PsiElement(CHARACTER)('i')
+            RegExpCharImpl: <s>
+              PsiElement(CHARACTER)('s')
+            RegExpCharImpl: < >
+              PsiElement(CHARACTER)(' ')
+            RegExpCharImpl: <n>
+              PsiElement(CHARACTER)('n')
+            RegExpCharImpl: <e>
+              PsiElement(CHARACTER)('e')
+            RegExpCharImpl: <s>
+              PsiElement(CHARACTER)('s')
+            RegExpCharImpl: <t>
+              PsiElement(CHARACTER)('t')
+            RegExpCharImpl: <e>
+              PsiElement(CHARACTER)('e')
+            RegExpCharImpl: <d>
+              PsiElement(CHARACTER)('d')
+            RegExpCharImpl: < >
+              PsiElement(CHARACTER)(' ')
+            RegExpCharImpl: <i>
+              PsiElement(CHARACTER)('i')
+            RegExpCharImpl: <n>
+              PsiElement(CHARACTER)('n')
+            RegExpCharImpl: <t>
+              PsiElement(CHARACTER)('t')
+            RegExpCharImpl: <o>
+              PsiElement(CHARACTER)('o')
+            RegExpCharImpl: < >
+              PsiElement(CHARACTER)(' ')
+            RegExpCharImpl: <t>
+              PsiElement(CHARACTER)('t')
+            RegExpCharImpl: <h>
+              PsiElement(CHARACTER)('h')
+            RegExpCharImpl: <e>
+              PsiElement(CHARACTER)('e')
+            RegExpCharImpl: < >
+              PsiElement(CHARACTER)(' ')
+            RegExpCharImpl: <c>
+              PsiElement(CHARACTER)('c')
+            RegExpCharImpl: <a>
+              PsiElement(CHARACTER)('a')
+            RegExpCharImpl: <p>
+              PsiElement(CHARACTER)('p')
+            RegExpCharImpl: <t>
+              PsiElement(CHARACTER)('t')
+            RegExpCharImpl: <u>
+              PsiElement(CHARACTER)('u')
+            RegExpCharImpl: <r>
+              PsiElement(CHARACTER)('r')
+            RegExpCharImpl: <i>
+              PsiElement(CHARACTER)('i')
+            RegExpCharImpl: <n>
+              PsiElement(CHARACTER)('n')
+            RegExpCharImpl: <g>
+              PsiElement(CHARACTER)('g')
+            RegExpCharImpl: < >
+              PsiElement(CHARACTER)(' ')
+            RegExpCharImpl: <g>
+              PsiElement(CHARACTER)('g')
+            RegExpCharImpl: <r>
+              PsiElement(CHARACTER)('r')
+            RegExpCharImpl: <o>
+              PsiElement(CHARACTER)('o')
+            RegExpCharImpl: <u>
+              PsiElement(CHARACTER)('u')
+            RegExpCharImpl: <p>
+              PsiElement(CHARACTER)('p')
+            RegExpCharImpl: < >
+              PsiElement(CHARACTER)(' ')
+            RegExpCharImpl: <i>
+              PsiElement(CHARACTER)('i')
+            RegExpCharImpl: <t>
+              PsiElement(CHARACTER)('t')
+            RegExpCharImpl: < >
+              PsiElement(CHARACTER)(' ')
+            RegExpCharImpl: <r>
+              PsiElement(CHARACTER)('r')
+            RegExpCharImpl: <e>
+              PsiElement(CHARACTER)('e')
+            RegExpCharImpl: <f>
+              PsiElement(CHARACTER)('f')
+            RegExpCharImpl: <e>
+              PsiElement(CHARACTER)('e')
+            RegExpCharImpl: <r>
+              PsiElement(CHARACTER)('r')
+            RegExpCharImpl: <s>
+              PsiElement(CHARACTER)('s')
+            RegExpCharImpl: < >
+              PsiElement(CHARACTER)(' ')
+            RegExpCharImpl: <t>
+              PsiElement(CHARACTER)('t')
+            RegExpCharImpl: <o>
+              PsiElement(CHARACTER)('o')
+            RegExpCharImpl: <">
+              PsiElement(CHARACTER)('"')
+            RegExpCharImpl: <>>
+              PsiElement(CHARACTER)('>')
+            RegExpBackrefImpl: <\1>
+              PsiElement(BACKREF)('\1')
+            RegExpCharImpl: <<>
+              PsiElement(CHARACTER)('<')
+            RegExpCharImpl: </>
+              PsiElement(CHARACTER)('/')
+            RegExpCharImpl: <w>
+              PsiElement(CHARACTER)('w')
+            RegExpCharImpl: <a>
+              PsiElement(CHARACTER)('a')
+            RegExpCharImpl: <r>
+              PsiElement(CHARACTER)('r')
+            RegExpCharImpl: <n>
+              PsiElement(CHARACTER)('n')
+            RegExpCharImpl: <i>
+              PsiElement(CHARACTER)('i')
+            RegExpCharImpl: <n>
+              PsiElement(CHARACTER)('n')
+            RegExpCharImpl: <g>
+              PsiElement(CHARACTER)('g')
+            RegExpCharImpl: <>>
+              PsiElement(CHARACTER)('>')
+        PsiElement(GROUP_END)(')')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Bug1.txt b/RegExpSupport/testData/psi/Bug1.txt
new file mode 100644 (file)
index 0000000..5a8a60d
--- /dev/null
@@ -0,0 +1,24 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[{][\w\.]*[}]>
+    RegExpBranchImpl: <[{][\w\.]*[}]>
+      RegExpClassImpl: <[{]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharImpl: <{>
+          PsiElement(LBRACE)('{')
+        PsiElement(CLASS_END)(']')
+      RegExpClosureImpl: <[\w\.]*>
+        RegExpClassImpl: <[\w\.]>
+          PsiElement(CLASS_BEGIN)('[')
+          RegExpUnionImpl: <\w\.>
+            RegExpSimpleClassImpl: <\w>
+              PsiElement(CHAR_CLASS)('\w')
+            RegExpCharImpl: <\.>
+              PsiElement(REDUNDANT_ESCAPE)('\.')
+          PsiElement(CLASS_END)(']')
+        RegExpQuantifierImpl: <*>
+          PsiElement(STAR)('*')
+      RegExpClassImpl: <[}]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharImpl: <}>
+          PsiElement(CHARACTER)('}')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Bug10.txt b/RegExpSupport/testData/psi/Bug10.txt
new file mode 100644 (file)
index 0000000..6031e9c
--- /dev/null
@@ -0,0 +1,17 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\h \H \v \V>
+    RegExpBranchImpl: <\h \H \v \V>
+      RegExpSimpleClassImpl: <\h>
+        PsiElement(CHAR_CLASS)('\h')
+      RegExpCharImpl: < >
+        PsiElement(CHARACTER)(' ')
+      RegExpSimpleClassImpl: <\H>
+        PsiElement(CHAR_CLASS)('\H')
+      RegExpCharImpl: < >
+        PsiElement(CHARACTER)(' ')
+      RegExpSimpleClassImpl: <\v>
+        PsiElement(CHAR_CLASS)('\v')
+      RegExpCharImpl: < >
+        PsiElement(CHARACTER)(' ')
+      RegExpSimpleClassImpl: <\V>
+        PsiElement(CHAR_CLASS)('\V')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Bug2.txt b/RegExpSupport/testData/psi/Bug2.txt
new file mode 100644 (file)
index 0000000..904675e
--- /dev/null
@@ -0,0 +1,60 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[a-z0-9!\#$%&'*+/=?^_`{|}~-]+>
+    RegExpBranchImpl: <[a-z0-9!\#$%&'*+/=?^_`{|}~-]+>
+      RegExpClosureImpl: <[a-z0-9!\#$%&'*+/=?^_`{|}~-]+>
+        RegExpClassImpl: <[a-z0-9!\#$%&'*+/=?^_`{|}~-]>
+          PsiElement(CLASS_BEGIN)('[')
+          RegExpUnionImpl: <a-z0-9!\#$%&'*+/=?^_`{|}~->
+            RegExpCharRangeImpl: <a-z>
+              RegExpCharImpl: <a>
+                PsiElement(CHARACTER)('a')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <z>
+                PsiElement(CHARACTER)('z')
+            RegExpCharRangeImpl: <0-9>
+              RegExpCharImpl: <0>
+                PsiElement(CHARACTER)('0')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <9>
+                PsiElement(CHARACTER)('9')
+            RegExpCharImpl: <!>
+              PsiElement(CHARACTER)('!')
+            RegExpCharImpl: <\#>
+              PsiElement(REDUNDANT_ESCAPE)('\#')
+            RegExpCharImpl: <$>
+              PsiElement(CHARACTER)('$')
+            RegExpCharImpl: <%>
+              PsiElement(CHARACTER)('%')
+            RegExpCharImpl: <&>
+              PsiElement(CHARACTER)('&')
+            RegExpCharImpl: <'>
+              PsiElement(CHARACTER)(''')
+            RegExpCharImpl: <*>
+              PsiElement(CHARACTER)('*')
+            RegExpCharImpl: <+>
+              PsiElement(CHARACTER)('+')
+            RegExpCharImpl: </>
+              PsiElement(CHARACTER)('/')
+            RegExpCharImpl: <=>
+              PsiElement(CHARACTER)('=')
+            RegExpCharImpl: <?>
+              PsiElement(CHARACTER)('?')
+            RegExpCharImpl: <^>
+              PsiElement(CARET)('^')
+            RegExpCharImpl: <_>
+              PsiElement(CHARACTER)('_')
+            RegExpCharImpl: <`>
+              PsiElement(CHARACTER)('`')
+            RegExpCharImpl: <{>
+              PsiElement(LBRACE)('{')
+            RegExpCharImpl: <|>
+              PsiElement(CHARACTER)('|')
+            RegExpCharImpl: <}>
+              PsiElement(CHARACTER)('}')
+            RegExpCharImpl: <~>
+              PsiElement(CHARACTER)('~')
+            RegExpCharImpl: <->
+              PsiElement(MINUS)('-')
+          PsiElement(CLASS_END)(']')
+        RegExpQuantifierImpl: <+>
+          PsiElement(PLUS)('+')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Bug3.txt b/RegExpSupport/testData/psi/Bug3.txt
new file mode 100644 (file)
index 0000000..ed2a106
--- /dev/null
@@ -0,0 +1,8 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[\{]>
+    RegExpBranchImpl: <[\{]>
+      RegExpClassImpl: <[\{]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharImpl: <\{>
+          PsiElement(REDUNDANT_ESCAPE)('\{')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Bug4.txt b/RegExpSupport/testData/psi/Bug4.txt
new file mode 100644 (file)
index 0000000..ca7de50
--- /dev/null
@@ -0,0 +1,4 @@
+REGEXP_FILE
+  PsiErrorElement:Dangling metacharacter
+    <empty list>
+  PsiElement(LBRACE)('{')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Bug5.txt b/RegExpSupport/testData/psi/Bug5.txt
new file mode 100644 (file)
index 0000000..1cf60d4
--- /dev/null
@@ -0,0 +1,5 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\{>
+    RegExpBranchImpl: <\{>
+      RegExpCharImpl: <\{>
+        PsiElement(ESC_CHARACTER)('\{')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Bug6.txt b/RegExpSupport/testData/psi/Bug6.txt
new file mode 100644 (file)
index 0000000..fe490b7
--- /dev/null
@@ -0,0 +1,29 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(<=\s)-{3,}(?>\s)>
+    RegExpBranchImpl: <(<=\s)-{3,}(?>\s)>
+      RegExpGroupImpl: <(<=\s)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <<=\s>
+          RegExpBranchImpl: <<=\s>
+            RegExpCharImpl: <<>
+              PsiElement(CHARACTER)('<')
+            RegExpCharImpl: <=>
+              PsiElement(CHARACTER)('=')
+            RegExpSimpleClassImpl: <\s>
+              PsiElement(CHAR_CLASS)('\s')
+        PsiElement(GROUP_END)(')')
+      RegExpClosureImpl: <-{3,}>
+        RegExpCharImpl: <->
+          PsiElement(MINUS)('-')
+        RegExpQuantifierImpl: <{3,}>
+          PsiElement(LBRACE)('{')
+          PsiElement(NUMBER)('3')
+          PsiElement(COMMA)(',')
+          PsiElement(RBRACE)('}')
+      RegExpGroupImpl: <(?>\s)>
+        PsiElement(NON_CAPT_GROUP)('(?>')
+        RegExpPatternImpl: <\s>
+          RegExpBranchImpl: <\s>
+            RegExpSimpleClassImpl: <\s>
+              PsiElement(CHAR_CLASS)('\s')
+        PsiElement(GROUP_END)(')')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Bug7.txt b/RegExpSupport/testData/psi/Bug7.txt
new file mode 100644 (file)
index 0000000..7923087
--- /dev/null
@@ -0,0 +1,18 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(?x)a\ b\ c>
+    RegExpBranchImpl: <(?x)a\ b\ c>
+      RegExpSetOptionsImpl: <(?x)>
+        PsiElement(SET_OPTIONS)('(?')
+        RegExpOptionsImpl: <x>
+          PsiElement(OPTIONS_ON)('x')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <\ >
+        PsiElement(CHARACTER)('\ ')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
+      RegExpCharImpl: <\ >
+        PsiElement(CHARACTER)('\ ')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Bug8.txt b/RegExpSupport/testData/psi/Bug8.txt
new file mode 100644 (file)
index 0000000..f22e724
--- /dev/null
@@ -0,0 +1,137 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a<weak_warning descr="Redundant character escape">\ </weak_warning>b>
+    RegExpBranchImpl: <a<weak_warning descr="Redundant character escape">\ </weak_warning>b>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <<>
+        PsiElement(CHARACTER)('<')
+      RegExpCharImpl: <w>
+        PsiElement(CHARACTER)('w')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <k>
+        PsiElement(CHARACTER)('k')
+      RegExpCharImpl: <_>
+        PsiElement(CHARACTER)('_')
+      RegExpCharImpl: <w>
+        PsiElement(CHARACTER)('w')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <r>
+        PsiElement(CHARACTER)('r')
+      RegExpCharImpl: <n>
+        PsiElement(CHARACTER)('n')
+      RegExpCharImpl: <i>
+        PsiElement(CHARACTER)('i')
+      RegExpCharImpl: <n>
+        PsiElement(CHARACTER)('n')
+      RegExpCharImpl: <g>
+        PsiElement(CHARACTER)('g')
+      RegExpCharImpl: < >
+        PsiElement(CHARACTER)(' ')
+      RegExpCharImpl: <d>
+        PsiElement(CHARACTER)('d')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
+      RegExpCharImpl: <s>
+        PsiElement(CHARACTER)('s')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpCharImpl: <r>
+        PsiElement(CHARACTER)('r')
+      RegExpCharImpl: <=>
+        PsiElement(CHARACTER)('=')
+      RegExpCharImpl: <">
+        PsiElement(CHARACTER)('"')
+      RegExpCharImpl: <R>
+        PsiElement(CHARACTER)('R')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
+      RegExpCharImpl: <d>
+        PsiElement(CHARACTER)('d')
+      RegExpCharImpl: <u>
+        PsiElement(CHARACTER)('u')
+      RegExpCharImpl: <n>
+        PsiElement(CHARACTER)('n')
+      RegExpCharImpl: <d>
+        PsiElement(CHARACTER)('d')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <n>
+        PsiElement(CHARACTER)('n')
+      RegExpCharImpl: <t>
+        PsiElement(CHARACTER)('t')
+      RegExpCharImpl: < >
+        PsiElement(CHARACTER)(' ')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpCharImpl: <h>
+        PsiElement(CHARACTER)('h')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <r>
+        PsiElement(CHARACTER)('r')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpCharImpl: <t>
+        PsiElement(CHARACTER)('t')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
+      RegExpCharImpl: <r>
+        PsiElement(CHARACTER)('r')
+      RegExpCharImpl: < >
+        PsiElement(CHARACTER)(' ')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
+      RegExpCharImpl: <s>
+        PsiElement(CHARACTER)('s')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <p>
+        PsiElement(CHARACTER)('p')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
+      RegExpCharImpl: <">
+        PsiElement(CHARACTER)('"')
+      RegExpCharImpl: <>>
+        PsiElement(CHARACTER)('>')
+      RegExpCharImpl: <\ >
+        PsiElement(REDUNDANT_ESCAPE)('\ ')
+      RegExpCharImpl: <<>
+        PsiElement(CHARACTER)('<')
+      RegExpCharImpl: </>
+        PsiElement(CHARACTER)('/')
+      RegExpCharImpl: <w>
+        PsiElement(CHARACTER)('w')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <k>
+        PsiElement(CHARACTER)('k')
+      RegExpCharImpl: <_>
+        PsiElement(CHARACTER)('_')
+      RegExpCharImpl: <w>
+        PsiElement(CHARACTER)('w')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <r>
+        PsiElement(CHARACTER)('r')
+      RegExpCharImpl: <n>
+        PsiElement(CHARACTER)('n')
+      RegExpCharImpl: <i>
+        PsiElement(CHARACTER)('i')
+      RegExpCharImpl: <n>
+        PsiElement(CHARACTER)('n')
+      RegExpCharImpl: <g>
+        PsiElement(CHARACTER)('g')
+      RegExpCharImpl: <>>
+        PsiElement(CHARACTER)('>')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Bug9.txt b/RegExpSupport/testData/psi/Bug9.txt
new file mode 100644 (file)
index 0000000..35bf17b
--- /dev/null
@@ -0,0 +1,32 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(^|\.)\*(?=(\.|$))>
+    RegExpBranchImpl: <(^|\.)\*(?=(\.|$))>
+      RegExpGroupImpl: <(^|\.)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <^|\.>
+          RegExpBranchImpl: <^>
+            RegExpBoundaryImpl: <^>
+              PsiElement(CARET)('^')
+          PsiElement(UNION)('|')
+          RegExpBranchImpl: <\.>
+            RegExpCharImpl: <\.>
+              PsiElement(ESC_CHARACTER)('\.')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <\*>
+        PsiElement(ESC_CHARACTER)('\*')
+      RegExpGroupImpl: <(?=(\.|$))>
+        PsiElement(POS_LOOKAHEAD)('(?=')
+        RegExpPatternImpl: <(\.|$)>
+          RegExpBranchImpl: <(\.|$)>
+            RegExpGroupImpl: <(\.|$)>
+              PsiElement(GROUP_BEGIN)('(')
+              RegExpPatternImpl: <\.|$>
+                RegExpBranchImpl: <\.>
+                  RegExpCharImpl: <\.>
+                    PsiElement(ESC_CHARACTER)('\.')
+                PsiElement(UNION)('|')
+                RegExpBranchImpl: <$>
+                  RegExpBoundaryImpl: <$>
+                    PsiElement(DOLLAR)('$')
+              PsiElement(GROUP_END)(')')
+        PsiElement(GROUP_END)(')')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses1.txt b/RegExpSupport/testData/psi/Charclasses1.txt
new file mode 100644 (file)
index 0000000..82ab254
--- /dev/null
@@ -0,0 +1,15 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[bc]d>
+    RegExpBranchImpl: <a[bc]d>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[bc]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <bc>
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+        PsiElement(CLASS_END)(']')
+      RegExpCharImpl: <d>
+        PsiElement(CHARACTER)('d')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses10.txt b/RegExpSupport/testData/psi/Charclasses10.txt
new file mode 100644 (file)
index 0000000..4afc1e5
--- /dev/null
@@ -0,0 +1,14 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[b&&-]>
+    RegExpBranchImpl: <a[b&&-]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[b&&-]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpIntersectionImpl: <b&&->
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+          PsiElement(ANDAND)('&&')
+          RegExpCharImpl: <->
+            PsiElement(MINUS)('-')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses11.txt b/RegExpSupport/testData/psi/Charclasses11.txt
new file mode 100644 (file)
index 0000000..e91dcd2
--- /dev/null
@@ -0,0 +1,17 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[b&&-b]>
+    RegExpBranchImpl: <a[b&&-b]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[b&&-b]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpIntersectionImpl: <b&&-b>
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+          PsiElement(ANDAND)('&&')
+          RegExpUnionImpl: <-b>
+            RegExpCharImpl: <->
+              PsiElement(MINUS)('-')
+            RegExpCharImpl: <b>
+              PsiElement(CHARACTER)('b')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses12.txt b/RegExpSupport/testData/psi/Charclasses12.txt
new file mode 100644 (file)
index 0000000..31d0066
--- /dev/null
@@ -0,0 +1,8 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[&&]>
+    RegExpBranchImpl: <[&&]>
+      RegExpClassImpl: <[&&]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpIntersectionImpl: <&&>
+          PsiElement(ANDAND)('&&')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses13.txt b/RegExpSupport/testData/psi/Charclasses13.txt
new file mode 100644 (file)
index 0000000..01c7f27
--- /dev/null
@@ -0,0 +1,14 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[&&[^\d]]>
+    RegExpBranchImpl: <[&&[^\d]]>
+      RegExpClassImpl: <[&&[^\d]]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpIntersectionImpl: <&&[^\d]>
+          PsiElement(ANDAND)('&&')
+          RegExpClassImpl: <[^\d]>
+            PsiElement(CLASS_BEGIN)('[')
+            PsiElement(CARET)('^')
+            RegExpSimpleClassImpl: <\d>
+              PsiElement(CHAR_CLASS)('\d')
+            PsiElement(CLASS_END)(']')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses14.txt b/RegExpSupport/testData/psi/Charclasses14.txt
new file mode 100644 (file)
index 0000000..85a66ba
--- /dev/null
@@ -0,0 +1,10 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[a&&]>
+    RegExpBranchImpl: <[a&&]>
+      RegExpClassImpl: <[a&&]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpIntersectionImpl: <a&&>
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          PsiElement(ANDAND)('&&')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses15.txt b/RegExpSupport/testData/psi/Charclasses15.txt
new file mode 100644 (file)
index 0000000..d9723a3
--- /dev/null
@@ -0,0 +1,17 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[b&&c&&d]>
+    RegExpBranchImpl: <a[b&&c&&d]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[b&&c&&d]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpIntersectionImpl: <b&&c&&d>
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+          PsiElement(ANDAND)('&&')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          PsiElement(ANDAND)('&&')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses16.txt b/RegExpSupport/testData/psi/Charclasses16.txt
new file mode 100644 (file)
index 0000000..717220c
--- /dev/null
@@ -0,0 +1,24 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[b&&c&&d-e&&f]>
+    RegExpBranchImpl: <a[b&&c&&d-e&&f]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[b&&c&&d-e&&f]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpIntersectionImpl: <b&&c&&d-e&&f>
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+          PsiElement(ANDAND)('&&')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          PsiElement(ANDAND)('&&')
+          RegExpCharRangeImpl: <d-e>
+            RegExpCharImpl: <d>
+              PsiElement(CHARACTER)('d')
+            PsiElement(MINUS)('-')
+            RegExpCharImpl: <e>
+              PsiElement(CHARACTER)('e')
+          PsiElement(ANDAND)('&&')
+          RegExpCharImpl: <f>
+            PsiElement(CHARACTER)('f')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses17.txt b/RegExpSupport/testData/psi/Charclasses17.txt
new file mode 100644 (file)
index 0000000..85a66ba
--- /dev/null
@@ -0,0 +1,10 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[a&&]>
+    RegExpBranchImpl: <[a&&]>
+      RegExpClassImpl: <[a&&]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpIntersectionImpl: <a&&>
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          PsiElement(ANDAND)('&&')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses18.txt b/RegExpSupport/testData/psi/Charclasses18.txt
new file mode 100644 (file)
index 0000000..7bbc99f
--- /dev/null
@@ -0,0 +1,21 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[a[b][c]]>
+    RegExpBranchImpl: <a[a[b][c]]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[a[b][c]]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <a[b][c]>
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpClassImpl: <[b]>
+            PsiElement(CLASS_BEGIN)('[')
+            RegExpCharImpl: <b>
+              PsiElement(CHARACTER)('b')
+            PsiElement(CLASS_END)(']')
+          RegExpClassImpl: <[c]>
+            PsiElement(CLASS_BEGIN)('[')
+            RegExpCharImpl: <c>
+              PsiElement(CHARACTER)('c')
+            PsiElement(CLASS_END)(']')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses19.txt b/RegExpSupport/testData/psi/Charclasses19.txt
new file mode 100644 (file)
index 0000000..c50dc2e
--- /dev/null
@@ -0,0 +1,16 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[a-[]]>
+    RegExpBranchImpl: <[a-[]]>
+      RegExpClassImpl: <[a-[]]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharImpl: <a>
+          PsiElement(CHARACTER)('a')
+        RegExpCharImpl: <->
+          PsiElement(MINUS)('-')
+        RegExpClassImpl: <[]]>
+          PsiElement(CLASS_BEGIN)('[')
+          RegExpCharImpl: <]>
+            PsiElement(CHARACTER)(']')
+          PsiElement(CLASS_END)(']')
+        PsiErrorElement:Unclosed character class
+          <empty list>
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses2.txt b/RegExpSupport/testData/psi/Charclasses2.txt
new file mode 100644 (file)
index 0000000..c2f6db2
--- /dev/null
@@ -0,0 +1,16 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[b-d]e>
+    RegExpBranchImpl: <a[b-d]e>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[b-d]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharRangeImpl: <b-d>
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+          PsiElement(MINUS)('-')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+        PsiElement(CLASS_END)(']')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses20.txt b/RegExpSupport/testData/psi/Charclasses20.txt
new file mode 100644 (file)
index 0000000..20afd78
--- /dev/null
@@ -0,0 +1,15 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[a-[b>
+    RegExpBranchImpl: <[a-[b>
+      RegExpClassImpl: <[a-[b>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharImpl: <a>
+          PsiElement(CHARACTER)('a')
+        RegExpCharImpl: <->
+          PsiElement(MINUS)('-')
+        RegExpClassImpl: <[b>
+          PsiElement(CLASS_BEGIN)('[')
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+          PsiErrorElement:Unclosed character class
+            <empty list>
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses21.txt b/RegExpSupport/testData/psi/Charclasses21.txt
new file mode 100644 (file)
index 0000000..03cdac1
--- /dev/null
@@ -0,0 +1,15 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[a[^b]]>
+    RegExpBranchImpl: <[a[^b]]>
+      RegExpClassImpl: <[a[^b]]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <a[^b]>
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpClassImpl: <[^b]>
+            PsiElement(CLASS_BEGIN)('[')
+            PsiElement(CARET)('^')
+            RegExpCharImpl: <b>
+              PsiElement(CHARACTER)('b')
+            PsiElement(CLASS_END)(']')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses22.txt b/RegExpSupport/testData/psi/Charclasses22.txt
new file mode 100644 (file)
index 0000000..f26f00c
--- /dev/null
@@ -0,0 +1,27 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[a[b[c]][d]]>
+    RegExpBranchImpl: <a[a[b[c]][d]]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[a[b[c]][d]]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <a[b[c]][d]>
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpClassImpl: <[b[c]]>
+            PsiElement(CLASS_BEGIN)('[')
+            RegExpUnionImpl: <b[c]>
+              RegExpCharImpl: <b>
+                PsiElement(CHARACTER)('b')
+              RegExpClassImpl: <[c]>
+                PsiElement(CLASS_BEGIN)('[')
+                RegExpCharImpl: <c>
+                  PsiElement(CHARACTER)('c')
+                PsiElement(CLASS_END)(']')
+            PsiElement(CLASS_END)(']')
+          RegExpClassImpl: <[d]>
+            PsiElement(CLASS_BEGIN)('[')
+            RegExpCharImpl: <d>
+              PsiElement(CHARACTER)('d')
+            PsiElement(CLASS_END)(']')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses23.txt b/RegExpSupport/testData/psi/Charclasses23.txt
new file mode 100644 (file)
index 0000000..01cdfcc
--- /dev/null
@@ -0,0 +1,14 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[\t--]>
+    RegExpBranchImpl: <a[\t--]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[\t--]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharRangeImpl: <\t-->
+          RegExpCharImpl: <\t>
+            PsiElement(ESC_CTRL_CHARACTER)('\t')
+          PsiElement(MINUS)('-')
+          RegExpCharImpl: <->
+            PsiElement(MINUS)('-')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses24.txt b/RegExpSupport/testData/psi/Charclasses24.txt
new file mode 100644 (file)
index 0000000..01cdfcc
--- /dev/null
@@ -0,0 +1,14 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[\t--]>
+    RegExpBranchImpl: <a[\t--]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[\t--]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharRangeImpl: <\t-->
+          RegExpCharImpl: <\t>
+            PsiElement(ESC_CTRL_CHARACTER)('\t')
+          PsiElement(MINUS)('-')
+          RegExpCharImpl: <->
+            PsiElement(MINUS)('-')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses25.txt b/RegExpSupport/testData/psi/Charclasses25.txt
new file mode 100644 (file)
index 0000000..6045dd9
--- /dev/null
@@ -0,0 +1,17 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[\t---]>
+    RegExpBranchImpl: <a[\t---]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[\t---]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <\t--->
+          RegExpCharRangeImpl: <\t-->
+            RegExpCharImpl: <\t>
+              PsiElement(ESC_CTRL_CHARACTER)('\t')
+            PsiElement(MINUS)('-')
+            RegExpCharImpl: <->
+              PsiElement(MINUS)('-')
+          RegExpCharImpl: <->
+            PsiElement(MINUS)('-')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses26.txt b/RegExpSupport/testData/psi/Charclasses26.txt
new file mode 100644 (file)
index 0000000..5ecaf07
--- /dev/null
@@ -0,0 +1,15 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[-]?c>
+    RegExpBranchImpl: <a[-]?c>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClosureImpl: <[-]?>
+        RegExpClassImpl: <[-]>
+          PsiElement(CLASS_BEGIN)('[')
+          RegExpCharImpl: <->
+            PsiElement(MINUS)('-')
+          PsiElement(CLASS_END)(']')
+        RegExpQuantifierImpl: <?>
+          PsiElement(QUEST)('?')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses27.txt b/RegExpSupport/testData/psi/Charclasses27.txt
new file mode 100644 (file)
index 0000000..4ba25cb
--- /dev/null
@@ -0,0 +1,9 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[>
+    RegExpBranchImpl: <a[>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[>
+        PsiElement(CLASS_BEGIN)('[')
+        PsiErrorElement:Unclosed character class
+          <empty list>
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses28.txt b/RegExpSupport/testData/psi/Charclasses28.txt
new file mode 100644 (file)
index 0000000..ae455a7
--- /dev/null
@@ -0,0 +1,7 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a]>
+    RegExpBranchImpl: <a]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <]>
+        PsiElement(CHARACTER)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses29.txt b/RegExpSupport/testData/psi/Charclasses29.txt
new file mode 100644 (file)
index 0000000..6a12a7d
--- /dev/null
@@ -0,0 +1,13 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[a-[>
+    RegExpBranchImpl: <[a-[>
+      RegExpClassImpl: <[a-[>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharImpl: <a>
+          PsiElement(CHARACTER)('a')
+        RegExpCharImpl: <->
+          PsiElement(MINUS)('-')
+        RegExpClassImpl: <[>
+          PsiElement(CLASS_BEGIN)('[')
+          PsiErrorElement:Unclosed character class
+            <empty list>
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses3.txt b/RegExpSupport/testData/psi/Charclasses3.txt
new file mode 100644 (file)
index 0000000..bea955e
--- /dev/null
@@ -0,0 +1,14 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[b-d]>
+    RegExpBranchImpl: <a[b-d]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[b-d]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharRangeImpl: <b-d>
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+          PsiElement(MINUS)('-')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses30.txt b/RegExpSupport/testData/psi/Charclasses30.txt
new file mode 100644 (file)
index 0000000..5738dca
--- /dev/null
@@ -0,0 +1,10 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[]]>
+    RegExpBranchImpl: <a[]]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[]]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharImpl: <]>
+          PsiElement(CHARACTER)(']')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses31.txt b/RegExpSupport/testData/psi/Charclasses31.txt
new file mode 100644 (file)
index 0000000..c0a7aae
--- /dev/null
@@ -0,0 +1,16 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[^bc]d>
+    RegExpBranchImpl: <a[^bc]d>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[^bc]>
+        PsiElement(CLASS_BEGIN)('[')
+        PsiElement(CARET)('^')
+        RegExpUnionImpl: <bc>
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+        PsiElement(CLASS_END)(']')
+      RegExpCharImpl: <d>
+        PsiElement(CHARACTER)('d')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses32.txt b/RegExpSupport/testData/psi/Charclasses32.txt
new file mode 100644 (file)
index 0000000..9c0ea2e
--- /dev/null
@@ -0,0 +1,14 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[^bc]>
+    RegExpBranchImpl: <a[^bc]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[^bc]>
+        PsiElement(CLASS_BEGIN)('[')
+        PsiElement(CARET)('^')
+        RegExpUnionImpl: <bc>
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses33.txt b/RegExpSupport/testData/psi/Charclasses33.txt
new file mode 100644 (file)
index 0000000..1e151b4
--- /dev/null
@@ -0,0 +1,14 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[]b>
+    RegExpBranchImpl: <a[]b>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[]b>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <]b>
+          RegExpCharImpl: <]>
+            PsiElement(CHARACTER)(']')
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+        PsiErrorElement:Unclosed character class
+          <empty list>
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses34.txt b/RegExpSupport/testData/psi/Charclasses34.txt
new file mode 100644 (file)
index 0000000..8d4de65
--- /dev/null
@@ -0,0 +1,10 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[^]>
+    RegExpBranchImpl: <[^]>
+      RegExpClassImpl: <[^]>
+        PsiElement(CLASS_BEGIN)('[')
+        PsiElement(CARET)('^')
+        RegExpCharImpl: <]>
+          PsiElement(CHARACTER)(']')
+        PsiErrorElement:Unclosed character class
+          <empty list>
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses35.txt b/RegExpSupport/testData/psi/Charclasses35.txt
new file mode 100644 (file)
index 0000000..3f1d69d
--- /dev/null
@@ -0,0 +1,27 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[abhgefdc]ij>
+    RegExpBranchImpl: <[abhgefdc]ij>
+      RegExpClassImpl: <[abhgefdc]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <abhgefdc>
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+          RegExpCharImpl: <h>
+            PsiElement(CHARACTER)('h')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <f>
+            PsiElement(CHARACTER)('f')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+        PsiElement(CLASS_END)(']')
+      RegExpCharImpl: <i>
+        PsiElement(CHARACTER)('i')
+      RegExpCharImpl: <j>
+        PsiElement(CHARACTER)('j')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses36.txt b/RegExpSupport/testData/psi/Charclasses36.txt
new file mode 100644 (file)
index 0000000..b5eead6
--- /dev/null
@@ -0,0 +1,48 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[a-zA-Z_][a-zA-Z0-9_]*>
+    RegExpBranchImpl: <[a-zA-Z_][a-zA-Z0-9_]*>
+      RegExpClassImpl: <[a-zA-Z_]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <a-zA-Z_>
+          RegExpCharRangeImpl: <a-z>
+            RegExpCharImpl: <a>
+              PsiElement(CHARACTER)('a')
+            PsiElement(MINUS)('-')
+            RegExpCharImpl: <z>
+              PsiElement(CHARACTER)('z')
+          RegExpCharRangeImpl: <A-Z>
+            RegExpCharImpl: <A>
+              PsiElement(CHARACTER)('A')
+            PsiElement(MINUS)('-')
+            RegExpCharImpl: <Z>
+              PsiElement(CHARACTER)('Z')
+          RegExpCharImpl: <_>
+            PsiElement(CHARACTER)('_')
+        PsiElement(CLASS_END)(']')
+      RegExpClosureImpl: <[a-zA-Z0-9_]*>
+        RegExpClassImpl: <[a-zA-Z0-9_]>
+          PsiElement(CLASS_BEGIN)('[')
+          RegExpUnionImpl: <a-zA-Z0-9_>
+            RegExpCharRangeImpl: <a-z>
+              RegExpCharImpl: <a>
+                PsiElement(CHARACTER)('a')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <z>
+                PsiElement(CHARACTER)('z')
+            RegExpCharRangeImpl: <A-Z>
+              RegExpCharImpl: <A>
+                PsiElement(CHARACTER)('A')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <Z>
+                PsiElement(CHARACTER)('Z')
+            RegExpCharRangeImpl: <0-9>
+              RegExpCharImpl: <0>
+                PsiElement(CHARACTER)('0')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <9>
+                PsiElement(CHARACTER)('9')
+            RegExpCharImpl: <_>
+              PsiElement(CHARACTER)('_')
+          PsiElement(CLASS_END)(']')
+        RegExpQuantifierImpl: <*>
+          PsiElement(STAR)('*')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses37.txt b/RegExpSupport/testData/psi/Charclasses37.txt
new file mode 100644 (file)
index 0000000..3728221
--- /dev/null
@@ -0,0 +1,23 @@
+REGEXP_FILE
+  RegExpPatternImpl: <([a-c]+?)c>
+    RegExpBranchImpl: <([a-c]+?)c>
+      RegExpGroupImpl: <([a-c]+?)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <[a-c]+?>
+          RegExpBranchImpl: <[a-c]+?>
+            RegExpClosureImpl: <[a-c]+?>
+              RegExpClassImpl: <[a-c]>
+                PsiElement(CLASS_BEGIN)('[')
+                RegExpCharRangeImpl: <a-c>
+                  RegExpCharImpl: <a>
+                    PsiElement(CHARACTER)('a')
+                  PsiElement(MINUS)('-')
+                  RegExpCharImpl: <c>
+                    PsiElement(CHARACTER)('c')
+                PsiElement(CLASS_END)(']')
+              RegExpQuantifierImpl: <+?>
+                PsiElement(PLUS)('+')
+                PsiElement(QUEST)('?')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses38.txt b/RegExpSupport/testData/psi/Charclasses38.txt
new file mode 100644 (file)
index 0000000..af9470e
--- /dev/null
@@ -0,0 +1,22 @@
+REGEXP_FILE
+  RegExpPatternImpl: <([ab]*?)b>
+    RegExpBranchImpl: <([ab]*?)b>
+      RegExpGroupImpl: <([ab]*?)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <[ab]*?>
+          RegExpBranchImpl: <[ab]*?>
+            RegExpClosureImpl: <[ab]*?>
+              RegExpClassImpl: <[ab]>
+                PsiElement(CLASS_BEGIN)('[')
+                RegExpUnionImpl: <ab>
+                  RegExpCharImpl: <a>
+                    PsiElement(CHARACTER)('a')
+                  RegExpCharImpl: <b>
+                    PsiElement(CHARACTER)('b')
+                PsiElement(CLASS_END)(']')
+              RegExpQuantifierImpl: <*?>
+                PsiElement(STAR)('*')
+                PsiElement(QUEST)('?')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses39.txt b/RegExpSupport/testData/psi/Charclasses39.txt
new file mode 100644 (file)
index 0000000..9556e8c
--- /dev/null
@@ -0,0 +1,21 @@
+REGEXP_FILE
+  RegExpPatternImpl: <([ab]*)b>
+    RegExpBranchImpl: <([ab]*)b>
+      RegExpGroupImpl: <([ab]*)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <[ab]*>
+          RegExpBranchImpl: <[ab]*>
+            RegExpClosureImpl: <[ab]*>
+              RegExpClassImpl: <[ab]>
+                PsiElement(CLASS_BEGIN)('[')
+                RegExpUnionImpl: <ab>
+                  RegExpCharImpl: <a>
+                    PsiElement(CHARACTER)('a')
+                  RegExpCharImpl: <b>
+                    PsiElement(CHARACTER)('b')
+                PsiElement(CLASS_END)(']')
+              RegExpQuantifierImpl: <*>
+                PsiElement(STAR)('*')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses4.txt b/RegExpSupport/testData/psi/Charclasses4.txt
new file mode 100644 (file)
index 0000000..31a753b
--- /dev/null
@@ -0,0 +1,14 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[b-a]>
+    RegExpBranchImpl: <a[b-a]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[b-a]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharRangeImpl: <b-a>
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+          PsiElement(MINUS)('-')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses40.txt b/RegExpSupport/testData/psi/Charclasses40.txt
new file mode 100644 (file)
index 0000000..9dca6a9
--- /dev/null
@@ -0,0 +1,22 @@
+REGEXP_FILE
+  RegExpPatternImpl: <([ab]??)b>
+    RegExpBranchImpl: <([ab]??)b>
+      RegExpGroupImpl: <([ab]??)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <[ab]??>
+          RegExpBranchImpl: <[ab]??>
+            RegExpClosureImpl: <[ab]??>
+              RegExpClassImpl: <[ab]>
+                PsiElement(CLASS_BEGIN)('[')
+                RegExpUnionImpl: <ab>
+                  RegExpCharImpl: <a>
+                    PsiElement(CHARACTER)('a')
+                  RegExpCharImpl: <b>
+                    PsiElement(CHARACTER)('b')
+                PsiElement(CLASS_END)(']')
+              RegExpQuantifierImpl: <??>
+                PsiElement(QUEST)('?')
+                PsiElement(QUEST)('?')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses41.txt b/RegExpSupport/testData/psi/Charclasses41.txt
new file mode 100644 (file)
index 0000000..a632d53
--- /dev/null
@@ -0,0 +1,23 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(c[ab]?)b>
+    RegExpBranchImpl: <(c[ab]?)b>
+      RegExpGroupImpl: <(c[ab]?)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <c[ab]?>
+          RegExpBranchImpl: <c[ab]?>
+            RegExpCharImpl: <c>
+              PsiElement(CHARACTER)('c')
+            RegExpClosureImpl: <[ab]?>
+              RegExpClassImpl: <[ab]>
+                PsiElement(CLASS_BEGIN)('[')
+                RegExpUnionImpl: <ab>
+                  RegExpCharImpl: <a>
+                    PsiElement(CHARACTER)('a')
+                  RegExpCharImpl: <b>
+                    PsiElement(CHARACTER)('b')
+                PsiElement(CLASS_END)(']')
+              RegExpQuantifierImpl: <?>
+                PsiElement(QUEST)('?')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses42.txt b/RegExpSupport/testData/psi/Charclasses42.txt
new file mode 100644 (file)
index 0000000..006ffb8
--- /dev/null
@@ -0,0 +1,24 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(c[ab]??)b>
+    RegExpBranchImpl: <(c[ab]??)b>
+      RegExpGroupImpl: <(c[ab]??)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <c[ab]??>
+          RegExpBranchImpl: <c[ab]??>
+            RegExpCharImpl: <c>
+              PsiElement(CHARACTER)('c')
+            RegExpClosureImpl: <[ab]??>
+              RegExpClassImpl: <[ab]>
+                PsiElement(CLASS_BEGIN)('[')
+                RegExpUnionImpl: <ab>
+                  RegExpCharImpl: <a>
+                    PsiElement(CHARACTER)('a')
+                  RegExpCharImpl: <b>
+                    PsiElement(CHARACTER)('b')
+                PsiElement(CLASS_END)(']')
+              RegExpQuantifierImpl: <??>
+                PsiElement(QUEST)('?')
+                PsiElement(QUEST)('?')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses43.txt b/RegExpSupport/testData/psi/Charclasses43.txt
new file mode 100644 (file)
index 0000000..2170f3b
--- /dev/null
@@ -0,0 +1,24 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(c[ab]*?)b>
+    RegExpBranchImpl: <(c[ab]*?)b>
+      RegExpGroupImpl: <(c[ab]*?)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <c[ab]*?>
+          RegExpBranchImpl: <c[ab]*?>
+            RegExpCharImpl: <c>
+              PsiElement(CHARACTER)('c')
+            RegExpClosureImpl: <[ab]*?>
+              RegExpClassImpl: <[ab]>
+                PsiElement(CLASS_BEGIN)('[')
+                RegExpUnionImpl: <ab>
+                  RegExpCharImpl: <a>
+                    PsiElement(CHARACTER)('a')
+                  RegExpCharImpl: <b>
+                    PsiElement(CHARACTER)('b')
+                PsiElement(CLASS_END)(']')
+              RegExpQuantifierImpl: <*?>
+                PsiElement(STAR)('*')
+                PsiElement(QUEST)('?')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses44.txt b/RegExpSupport/testData/psi/Charclasses44.txt
new file mode 100644 (file)
index 0000000..38a9020
--- /dev/null
@@ -0,0 +1,30 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[bcd]+dcdcde>
+    RegExpBranchImpl: <a[bcd]+dcdcde>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClosureImpl: <[bcd]+>
+        RegExpClassImpl: <[bcd]>
+          PsiElement(CLASS_BEGIN)('[')
+          RegExpUnionImpl: <bcd>
+            RegExpCharImpl: <b>
+              PsiElement(CHARACTER)('b')
+            RegExpCharImpl: <c>
+              PsiElement(CHARACTER)('c')
+            RegExpCharImpl: <d>
+              PsiElement(CHARACTER)('d')
+          PsiElement(CLASS_END)(']')
+        RegExpQuantifierImpl: <+>
+          PsiElement(PLUS)('+')
+      RegExpCharImpl: <d>
+        PsiElement(CHARACTER)('d')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpCharImpl: <d>
+        PsiElement(CHARACTER)('d')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpCharImpl: <d>
+        PsiElement(CHARACTER)('d')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses45.txt b/RegExpSupport/testData/psi/Charclasses45.txt
new file mode 100644 (file)
index 0000000..81b90e4
--- /dev/null
@@ -0,0 +1,8 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[k]>
+    RegExpBranchImpl: <[k]>
+      RegExpClassImpl: <[k]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharImpl: <k>
+          PsiElement(CHARACTER)('k')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses46.txt b/RegExpSupport/testData/psi/Charclasses46.txt
new file mode 100644 (file)
index 0000000..0fa5dd1
--- /dev/null
@@ -0,0 +1,30 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[bcd]*dcdcde>
+    RegExpBranchImpl: <a[bcd]*dcdcde>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClosureImpl: <[bcd]*>
+        RegExpClassImpl: <[bcd]>
+          PsiElement(CLASS_BEGIN)('[')
+          RegExpUnionImpl: <bcd>
+            RegExpCharImpl: <b>
+              PsiElement(CHARACTER)('b')
+            RegExpCharImpl: <c>
+              PsiElement(CHARACTER)('c')
+            RegExpCharImpl: <d>
+              PsiElement(CHARACTER)('d')
+          PsiElement(CLASS_END)(']')
+        RegExpQuantifierImpl: <*>
+          PsiElement(STAR)('*')
+      RegExpCharImpl: <d>
+        PsiElement(CHARACTER)('d')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpCharImpl: <d>
+        PsiElement(CHARACTER)('d')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpCharImpl: <d>
+        PsiElement(CHARACTER)('d')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses47.txt b/RegExpSupport/testData/psi/Charclasses47.txt
new file mode 100644 (file)
index 0000000..10f5355
--- /dev/null
@@ -0,0 +1,15 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[^ab]*>
+    RegExpBranchImpl: <[^ab]*>
+      RegExpClosureImpl: <[^ab]*>
+        RegExpClassImpl: <[^ab]>
+          PsiElement(CLASS_BEGIN)('[')
+          PsiElement(CARET)('^')
+          RegExpUnionImpl: <ab>
+            RegExpCharImpl: <a>
+              PsiElement(CHARACTER)('a')
+            RegExpCharImpl: <b>
+              PsiElement(CHARACTER)('b')
+          PsiElement(CLASS_END)(']')
+        RegExpQuantifierImpl: <*>
+          PsiElement(STAR)('*')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses48.txt b/RegExpSupport/testData/psi/Charclasses48.txt
new file mode 100644 (file)
index 0000000..a696a5a
--- /dev/null
@@ -0,0 +1,12 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[.]b>
+    RegExpBranchImpl: <a[.]b>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[.]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharImpl: <.>
+          PsiElement(CHARACTER)('.')
+        PsiElement(CLASS_END)(']')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses49.txt b/RegExpSupport/testData/psi/Charclasses49.txt
new file mode 100644 (file)
index 0000000..e5ee564
--- /dev/null
@@ -0,0 +1,17 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[+*?]b>
+    RegExpBranchImpl: <a[+*?]b>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[+*?]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <+*?>
+          RegExpCharImpl: <+>
+            PsiElement(CHARACTER)('+')
+          RegExpCharImpl: <*>
+            PsiElement(CHARACTER)('*')
+          RegExpCharImpl: <?>
+            PsiElement(CHARACTER)('?')
+        PsiElement(CLASS_END)(']')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses5.txt b/RegExpSupport/testData/psi/Charclasses5.txt
new file mode 100644 (file)
index 0000000..b647ac4
--- /dev/null
@@ -0,0 +1,13 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[-b]>
+    RegExpBranchImpl: <a[-b]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[-b]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <-b>
+          RegExpCharImpl: <->
+            PsiElement(MINUS)('-')
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses50.txt b/RegExpSupport/testData/psi/Charclasses50.txt
new file mode 100644 (file)
index 0000000..a3f927a
--- /dev/null
@@ -0,0 +1,21 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[\p{IsDigit}\p{IsAlpha}]b>
+    RegExpBranchImpl: <a[\p{IsDigit}\p{IsAlpha}]b>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[\p{IsDigit}\p{IsAlpha}]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <\p{IsDigit}\p{IsAlpha}>
+          RegExpPropertyImpl: <\p{IsDigit}>
+            PsiElement(PROPERTY)('\p')
+            PsiElement(LBRACE)('{')
+            PsiElement(NAME)('IsDigit')
+            PsiElement(RBRACE)('}')
+          RegExpPropertyImpl: <\p{IsAlpha}>
+            PsiElement(PROPERTY)('\p')
+            PsiElement(LBRACE)('{')
+            PsiElement(NAME)('IsAlpha')
+            PsiElement(RBRACE)('}')
+        PsiElement(CLASS_END)(']')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses51.txt b/RegExpSupport/testData/psi/Charclasses51.txt
new file mode 100644 (file)
index 0000000..03cefc7
--- /dev/null
@@ -0,0 +1,22 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[\p{L}&&[^\p{Lu}]]>
+    RegExpBranchImpl: <[\p{L}&&[^\p{Lu}]]>
+      RegExpClassImpl: <[\p{L}&&[^\p{Lu}]]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpIntersectionImpl: <\p{L}&&[^\p{Lu}]>
+          RegExpPropertyImpl: <\p{L}>
+            PsiElement(PROPERTY)('\p')
+            PsiElement(LBRACE)('{')
+            PsiElement(NAME)('L')
+            PsiElement(RBRACE)('}')
+          PsiElement(ANDAND)('&&')
+          RegExpClassImpl: <[^\p{Lu}]>
+            PsiElement(CLASS_BEGIN)('[')
+            PsiElement(CARET)('^')
+            RegExpPropertyImpl: <\p{Lu}>
+              PsiElement(PROPERTY)('\p')
+              PsiElement(LBRACE)('{')
+              PsiElement(NAME)('Lu')
+              PsiElement(RBRACE)('}')
+            PsiElement(CLASS_END)(']')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses52.txt b/RegExpSupport/testData/psi/Charclasses52.txt
new file mode 100644 (file)
index 0000000..72ea66c
--- /dev/null
@@ -0,0 +1,45 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\pL\pM\pZ\pS\pN\pP\pC\PL\PM\PZ\PS\PN\PP\PC>
+    RegExpBranchImpl: <\pL\pM\pZ\pS\pN\pP\pC\PL\PM\PZ\PS\PN\PP\PC>
+      RegExpPropertyImpl: <\pL>
+        PsiElement(PROPERTY)('\p')
+        PsiElement(CATEGORY_SHORT_HAND)('L')
+      RegExpPropertyImpl: <\pM>
+        PsiElement(PROPERTY)('\p')
+        PsiElement(CATEGORY_SHORT_HAND)('M')
+      RegExpPropertyImpl: <\pZ>
+        PsiElement(PROPERTY)('\p')
+        PsiElement(CATEGORY_SHORT_HAND)('Z')
+      RegExpPropertyImpl: <\pS>
+        PsiElement(PROPERTY)('\p')
+        PsiElement(CATEGORY_SHORT_HAND)('S')
+      RegExpPropertyImpl: <\pN>
+        PsiElement(PROPERTY)('\p')
+        PsiElement(CATEGORY_SHORT_HAND)('N')
+      RegExpPropertyImpl: <\pP>
+        PsiElement(PROPERTY)('\p')
+        PsiElement(CATEGORY_SHORT_HAND)('P')
+      RegExpPropertyImpl: <\pC>
+        PsiElement(PROPERTY)('\p')
+        PsiElement(CATEGORY_SHORT_HAND)('C')
+      RegExpPropertyImpl: <\PL>
+        PsiElement(PROPERTY)('\P')
+        PsiElement(CATEGORY_SHORT_HAND)('L')
+      RegExpPropertyImpl: <\PM>
+        PsiElement(PROPERTY)('\P')
+        PsiElement(CATEGORY_SHORT_HAND)('M')
+      RegExpPropertyImpl: <\PZ>
+        PsiElement(PROPERTY)('\P')
+        PsiElement(CATEGORY_SHORT_HAND)('Z')
+      RegExpPropertyImpl: <\PS>
+        PsiElement(PROPERTY)('\P')
+        PsiElement(CATEGORY_SHORT_HAND)('S')
+      RegExpPropertyImpl: <\PN>
+        PsiElement(PROPERTY)('\P')
+        PsiElement(CATEGORY_SHORT_HAND)('N')
+      RegExpPropertyImpl: <\PP>
+        PsiElement(PROPERTY)('\P')
+        PsiElement(CATEGORY_SHORT_HAND)('P')
+      RegExpPropertyImpl: <\PC>
+        PsiElement(PROPERTY)('\P')
+        PsiElement(CATEGORY_SHORT_HAND)('C')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses53.txt b/RegExpSupport/testData/psi/Charclasses53.txt
new file mode 100644 (file)
index 0000000..64add00
--- /dev/null
@@ -0,0 +1,10 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\pA>
+    RegExpBranchImpl: <\pA>
+      RegExpPropertyImpl: <\pA>
+        PsiElement(PROPERTY)('\p')
+        PsiErrorElement:Character category expected
+          <empty list>
+        PsiElement(CHARACTER)('A')
+        PsiErrorElement:Unclosed character family
+          <empty list>
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses54.txt b/RegExpSupport/testData/psi/Charclasses54.txt
new file mode 100644 (file)
index 0000000..007addb
--- /dev/null
@@ -0,0 +1,10 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\pl>
+    RegExpBranchImpl: <\pl>
+      RegExpPropertyImpl: <\pl>
+        PsiElement(PROPERTY)('\p')
+        PsiErrorElement:Character category expected
+          <empty list>
+        PsiElement(CHARACTER)('l')
+        PsiErrorElement:Unclosed character family
+          <empty list>
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses55.txt b/RegExpSupport/testData/psi/Charclasses55.txt
new file mode 100644 (file)
index 0000000..aad31e3
--- /dev/null
@@ -0,0 +1,9 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a\p>
+    RegExpBranchImpl: <a\p>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpPropertyImpl: <\p>
+        PsiElement(PROPERTY)('\p')
+        PsiErrorElement:Character category expected
+          <empty list>
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses56.txt b/RegExpSupport/testData/psi/Charclasses56.txt
new file mode 100644 (file)
index 0000000..1e2daa6
--- /dev/null
@@ -0,0 +1,11 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a\p{}>
+    RegExpBranchImpl: <a\p{}>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpPropertyImpl: <\p{}>
+        PsiElement(PROPERTY)('\p')
+        PsiElement(LBRACE)('{')
+        PsiErrorElement:Empty character family
+          <empty list>
+        PsiElement(RBRACE)('}')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses57.txt b/RegExpSupport/testData/psi/Charclasses57.txt
new file mode 100644 (file)
index 0000000..224c9a2
--- /dev/null
@@ -0,0 +1,12 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a\p}>
+    RegExpBranchImpl: <a\p}>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpPropertyImpl: <\p}>
+        PsiElement(PROPERTY)('\p')
+        PsiErrorElement:Character category expected
+          <empty list>
+        PsiElement(CHARACTER)('}')
+        PsiErrorElement:Unclosed character family
+          <empty list>
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses58.txt b/RegExpSupport/testData/psi/Charclasses58.txt
new file mode 100644 (file)
index 0000000..cc1ffe2
--- /dev/null
@@ -0,0 +1,12 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a\p{123}>
+    RegExpBranchImpl: <a\p{123}>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpPropertyImpl: <\p{123}>
+        PsiElement(PROPERTY)('\p')
+        PsiElement(LBRACE)('{')
+        PsiErrorElement:Character family name expected
+          <empty list>
+        PsiElement(NUMBER)('123')
+        PsiElement(RBRACE)('}')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses59.txt b/RegExpSupport/testData/psi/Charclasses59.txt
new file mode 100644 (file)
index 0000000..fe2ea17
--- /dev/null
@@ -0,0 +1,11 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[\p{nothing}]>
+    RegExpBranchImpl: <[\p{nothing}]>
+      RegExpClassImpl: <[\p{nothing}]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpPropertyImpl: <\p{nothing}>
+          PsiElement(PROPERTY)('\p')
+          PsiElement(LBRACE)('{')
+          PsiElement(NAME)('nothing')
+          PsiElement(RBRACE)('}')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses6.txt b/RegExpSupport/testData/psi/Charclasses6.txt
new file mode 100644 (file)
index 0000000..a1d2820
--- /dev/null
@@ -0,0 +1,12 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[b-]>
+    RegExpBranchImpl: <a[b-]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[b-]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharImpl: <b>
+          PsiElement(CHARACTER)('b')
+        RegExpCharImpl: <->
+          PsiElement(MINUS)('-')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses60.txt b/RegExpSupport/testData/psi/Charclasses60.txt
new file mode 100644 (file)
index 0000000..84f521e
--- /dev/null
@@ -0,0 +1,74 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a\p{<>
+    RegExpBranchImpl: <a\p{<>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpPropertyImpl: <\p{<>
+        PsiElement(PROPERTY)('\p')
+        PsiElement(LBRACE)('{')
+        PsiErrorElement:Character family name expected
+          <empty list>
+        PsiElement(BAD_CHARACTER)('<')
+        PsiErrorElement:Unclosed character family
+          <empty list>
+  PsiElement(NAME)('error')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(BAD_CHARACTER)(' ')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(NAME)('descr')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(BAD_CHARACTER)('=')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(BAD_CHARACTER)('"')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(NAME)('Character')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(BAD_CHARACTER)(' ')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(NAME)('family')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(BAD_CHARACTER)(' ')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(NAME)('name')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(BAD_CHARACTER)(' ')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(NAME)('expected')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(BAD_CHARACTER)('"')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(BAD_CHARACTER)('>')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(BAD_CHARACTER)('*')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(BAD_CHARACTER)('<')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(BAD_CHARACTER)('/')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(NAME)('error')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(BAD_CHARACTER)('>')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(RBRACE)('}')
+  PsiErrorElement:Pattern expected
+    <empty list>
+  PsiElement(CHARACTER)('b')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses61.txt b/RegExpSupport/testData/psi/Charclasses61.txt
new file mode 100644 (file)
index 0000000..ffdc25b
--- /dev/null
@@ -0,0 +1,119 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[<warning descr="Redundant character range">\w-\w</warning>]>
+    RegExpBranchImpl: <[<warning descr="Redundant character range">\w-\w</warning>]>
+      RegExpClassImpl: <[<warning descr="Redundant character range">\w-\w</warning>]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <<warning descr="Redundant character range">\w-\w</warning>>
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: <w>
+            PsiElement(CHARACTER)('w')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <=>
+            PsiElement(CHARACTER)('=')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <R>
+            PsiElement(CHARACTER)('R')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <u>
+            PsiElement(CHARACTER)('u')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <h>
+            PsiElement(CHARACTER)('h')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+          RegExpCharRangeImpl: <\w-\w>
+            RegExpSimpleClassImpl: <\w>
+              PsiElement(CHAR_CLASS)('\w')
+            PsiElement(MINUS)('-')
+            RegExpSimpleClassImpl: <\w>
+              PsiElement(CHAR_CLASS)('\w')
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: </>
+            PsiElement(CHARACTER)('/')
+          RegExpCharImpl: <w>
+            PsiElement(CHARACTER)('w')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses62.txt b/RegExpSupport/testData/psi/Charclasses62.txt
new file mode 100644 (file)
index 0000000..7cc112d
--- /dev/null
@@ -0,0 +1,12 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[a-\w]>
+    RegExpBranchImpl: <[a-\w]>
+      RegExpClassImpl: <[a-\w]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharRangeImpl: <a-\w>
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          PsiElement(MINUS)('-')
+          RegExpSimpleClassImpl: <\w>
+            PsiElement(CHAR_CLASS)('\w')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses63.txt b/RegExpSupport/testData/psi/Charclasses63.txt
new file mode 100644 (file)
index 0000000..e139eac
--- /dev/null
@@ -0,0 +1,48 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(?x)abc #foo \q bar
+# foo
+(?-xi)xyz(?i:ABC)>
+    RegExpBranchImpl: <(?x)abc #foo \q bar
+# foo
+(?-xi)xyz(?i:ABC)>
+      RegExpSetOptionsImpl: <(?x)>
+        PsiElement(SET_OPTIONS)('(?')
+        RegExpOptionsImpl: <x>
+          PsiElement(OPTIONS_ON)('x')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      PsiWhiteSpace(' ')
+      PsiComment(COMMENT)('#')
+      PsiComment(COMMENT)('foo \q bar\n')
+      PsiComment(COMMENT)('#')
+      PsiComment(COMMENT)(' foo\n')
+      RegExpSetOptionsImpl: <(?-xi)>
+        PsiElement(SET_OPTIONS)('(?')
+        RegExpOptionsImpl: <-xi>
+          PsiElement(OPTIONS_OFF)('-xi')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <x>
+        PsiElement(CHARACTER)('x')
+      RegExpCharImpl: <y>
+        PsiElement(CHARACTER)('y')
+      RegExpCharImpl: <z>
+        PsiElement(CHARACTER)('z')
+      RegExpGroupImpl: <(?i:ABC)>
+        PsiElement(SET_OPTIONS)('(?')
+        RegExpOptionsImpl: <i>
+          PsiElement(OPTIONS_ON)('i')
+        PsiElement(COLON)(':')
+        RegExpPatternImpl: <ABC>
+          RegExpBranchImpl: <ABC>
+            RegExpCharImpl: <A>
+              PsiElement(CHARACTER)('A')
+            RegExpCharImpl: <B>
+              PsiElement(CHARACTER)('B')
+            RegExpCharImpl: <C>
+              PsiElement(CHARACTER)('C')
+        PsiElement(GROUP_END)(')')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses64.txt b/RegExpSupport/testData/psi/Charclasses64.txt
new file mode 100644 (file)
index 0000000..9191528
--- /dev/null
@@ -0,0 +1,17 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[\ud800\udc00-\udbff\udfff]>
+    RegExpBranchImpl: <[\ud800\udc00-\udbff\udfff]>
+      RegExpClassImpl: <[\ud800\udc00-\udbff\udfff]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <\ud800\udc00-\udbff\udfff>
+          RegExpCharImpl: <\ud800>
+            PsiElement(UNICODE_CHAR)('\ud800')
+          RegExpCharRangeImpl: <\udc00-\udbff>
+            RegExpCharImpl: <\udc00>
+              PsiElement(UNICODE_CHAR)('\udc00')
+            PsiElement(MINUS)('-')
+            RegExpCharImpl: <\udbff>
+              PsiElement(UNICODE_CHAR)('\udbff')
+          RegExpCharImpl: <\udfff>
+            PsiElement(UNICODE_CHAR)('\udfff')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses65.txt b/RegExpSupport/testData/psi/Charclasses65.txt
new file mode 100644 (file)
index 0000000..260b5f3
--- /dev/null
@@ -0,0 +1,5 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\R>
+    RegExpBranchImpl: <\R>
+      RegExpSimpleClassImpl: <\R>
+        PsiElement(CHAR_CLASS)('\R')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses66.txt b/RegExpSupport/testData/psi/Charclasses66.txt
new file mode 100644 (file)
index 0000000..9f275f7
--- /dev/null
@@ -0,0 +1,5 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\X>
+    RegExpBranchImpl: <\X>
+      RegExpSimpleClassImpl: <\X>
+        PsiElement(CHAR_CLASS)('\X')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses67.txt b/RegExpSupport/testData/psi/Charclasses67.txt
new file mode 100644 (file)
index 0000000..61ba886
--- /dev/null
@@ -0,0 +1,405 @@
+REGEXP_FILE
+  RegExpPatternImpl: <<weak_warning descr="Redundant character escape">\-</weak_warning>[<weak_warning descr="Redundant character escape">\*</weak_warning>\-\[\]\\<weak_warning descr="Redundant character escape">\+]</weak_warning>>
+    RegExpBranchImpl: <<weak_warning descr="Redundant character escape">\-</weak_warning>[<weak_warning descr="Redundant character escape">\*</weak_warning>\-\[\]\\<weak_warning descr="Redundant character escape">\+]</weak_warning>>
+      RegExpCharImpl: <<>
+        PsiElement(CHARACTER)('<')
+      RegExpCharImpl: <w>
+        PsiElement(CHARACTER)('w')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <k>
+        PsiElement(CHARACTER)('k')
+      RegExpCharImpl: <_>
+        PsiElement(CHARACTER)('_')
+      RegExpCharImpl: <w>
+        PsiElement(CHARACTER)('w')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <r>
+        PsiElement(CHARACTER)('r')
+      RegExpCharImpl: <n>
+        PsiElement(CHARACTER)('n')
+      RegExpCharImpl: <i>
+        PsiElement(CHARACTER)('i')
+      RegExpCharImpl: <n>
+        PsiElement(CHARACTER)('n')
+      RegExpCharImpl: <g>
+        PsiElement(CHARACTER)('g')
+      RegExpCharImpl: < >
+        PsiElement(CHARACTER)(' ')
+      RegExpCharImpl: <d>
+        PsiElement(CHARACTER)('d')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
+      RegExpCharImpl: <s>
+        PsiElement(CHARACTER)('s')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpCharImpl: <r>
+        PsiElement(CHARACTER)('r')
+      RegExpCharImpl: <=>
+        PsiElement(CHARACTER)('=')
+      RegExpCharImpl: <">
+        PsiElement(CHARACTER)('"')
+      RegExpCharImpl: <R>
+        PsiElement(CHARACTER)('R')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
+      RegExpCharImpl: <d>
+        PsiElement(CHARACTER)('d')
+      RegExpCharImpl: <u>
+        PsiElement(CHARACTER)('u')
+      RegExpCharImpl: <n>
+        PsiElement(CHARACTER)('n')
+      RegExpCharImpl: <d>
+        PsiElement(CHARACTER)('d')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <n>
+        PsiElement(CHARACTER)('n')
+      RegExpCharImpl: <t>
+        PsiElement(CHARACTER)('t')
+      RegExpCharImpl: < >
+        PsiElement(CHARACTER)(' ')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpCharImpl: <h>
+        PsiElement(CHARACTER)('h')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <r>
+        PsiElement(CHARACTER)('r')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpCharImpl: <t>
+        PsiElement(CHARACTER)('t')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
+      RegExpCharImpl: <r>
+        PsiElement(CHARACTER)('r')
+      RegExpCharImpl: < >
+        PsiElement(CHARACTER)(' ')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
+      RegExpCharImpl: <s>
+        PsiElement(CHARACTER)('s')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <p>
+        PsiElement(CHARACTER)('p')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
+      RegExpCharImpl: <">
+        PsiElement(CHARACTER)('"')
+      RegExpCharImpl: <>>
+        PsiElement(CHARACTER)('>')
+      RegExpCharImpl: <\->
+        PsiElement(REDUNDANT_ESCAPE)('\-')
+      RegExpCharImpl: <<>
+        PsiElement(CHARACTER)('<')
+      RegExpCharImpl: </>
+        PsiElement(CHARACTER)('/')
+      RegExpCharImpl: <w>
+        PsiElement(CHARACTER)('w')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <k>
+        PsiElement(CHARACTER)('k')
+      RegExpCharImpl: <_>
+        PsiElement(CHARACTER)('_')
+      RegExpCharImpl: <w>
+        PsiElement(CHARACTER)('w')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <r>
+        PsiElement(CHARACTER)('r')
+      RegExpCharImpl: <n>
+        PsiElement(CHARACTER)('n')
+      RegExpCharImpl: <i>
+        PsiElement(CHARACTER)('i')
+      RegExpCharImpl: <n>
+        PsiElement(CHARACTER)('n')
+      RegExpCharImpl: <g>
+        PsiElement(CHARACTER)('g')
+      RegExpCharImpl: <>>
+        PsiElement(CHARACTER)('>')
+      RegExpClassImpl: <[<weak_warning descr="Redundant character escape">\*</weak_warning>\-\[\]\\<weak_warning descr="Redundant character escape">\+]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <<weak_warning descr="Redundant character escape">\*</weak_warning>\-\[\]\\<weak_warning descr="Redundant character escape">\+>
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: <w>
+            PsiElement(CHARACTER)('w')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <k>
+            PsiElement(CHARACTER)('k')
+          RegExpCharImpl: <_>
+            PsiElement(CHARACTER)('_')
+          RegExpCharImpl: <w>
+            PsiElement(CHARACTER)('w')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <=>
+            PsiElement(CHARACTER)('=')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <R>
+            PsiElement(CHARACTER)('R')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <u>
+            PsiElement(CHARACTER)('u')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <h>
+            PsiElement(CHARACTER)('h')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <p>
+            PsiElement(CHARACTER)('p')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+          RegExpCharImpl: <\*>
+            PsiElement(REDUNDANT_ESCAPE)('\*')
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: </>
+            PsiElement(CHARACTER)('/')
+          RegExpCharImpl: <w>
+            PsiElement(CHARACTER)('w')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <k>
+            PsiElement(CHARACTER)('k')
+          RegExpCharImpl: <_>
+            PsiElement(CHARACTER)('_')
+          RegExpCharImpl: <w>
+            PsiElement(CHARACTER)('w')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+          RegExpCharImpl: <\->
+            PsiElement(ESC_CHARACTER)('\-')
+          RegExpCharImpl: <\[>
+            PsiElement(ESC_CHARACTER)('\[')
+          RegExpCharImpl: <\]>
+            PsiElement(REDUNDANT_ESCAPE)('\]')
+          RegExpCharImpl: <\\>
+            PsiElement(ESC_CHARACTER)('\\')
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: <w>
+            PsiElement(CHARACTER)('w')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <k>
+            PsiElement(CHARACTER)('k')
+          RegExpCharImpl: <_>
+            PsiElement(CHARACTER)('_')
+          RegExpCharImpl: <w>
+            PsiElement(CHARACTER)('w')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <=>
+            PsiElement(CHARACTER)('=')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <R>
+            PsiElement(CHARACTER)('R')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <u>
+            PsiElement(CHARACTER)('u')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <h>
+            PsiElement(CHARACTER)('h')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <p>
+            PsiElement(CHARACTER)('p')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+          RegExpCharImpl: <\+>
+            PsiElement(REDUNDANT_ESCAPE)('\+')
+        PsiElement(CLASS_END)(']')
+      RegExpCharImpl: <<>
+        PsiElement(CHARACTER)('<')
+      RegExpCharImpl: </>
+        PsiElement(CHARACTER)('/')
+      RegExpCharImpl: <w>
+        PsiElement(CHARACTER)('w')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <k>
+        PsiElement(CHARACTER)('k')
+      RegExpCharImpl: <_>
+        PsiElement(CHARACTER)('_')
+      RegExpCharImpl: <w>
+        PsiElement(CHARACTER)('w')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <r>
+        PsiElement(CHARACTER)('r')
+      RegExpCharImpl: <n>
+        PsiElement(CHARACTER)('n')
+      RegExpCharImpl: <i>
+        PsiElement(CHARACTER)('i')
+      RegExpCharImpl: <n>
+        PsiElement(CHARACTER)('n')
+      RegExpCharImpl: <g>
+        PsiElement(CHARACTER)('g')
+      RegExpCharImpl: <>>
+        PsiElement(CHARACTER)('>')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses68.txt b/RegExpSupport/testData/psi/Charclasses68.txt
new file mode 100644 (file)
index 0000000..448aa04
--- /dev/null
@@ -0,0 +1,8 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[\b]>
+    RegExpBranchImpl: <[\b]>
+      RegExpClassImpl: <[\b]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharImpl: <\b>
+          PsiElement(ESC_CHARACTER)('\b')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses7.txt b/RegExpSupport/testData/psi/Charclasses7.txt
new file mode 100644 (file)
index 0000000..3a3b84d
--- /dev/null
@@ -0,0 +1,15 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[a-[b]]>
+    RegExpBranchImpl: <[a-[b]]>
+      RegExpClassImpl: <[a-[b]]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharImpl: <a>
+          PsiElement(CHARACTER)('a')
+        RegExpCharImpl: <->
+          PsiElement(MINUS)('-')
+        RegExpClassImpl: <[b]>
+          PsiElement(CLASS_BEGIN)('[')
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+          PsiElement(CLASS_END)(']')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses8.txt b/RegExpSupport/testData/psi/Charclasses8.txt
new file mode 100644 (file)
index 0000000..f629c0f
--- /dev/null
@@ -0,0 +1,20 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[b&&[cd]]>
+    RegExpBranchImpl: <a[b&&[cd]]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[b&&[cd]]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpIntersectionImpl: <b&&[cd]>
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+          PsiElement(ANDAND)('&&')
+          RegExpClassImpl: <[cd]>
+            PsiElement(CLASS_BEGIN)('[')
+            RegExpUnionImpl: <cd>
+              RegExpCharImpl: <c>
+                PsiElement(CHARACTER)('c')
+              RegExpCharImpl: <d>
+                PsiElement(CHARACTER)('d')
+            PsiElement(CLASS_END)(']')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Charclasses9.txt b/RegExpSupport/testData/psi/Charclasses9.txt
new file mode 100644 (file)
index 0000000..6eea58e
--- /dev/null
@@ -0,0 +1,24 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a[b-&&[cd]]>
+    RegExpBranchImpl: <a[b-&&[cd]]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClassImpl: <[b-&&[cd]]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpIntersectionImpl: <b-&&[cd]>
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+          RegExpCharImpl: <->
+            PsiElement(MINUS)('-')
+          PsiErrorElement:Illegal character range
+            <empty list>
+          PsiElement(ANDAND)('&&')
+          RegExpClassImpl: <[cd]>
+            PsiElement(CLASS_BEGIN)('[')
+            RegExpUnionImpl: <cd>
+              RegExpCharImpl: <c>
+                PsiElement(CHARACTER)('c')
+              RegExpCharImpl: <d>
+                PsiElement(CHARACTER)('d')
+            PsiElement(CLASS_END)(']')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Complex1.txt b/RegExpSupport/testData/psi/Complex1.txt
new file mode 100644 (file)
index 0000000..384828b
--- /dev/null
@@ -0,0 +1,36 @@
+REGEXP_FILE
+  RegExpPatternImpl: <z(\w\s+(?:\w\s+\w)+)z>
+    RegExpBranchImpl: <z(\w\s+(?:\w\s+\w)+)z>
+      RegExpCharImpl: <z>
+        PsiElement(CHARACTER)('z')
+      RegExpGroupImpl: <(\w\s+(?:\w\s+\w)+)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <\w\s+(?:\w\s+\w)+>
+          RegExpBranchImpl: <\w\s+(?:\w\s+\w)+>
+            RegExpSimpleClassImpl: <\w>
+              PsiElement(CHAR_CLASS)('\w')
+            RegExpClosureImpl: <\s+>
+              RegExpSimpleClassImpl: <\s>
+                PsiElement(CHAR_CLASS)('\s')
+              RegExpQuantifierImpl: <+>
+                PsiElement(PLUS)('+')
+            RegExpClosureImpl: <(?:\w\s+\w)+>
+              RegExpGroupImpl: <(?:\w\s+\w)>
+                PsiElement(NON_CAPT_GROUP)('(?:')
+                RegExpPatternImpl: <\w\s+\w>
+                  RegExpBranchImpl: <\w\s+\w>
+                    RegExpSimpleClassImpl: <\w>
+                      PsiElement(CHAR_CLASS)('\w')
+                    RegExpClosureImpl: <\s+>
+                      RegExpSimpleClassImpl: <\s>
+                        PsiElement(CHAR_CLASS)('\s')
+                      RegExpQuantifierImpl: <+>
+                        PsiElement(PLUS)('+')
+                    RegExpSimpleClassImpl: <\w>
+                      PsiElement(CHAR_CLASS)('\w')
+                PsiElement(GROUP_END)(')')
+              RegExpQuantifierImpl: <+>
+                PsiElement(PLUS)('+')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <z>
+        PsiElement(CHARACTER)('z')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Complex2.txt b/RegExpSupport/testData/psi/Complex2.txt
new file mode 100644 (file)
index 0000000..a76e017
--- /dev/null
@@ -0,0 +1,141 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+)*>
+    RegExpBranchImpl: <(([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+)*>
+      RegExpClosureImpl: <(([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?>
+        RegExpGroupImpl: <(([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)>
+          PsiElement(GROUP_BEGIN)('(')
+          RegExpPatternImpl: <([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/>
+            RegExpBranchImpl: <([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/>
+              RegExpGroupImpl: <([hH][tT]{2}[pP]|[fF][tT][pP])>
+                PsiElement(GROUP_BEGIN)('(')
+                RegExpPatternImpl: <[hH][tT]{2}[pP]|[fF][tT][pP]>
+                  RegExpBranchImpl: <[hH][tT]{2}[pP]>
+                    RegExpClassImpl: <[hH]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <hH>
+                        RegExpCharImpl: <h>
+                          PsiElement(CHARACTER)('h')
+                        RegExpCharImpl: <H>
+                          PsiElement(CHARACTER)('H')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClosureImpl: <[tT]{2}>
+                      RegExpClassImpl: <[tT]>
+                        PsiElement(CLASS_BEGIN)('[')
+                        RegExpUnionImpl: <tT>
+                          RegExpCharImpl: <t>
+                            PsiElement(CHARACTER)('t')
+                          RegExpCharImpl: <T>
+                            PsiElement(CHARACTER)('T')
+                        PsiElement(CLASS_END)(']')
+                      RegExpQuantifierImpl: <{2}>
+                        PsiElement(LBRACE)('{')
+                        PsiElement(NUMBER)('2')
+                        PsiElement(RBRACE)('}')
+                    RegExpClassImpl: <[pP]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <pP>
+                        RegExpCharImpl: <p>
+                          PsiElement(CHARACTER)('p')
+                        RegExpCharImpl: <P>
+                          PsiElement(CHARACTER)('P')
+                      PsiElement(CLASS_END)(']')
+                  PsiElement(UNION)('|')
+                  RegExpBranchImpl: <[fF][tT][pP]>
+                    RegExpClassImpl: <[fF]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <fF>
+                        RegExpCharImpl: <f>
+                          PsiElement(CHARACTER)('f')
+                        RegExpCharImpl: <F>
+                          PsiElement(CHARACTER)('F')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClassImpl: <[tT]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <tT>
+                        RegExpCharImpl: <t>
+                          PsiElement(CHARACTER)('t')
+                        RegExpCharImpl: <T>
+                          PsiElement(CHARACTER)('T')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClassImpl: <[pP]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <pP>
+                        RegExpCharImpl: <p>
+                          PsiElement(CHARACTER)('p')
+                        RegExpCharImpl: <P>
+                          PsiElement(CHARACTER)('P')
+                      PsiElement(CLASS_END)(']')
+                PsiElement(GROUP_END)(')')
+              RegExpCharImpl: <:>
+                PsiElement(CHARACTER)(':')
+              RegExpCharImpl: <\/>
+                PsiElement(REDUNDANT_ESCAPE)('\/')
+              RegExpCharImpl: <\/>
+                PsiElement(REDUNDANT_ESCAPE)('\/')
+          PsiElement(GROUP_END)(')')
+        RegExpQuantifierImpl: <?>
+          PsiElement(QUEST)('?')
+      RegExpClosureImpl: <[a-zA-Z0-9\-]+>
+        RegExpClassImpl: <[a-zA-Z0-9\-]>
+          PsiElement(CLASS_BEGIN)('[')
+          RegExpUnionImpl: <a-zA-Z0-9\->
+            RegExpCharRangeImpl: <a-z>
+              RegExpCharImpl: <a>
+                PsiElement(CHARACTER)('a')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <z>
+                PsiElement(CHARACTER)('z')
+            RegExpCharRangeImpl: <A-Z>
+              RegExpCharImpl: <A>
+                PsiElement(CHARACTER)('A')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <Z>
+                PsiElement(CHARACTER)('Z')
+            RegExpCharRangeImpl: <0-9>
+              RegExpCharImpl: <0>
+                PsiElement(CHARACTER)('0')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <9>
+                PsiElement(CHARACTER)('9')
+            RegExpCharImpl: <\->
+              PsiElement(ESC_CHARACTER)('\-')
+          PsiElement(CLASS_END)(']')
+        RegExpQuantifierImpl: <+>
+          PsiElement(PLUS)('+')
+      RegExpClosureImpl: <(\.[a-zA-Z0-9\-]+)*>
+        RegExpGroupImpl: <(\.[a-zA-Z0-9\-]+)>
+          PsiElement(GROUP_BEGIN)('(')
+          RegExpPatternImpl: <\.[a-zA-Z0-9\-]+>
+            RegExpBranchImpl: <\.[a-zA-Z0-9\-]+>
+              RegExpCharImpl: <\.>
+                PsiElement(ESC_CHARACTER)('\.')
+              RegExpClosureImpl: <[a-zA-Z0-9\-]+>
+                RegExpClassImpl: <[a-zA-Z0-9\-]>
+                  PsiElement(CLASS_BEGIN)('[')
+                  RegExpUnionImpl: <a-zA-Z0-9\->
+                    RegExpCharRangeImpl: <a-z>
+                      RegExpCharImpl: <a>
+                        PsiElement(CHARACTER)('a')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <z>
+                        PsiElement(CHARACTER)('z')
+                    RegExpCharRangeImpl: <A-Z>
+                      RegExpCharImpl: <A>
+                        PsiElement(CHARACTER)('A')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <Z>
+                        PsiElement(CHARACTER)('Z')
+                    RegExpCharRangeImpl: <0-9>
+                      RegExpCharImpl: <0>
+                        PsiElement(CHARACTER)('0')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <9>
+                        PsiElement(CHARACTER)('9')
+                    RegExpCharImpl: <\->
+                      PsiElement(ESC_CHARACTER)('\-')
+                  PsiElement(CLASS_END)(']')
+                RegExpQuantifierImpl: <+>
+                  PsiElement(PLUS)('+')
+          PsiElement(GROUP_END)(')')
+        RegExpQuantifierImpl: <*>
+          PsiElement(STAR)('*')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Complex3.txt b/RegExpSupport/testData/psi/Complex3.txt
new file mode 100644 (file)
index 0000000..9961bb7
--- /dev/null
@@ -0,0 +1,141 @@
+REGEXP_FILE
+  RegExpPatternImpl: <((?:[hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+)*>
+    RegExpBranchImpl: <((?:[hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+)*>
+      RegExpClosureImpl: <((?:[hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?>
+        RegExpGroupImpl: <((?:[hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)>
+          PsiElement(GROUP_BEGIN)('(')
+          RegExpPatternImpl: <(?:[hH][tT]{2}[pP]|[fF][tT][pP]):\/\/>
+            RegExpBranchImpl: <(?:[hH][tT]{2}[pP]|[fF][tT][pP]):\/\/>
+              RegExpGroupImpl: <(?:[hH][tT]{2}[pP]|[fF][tT][pP])>
+                PsiElement(NON_CAPT_GROUP)('(?:')
+                RegExpPatternImpl: <[hH][tT]{2}[pP]|[fF][tT][pP]>
+                  RegExpBranchImpl: <[hH][tT]{2}[pP]>
+                    RegExpClassImpl: <[hH]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <hH>
+                        RegExpCharImpl: <h>
+                          PsiElement(CHARACTER)('h')
+                        RegExpCharImpl: <H>
+                          PsiElement(CHARACTER)('H')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClosureImpl: <[tT]{2}>
+                      RegExpClassImpl: <[tT]>
+                        PsiElement(CLASS_BEGIN)('[')
+                        RegExpUnionImpl: <tT>
+                          RegExpCharImpl: <t>
+                            PsiElement(CHARACTER)('t')
+                          RegExpCharImpl: <T>
+                            PsiElement(CHARACTER)('T')
+                        PsiElement(CLASS_END)(']')
+                      RegExpQuantifierImpl: <{2}>
+                        PsiElement(LBRACE)('{')
+                        PsiElement(NUMBER)('2')
+                        PsiElement(RBRACE)('}')
+                    RegExpClassImpl: <[pP]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <pP>
+                        RegExpCharImpl: <p>
+                          PsiElement(CHARACTER)('p')
+                        RegExpCharImpl: <P>
+                          PsiElement(CHARACTER)('P')
+                      PsiElement(CLASS_END)(']')
+                  PsiElement(UNION)('|')
+                  RegExpBranchImpl: <[fF][tT][pP]>
+                    RegExpClassImpl: <[fF]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <fF>
+                        RegExpCharImpl: <f>
+                          PsiElement(CHARACTER)('f')
+                        RegExpCharImpl: <F>
+                          PsiElement(CHARACTER)('F')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClassImpl: <[tT]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <tT>
+                        RegExpCharImpl: <t>
+                          PsiElement(CHARACTER)('t')
+                        RegExpCharImpl: <T>
+                          PsiElement(CHARACTER)('T')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClassImpl: <[pP]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <pP>
+                        RegExpCharImpl: <p>
+                          PsiElement(CHARACTER)('p')
+                        RegExpCharImpl: <P>
+                          PsiElement(CHARACTER)('P')
+                      PsiElement(CLASS_END)(']')
+                PsiElement(GROUP_END)(')')
+              RegExpCharImpl: <:>
+                PsiElement(CHARACTER)(':')
+              RegExpCharImpl: <\/>
+                PsiElement(REDUNDANT_ESCAPE)('\/')
+              RegExpCharImpl: <\/>
+                PsiElement(REDUNDANT_ESCAPE)('\/')
+          PsiElement(GROUP_END)(')')
+        RegExpQuantifierImpl: <?>
+          PsiElement(QUEST)('?')
+      RegExpClosureImpl: <[a-zA-Z0-9\-]+>
+        RegExpClassImpl: <[a-zA-Z0-9\-]>
+          PsiElement(CLASS_BEGIN)('[')
+          RegExpUnionImpl: <a-zA-Z0-9\->
+            RegExpCharRangeImpl: <a-z>
+              RegExpCharImpl: <a>
+                PsiElement(CHARACTER)('a')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <z>
+                PsiElement(CHARACTER)('z')
+            RegExpCharRangeImpl: <A-Z>
+              RegExpCharImpl: <A>
+                PsiElement(CHARACTER)('A')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <Z>
+                PsiElement(CHARACTER)('Z')
+            RegExpCharRangeImpl: <0-9>
+              RegExpCharImpl: <0>
+                PsiElement(CHARACTER)('0')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <9>
+                PsiElement(CHARACTER)('9')
+            RegExpCharImpl: <\->
+              PsiElement(ESC_CHARACTER)('\-')
+          PsiElement(CLASS_END)(']')
+        RegExpQuantifierImpl: <+>
+          PsiElement(PLUS)('+')
+      RegExpClosureImpl: <(\.[a-zA-Z0-9\-]+)*>
+        RegExpGroupImpl: <(\.[a-zA-Z0-9\-]+)>
+          PsiElement(GROUP_BEGIN)('(')
+          RegExpPatternImpl: <\.[a-zA-Z0-9\-]+>
+            RegExpBranchImpl: <\.[a-zA-Z0-9\-]+>
+              RegExpCharImpl: <\.>
+                PsiElement(ESC_CHARACTER)('\.')
+              RegExpClosureImpl: <[a-zA-Z0-9\-]+>
+                RegExpClassImpl: <[a-zA-Z0-9\-]>
+                  PsiElement(CLASS_BEGIN)('[')
+                  RegExpUnionImpl: <a-zA-Z0-9\->
+                    RegExpCharRangeImpl: <a-z>
+                      RegExpCharImpl: <a>
+                        PsiElement(CHARACTER)('a')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <z>
+                        PsiElement(CHARACTER)('z')
+                    RegExpCharRangeImpl: <A-Z>
+                      RegExpCharImpl: <A>
+                        PsiElement(CHARACTER)('A')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <Z>
+                        PsiElement(CHARACTER)('Z')
+                    RegExpCharRangeImpl: <0-9>
+                      RegExpCharImpl: <0>
+                        PsiElement(CHARACTER)('0')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <9>
+                        PsiElement(CHARACTER)('9')
+                    RegExpCharImpl: <\->
+                      PsiElement(ESC_CHARACTER)('\-')
+                  PsiElement(CLASS_END)(']')
+                RegExpQuantifierImpl: <+>
+                  PsiElement(PLUS)('+')
+          PsiElement(GROUP_END)(')')
+        RegExpQuantifierImpl: <*>
+          PsiElement(STAR)('*')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Complex4.txt b/RegExpSupport/testData/psi/Complex4.txt
new file mode 100644 (file)
index 0000000..f6e8e85
--- /dev/null
@@ -0,0 +1,141 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?[a-zA-Z0-9\-]+(?:\.[a-zA-Z0-9\-]+)*>
+    RegExpBranchImpl: <(([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?[a-zA-Z0-9\-]+(?:\.[a-zA-Z0-9\-]+)*>
+      RegExpClosureImpl: <(([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?>
+        RegExpGroupImpl: <(([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)>
+          PsiElement(GROUP_BEGIN)('(')
+          RegExpPatternImpl: <([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/>
+            RegExpBranchImpl: <([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/>
+              RegExpGroupImpl: <([hH][tT]{2}[pP]|[fF][tT][pP])>
+                PsiElement(GROUP_BEGIN)('(')
+                RegExpPatternImpl: <[hH][tT]{2}[pP]|[fF][tT][pP]>
+                  RegExpBranchImpl: <[hH][tT]{2}[pP]>
+                    RegExpClassImpl: <[hH]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <hH>
+                        RegExpCharImpl: <h>
+                          PsiElement(CHARACTER)('h')
+                        RegExpCharImpl: <H>
+                          PsiElement(CHARACTER)('H')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClosureImpl: <[tT]{2}>
+                      RegExpClassImpl: <[tT]>
+                        PsiElement(CLASS_BEGIN)('[')
+                        RegExpUnionImpl: <tT>
+                          RegExpCharImpl: <t>
+                            PsiElement(CHARACTER)('t')
+                          RegExpCharImpl: <T>
+                            PsiElement(CHARACTER)('T')
+                        PsiElement(CLASS_END)(']')
+                      RegExpQuantifierImpl: <{2}>
+                        PsiElement(LBRACE)('{')
+                        PsiElement(NUMBER)('2')
+                        PsiElement(RBRACE)('}')
+                    RegExpClassImpl: <[pP]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <pP>
+                        RegExpCharImpl: <p>
+                          PsiElement(CHARACTER)('p')
+                        RegExpCharImpl: <P>
+                          PsiElement(CHARACTER)('P')
+                      PsiElement(CLASS_END)(']')
+                  PsiElement(UNION)('|')
+                  RegExpBranchImpl: <[fF][tT][pP]>
+                    RegExpClassImpl: <[fF]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <fF>
+                        RegExpCharImpl: <f>
+                          PsiElement(CHARACTER)('f')
+                        RegExpCharImpl: <F>
+                          PsiElement(CHARACTER)('F')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClassImpl: <[tT]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <tT>
+                        RegExpCharImpl: <t>
+                          PsiElement(CHARACTER)('t')
+                        RegExpCharImpl: <T>
+                          PsiElement(CHARACTER)('T')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClassImpl: <[pP]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <pP>
+                        RegExpCharImpl: <p>
+                          PsiElement(CHARACTER)('p')
+                        RegExpCharImpl: <P>
+                          PsiElement(CHARACTER)('P')
+                      PsiElement(CLASS_END)(']')
+                PsiElement(GROUP_END)(')')
+              RegExpCharImpl: <:>
+                PsiElement(CHARACTER)(':')
+              RegExpCharImpl: <\/>
+                PsiElement(REDUNDANT_ESCAPE)('\/')
+              RegExpCharImpl: <\/>
+                PsiElement(REDUNDANT_ESCAPE)('\/')
+          PsiElement(GROUP_END)(')')
+        RegExpQuantifierImpl: <?>
+          PsiElement(QUEST)('?')
+      RegExpClosureImpl: <[a-zA-Z0-9\-]+>
+        RegExpClassImpl: <[a-zA-Z0-9\-]>
+          PsiElement(CLASS_BEGIN)('[')
+          RegExpUnionImpl: <a-zA-Z0-9\->
+            RegExpCharRangeImpl: <a-z>
+              RegExpCharImpl: <a>
+                PsiElement(CHARACTER)('a')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <z>
+                PsiElement(CHARACTER)('z')
+            RegExpCharRangeImpl: <A-Z>
+              RegExpCharImpl: <A>
+                PsiElement(CHARACTER)('A')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <Z>
+                PsiElement(CHARACTER)('Z')
+            RegExpCharRangeImpl: <0-9>
+              RegExpCharImpl: <0>
+                PsiElement(CHARACTER)('0')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <9>
+                PsiElement(CHARACTER)('9')
+            RegExpCharImpl: <\->
+              PsiElement(ESC_CHARACTER)('\-')
+          PsiElement(CLASS_END)(']')
+        RegExpQuantifierImpl: <+>
+          PsiElement(PLUS)('+')
+      RegExpClosureImpl: <(?:\.[a-zA-Z0-9\-]+)*>
+        RegExpGroupImpl: <(?:\.[a-zA-Z0-9\-]+)>
+          PsiElement(NON_CAPT_GROUP)('(?:')
+          RegExpPatternImpl: <\.[a-zA-Z0-9\-]+>
+            RegExpBranchImpl: <\.[a-zA-Z0-9\-]+>
+              RegExpCharImpl: <\.>
+                PsiElement(ESC_CHARACTER)('\.')
+              RegExpClosureImpl: <[a-zA-Z0-9\-]+>
+                RegExpClassImpl: <[a-zA-Z0-9\-]>
+                  PsiElement(CLASS_BEGIN)('[')
+                  RegExpUnionImpl: <a-zA-Z0-9\->
+                    RegExpCharRangeImpl: <a-z>
+                      RegExpCharImpl: <a>
+                        PsiElement(CHARACTER)('a')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <z>
+                        PsiElement(CHARACTER)('z')
+                    RegExpCharRangeImpl: <A-Z>
+                      RegExpCharImpl: <A>
+                        PsiElement(CHARACTER)('A')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <Z>
+                        PsiElement(CHARACTER)('Z')
+                    RegExpCharRangeImpl: <0-9>
+                      RegExpCharImpl: <0>
+                        PsiElement(CHARACTER)('0')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <9>
+                        PsiElement(CHARACTER)('9')
+                    RegExpCharImpl: <\->
+                      PsiElement(ESC_CHARACTER)('\-')
+                  PsiElement(CLASS_END)(']')
+                RegExpQuantifierImpl: <+>
+                  PsiElement(PLUS)('+')
+          PsiElement(GROUP_END)(')')
+        RegExpQuantifierImpl: <*>
+          PsiElement(STAR)('*')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Complex5.txt b/RegExpSupport/testData/psi/Complex5.txt
new file mode 100644 (file)
index 0000000..250eda3
--- /dev/null
@@ -0,0 +1,141 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(?:([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+)*>
+    RegExpBranchImpl: <(?:([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+)*>
+      RegExpClosureImpl: <(?:([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?>
+        RegExpGroupImpl: <(?:([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)>
+          PsiElement(NON_CAPT_GROUP)('(?:')
+          RegExpPatternImpl: <([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/>
+            RegExpBranchImpl: <([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/>
+              RegExpGroupImpl: <([hH][tT]{2}[pP]|[fF][tT][pP])>
+                PsiElement(GROUP_BEGIN)('(')
+                RegExpPatternImpl: <[hH][tT]{2}[pP]|[fF][tT][pP]>
+                  RegExpBranchImpl: <[hH][tT]{2}[pP]>
+                    RegExpClassImpl: <[hH]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <hH>
+                        RegExpCharImpl: <h>
+                          PsiElement(CHARACTER)('h')
+                        RegExpCharImpl: <H>
+                          PsiElement(CHARACTER)('H')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClosureImpl: <[tT]{2}>
+                      RegExpClassImpl: <[tT]>
+                        PsiElement(CLASS_BEGIN)('[')
+                        RegExpUnionImpl: <tT>
+                          RegExpCharImpl: <t>
+                            PsiElement(CHARACTER)('t')
+                          RegExpCharImpl: <T>
+                            PsiElement(CHARACTER)('T')
+                        PsiElement(CLASS_END)(']')
+                      RegExpQuantifierImpl: <{2}>
+                        PsiElement(LBRACE)('{')
+                        PsiElement(NUMBER)('2')
+                        PsiElement(RBRACE)('}')
+                    RegExpClassImpl: <[pP]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <pP>
+                        RegExpCharImpl: <p>
+                          PsiElement(CHARACTER)('p')
+                        RegExpCharImpl: <P>
+                          PsiElement(CHARACTER)('P')
+                      PsiElement(CLASS_END)(']')
+                  PsiElement(UNION)('|')
+                  RegExpBranchImpl: <[fF][tT][pP]>
+                    RegExpClassImpl: <[fF]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <fF>
+                        RegExpCharImpl: <f>
+                          PsiElement(CHARACTER)('f')
+                        RegExpCharImpl: <F>
+                          PsiElement(CHARACTER)('F')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClassImpl: <[tT]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <tT>
+                        RegExpCharImpl: <t>
+                          PsiElement(CHARACTER)('t')
+                        RegExpCharImpl: <T>
+                          PsiElement(CHARACTER)('T')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClassImpl: <[pP]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <pP>
+                        RegExpCharImpl: <p>
+                          PsiElement(CHARACTER)('p')
+                        RegExpCharImpl: <P>
+                          PsiElement(CHARACTER)('P')
+                      PsiElement(CLASS_END)(']')
+                PsiElement(GROUP_END)(')')
+              RegExpCharImpl: <:>
+                PsiElement(CHARACTER)(':')
+              RegExpCharImpl: <\/>
+                PsiElement(REDUNDANT_ESCAPE)('\/')
+              RegExpCharImpl: <\/>
+                PsiElement(REDUNDANT_ESCAPE)('\/')
+          PsiElement(GROUP_END)(')')
+        RegExpQuantifierImpl: <?>
+          PsiElement(QUEST)('?')
+      RegExpClosureImpl: <[a-zA-Z0-9\-]+>
+        RegExpClassImpl: <[a-zA-Z0-9\-]>
+          PsiElement(CLASS_BEGIN)('[')
+          RegExpUnionImpl: <a-zA-Z0-9\->
+            RegExpCharRangeImpl: <a-z>
+              RegExpCharImpl: <a>
+                PsiElement(CHARACTER)('a')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <z>
+                PsiElement(CHARACTER)('z')
+            RegExpCharRangeImpl: <A-Z>
+              RegExpCharImpl: <A>
+                PsiElement(CHARACTER)('A')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <Z>
+                PsiElement(CHARACTER)('Z')
+            RegExpCharRangeImpl: <0-9>
+              RegExpCharImpl: <0>
+                PsiElement(CHARACTER)('0')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <9>
+                PsiElement(CHARACTER)('9')
+            RegExpCharImpl: <\->
+              PsiElement(ESC_CHARACTER)('\-')
+          PsiElement(CLASS_END)(']')
+        RegExpQuantifierImpl: <+>
+          PsiElement(PLUS)('+')
+      RegExpClosureImpl: <(\.[a-zA-Z0-9\-]+)*>
+        RegExpGroupImpl: <(\.[a-zA-Z0-9\-]+)>
+          PsiElement(GROUP_BEGIN)('(')
+          RegExpPatternImpl: <\.[a-zA-Z0-9\-]+>
+            RegExpBranchImpl: <\.[a-zA-Z0-9\-]+>
+              RegExpCharImpl: <\.>
+                PsiElement(ESC_CHARACTER)('\.')
+              RegExpClosureImpl: <[a-zA-Z0-9\-]+>
+                RegExpClassImpl: <[a-zA-Z0-9\-]>
+                  PsiElement(CLASS_BEGIN)('[')
+                  RegExpUnionImpl: <a-zA-Z0-9\->
+                    RegExpCharRangeImpl: <a-z>
+                      RegExpCharImpl: <a>
+                        PsiElement(CHARACTER)('a')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <z>
+                        PsiElement(CHARACTER)('z')
+                    RegExpCharRangeImpl: <A-Z>
+                      RegExpCharImpl: <A>
+                        PsiElement(CHARACTER)('A')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <Z>
+                        PsiElement(CHARACTER)('Z')
+                    RegExpCharRangeImpl: <0-9>
+                      RegExpCharImpl: <0>
+                        PsiElement(CHARACTER)('0')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <9>
+                        PsiElement(CHARACTER)('9')
+                    RegExpCharImpl: <\->
+                      PsiElement(ESC_CHARACTER)('\-')
+                  PsiElement(CLASS_END)(']')
+                RegExpQuantifierImpl: <+>
+                  PsiElement(PLUS)('+')
+          PsiElement(GROUP_END)(')')
+        RegExpQuantifierImpl: <*>
+          PsiElement(STAR)('*')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Complex6.txt b/RegExpSupport/testData/psi/Complex6.txt
new file mode 100644 (file)
index 0000000..1407fa3
--- /dev/null
@@ -0,0 +1,145 @@
+REGEXP_FILE
+  RegExpPatternImpl: <^(?:([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+)*$>
+    RegExpBranchImpl: <^(?:([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+)*$>
+      RegExpBoundaryImpl: <^>
+        PsiElement(CARET)('^')
+      RegExpClosureImpl: <(?:([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?>
+        RegExpGroupImpl: <(?:([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)>
+          PsiElement(NON_CAPT_GROUP)('(?:')
+          RegExpPatternImpl: <([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/>
+            RegExpBranchImpl: <([hH][tT]{2}[pP]|[fF][tT][pP]):\/\/>
+              RegExpGroupImpl: <([hH][tT]{2}[pP]|[fF][tT][pP])>
+                PsiElement(GROUP_BEGIN)('(')
+                RegExpPatternImpl: <[hH][tT]{2}[pP]|[fF][tT][pP]>
+                  RegExpBranchImpl: <[hH][tT]{2}[pP]>
+                    RegExpClassImpl: <[hH]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <hH>
+                        RegExpCharImpl: <h>
+                          PsiElement(CHARACTER)('h')
+                        RegExpCharImpl: <H>
+                          PsiElement(CHARACTER)('H')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClosureImpl: <[tT]{2}>
+                      RegExpClassImpl: <[tT]>
+                        PsiElement(CLASS_BEGIN)('[')
+                        RegExpUnionImpl: <tT>
+                          RegExpCharImpl: <t>
+                            PsiElement(CHARACTER)('t')
+                          RegExpCharImpl: <T>
+                            PsiElement(CHARACTER)('T')
+                        PsiElement(CLASS_END)(']')
+                      RegExpQuantifierImpl: <{2}>
+                        PsiElement(LBRACE)('{')
+                        PsiElement(NUMBER)('2')
+                        PsiElement(RBRACE)('}')
+                    RegExpClassImpl: <[pP]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <pP>
+                        RegExpCharImpl: <p>
+                          PsiElement(CHARACTER)('p')
+                        RegExpCharImpl: <P>
+                          PsiElement(CHARACTER)('P')
+                      PsiElement(CLASS_END)(']')
+                  PsiElement(UNION)('|')
+                  RegExpBranchImpl: <[fF][tT][pP]>
+                    RegExpClassImpl: <[fF]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <fF>
+                        RegExpCharImpl: <f>
+                          PsiElement(CHARACTER)('f')
+                        RegExpCharImpl: <F>
+                          PsiElement(CHARACTER)('F')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClassImpl: <[tT]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <tT>
+                        RegExpCharImpl: <t>
+                          PsiElement(CHARACTER)('t')
+                        RegExpCharImpl: <T>
+                          PsiElement(CHARACTER)('T')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClassImpl: <[pP]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <pP>
+                        RegExpCharImpl: <p>
+                          PsiElement(CHARACTER)('p')
+                        RegExpCharImpl: <P>
+                          PsiElement(CHARACTER)('P')
+                      PsiElement(CLASS_END)(']')
+                PsiElement(GROUP_END)(')')
+              RegExpCharImpl: <:>
+                PsiElement(CHARACTER)(':')
+              RegExpCharImpl: <\/>
+                PsiElement(REDUNDANT_ESCAPE)('\/')
+              RegExpCharImpl: <\/>
+                PsiElement(REDUNDANT_ESCAPE)('\/')
+          PsiElement(GROUP_END)(')')
+        RegExpQuantifierImpl: <?>
+          PsiElement(QUEST)('?')
+      RegExpClosureImpl: <[a-zA-Z0-9\-]+>
+        RegExpClassImpl: <[a-zA-Z0-9\-]>
+          PsiElement(CLASS_BEGIN)('[')
+          RegExpUnionImpl: <a-zA-Z0-9\->
+            RegExpCharRangeImpl: <a-z>
+              RegExpCharImpl: <a>
+                PsiElement(CHARACTER)('a')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <z>
+                PsiElement(CHARACTER)('z')
+            RegExpCharRangeImpl: <A-Z>
+              RegExpCharImpl: <A>
+                PsiElement(CHARACTER)('A')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <Z>
+                PsiElement(CHARACTER)('Z')
+            RegExpCharRangeImpl: <0-9>
+              RegExpCharImpl: <0>
+                PsiElement(CHARACTER)('0')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <9>
+                PsiElement(CHARACTER)('9')
+            RegExpCharImpl: <\->
+              PsiElement(ESC_CHARACTER)('\-')
+          PsiElement(CLASS_END)(']')
+        RegExpQuantifierImpl: <+>
+          PsiElement(PLUS)('+')
+      RegExpClosureImpl: <(\.[a-zA-Z0-9\-]+)*>
+        RegExpGroupImpl: <(\.[a-zA-Z0-9\-]+)>
+          PsiElement(GROUP_BEGIN)('(')
+          RegExpPatternImpl: <\.[a-zA-Z0-9\-]+>
+            RegExpBranchImpl: <\.[a-zA-Z0-9\-]+>
+              RegExpCharImpl: <\.>
+                PsiElement(ESC_CHARACTER)('\.')
+              RegExpClosureImpl: <[a-zA-Z0-9\-]+>
+                RegExpClassImpl: <[a-zA-Z0-9\-]>
+                  PsiElement(CLASS_BEGIN)('[')
+                  RegExpUnionImpl: <a-zA-Z0-9\->
+                    RegExpCharRangeImpl: <a-z>
+                      RegExpCharImpl: <a>
+                        PsiElement(CHARACTER)('a')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <z>
+                        PsiElement(CHARACTER)('z')
+                    RegExpCharRangeImpl: <A-Z>
+                      RegExpCharImpl: <A>
+                        PsiElement(CHARACTER)('A')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <Z>
+                        PsiElement(CHARACTER)('Z')
+                    RegExpCharRangeImpl: <0-9>
+                      RegExpCharImpl: <0>
+                        PsiElement(CHARACTER)('0')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <9>
+                        PsiElement(CHARACTER)('9')
+                    RegExpCharImpl: <\->
+                      PsiElement(ESC_CHARACTER)('\-')
+                  PsiElement(CLASS_END)(']')
+                RegExpQuantifierImpl: <+>
+                  PsiElement(PLUS)('+')
+          PsiElement(GROUP_END)(')')
+        RegExpQuantifierImpl: <*>
+          PsiElement(STAR)('*')
+      RegExpBoundaryImpl: <$>
+        PsiElement(DOLLAR)('$')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Complex7.txt b/RegExpSupport/testData/psi/Complex7.txt
new file mode 100644 (file)
index 0000000..e5c9e1e
--- /dev/null
@@ -0,0 +1,145 @@
+REGEXP_FILE
+  RegExpPatternImpl: <^(?:(?:[hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?[a-zA-Z0-9\-]+(?:\.[a-zA-Z0-9\-]+)*$>
+    RegExpBranchImpl: <^(?:(?:[hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?[a-zA-Z0-9\-]+(?:\.[a-zA-Z0-9\-]+)*$>
+      RegExpBoundaryImpl: <^>
+        PsiElement(CARET)('^')
+      RegExpClosureImpl: <(?:(?:[hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)?>
+        RegExpGroupImpl: <(?:(?:[hH][tT]{2}[pP]|[fF][tT][pP]):\/\/)>
+          PsiElement(NON_CAPT_GROUP)('(?:')
+          RegExpPatternImpl: <(?:[hH][tT]{2}[pP]|[fF][tT][pP]):\/\/>
+            RegExpBranchImpl: <(?:[hH][tT]{2}[pP]|[fF][tT][pP]):\/\/>
+              RegExpGroupImpl: <(?:[hH][tT]{2}[pP]|[fF][tT][pP])>
+                PsiElement(NON_CAPT_GROUP)('(?:')
+                RegExpPatternImpl: <[hH][tT]{2}[pP]|[fF][tT][pP]>
+                  RegExpBranchImpl: <[hH][tT]{2}[pP]>
+                    RegExpClassImpl: <[hH]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <hH>
+                        RegExpCharImpl: <h>
+                          PsiElement(CHARACTER)('h')
+                        RegExpCharImpl: <H>
+                          PsiElement(CHARACTER)('H')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClosureImpl: <[tT]{2}>
+                      RegExpClassImpl: <[tT]>
+                        PsiElement(CLASS_BEGIN)('[')
+                        RegExpUnionImpl: <tT>
+                          RegExpCharImpl: <t>
+                            PsiElement(CHARACTER)('t')
+                          RegExpCharImpl: <T>
+                            PsiElement(CHARACTER)('T')
+                        PsiElement(CLASS_END)(']')
+                      RegExpQuantifierImpl: <{2}>
+                        PsiElement(LBRACE)('{')
+                        PsiElement(NUMBER)('2')
+                        PsiElement(RBRACE)('}')
+                    RegExpClassImpl: <[pP]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <pP>
+                        RegExpCharImpl: <p>
+                          PsiElement(CHARACTER)('p')
+                        RegExpCharImpl: <P>
+                          PsiElement(CHARACTER)('P')
+                      PsiElement(CLASS_END)(']')
+                  PsiElement(UNION)('|')
+                  RegExpBranchImpl: <[fF][tT][pP]>
+                    RegExpClassImpl: <[fF]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <fF>
+                        RegExpCharImpl: <f>
+                          PsiElement(CHARACTER)('f')
+                        RegExpCharImpl: <F>
+                          PsiElement(CHARACTER)('F')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClassImpl: <[tT]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <tT>
+                        RegExpCharImpl: <t>
+                          PsiElement(CHARACTER)('t')
+                        RegExpCharImpl: <T>
+                          PsiElement(CHARACTER)('T')
+                      PsiElement(CLASS_END)(']')
+                    RegExpClassImpl: <[pP]>
+                      PsiElement(CLASS_BEGIN)('[')
+                      RegExpUnionImpl: <pP>
+                        RegExpCharImpl: <p>
+                          PsiElement(CHARACTER)('p')
+                        RegExpCharImpl: <P>
+                          PsiElement(CHARACTER)('P')
+                      PsiElement(CLASS_END)(']')
+                PsiElement(GROUP_END)(')')
+              RegExpCharImpl: <:>
+                PsiElement(CHARACTER)(':')
+              RegExpCharImpl: <\/>
+                PsiElement(REDUNDANT_ESCAPE)('\/')
+              RegExpCharImpl: <\/>
+                PsiElement(REDUNDANT_ESCAPE)('\/')
+          PsiElement(GROUP_END)(')')
+        RegExpQuantifierImpl: <?>
+          PsiElement(QUEST)('?')
+      RegExpClosureImpl: <[a-zA-Z0-9\-]+>
+        RegExpClassImpl: <[a-zA-Z0-9\-]>
+          PsiElement(CLASS_BEGIN)('[')
+          RegExpUnionImpl: <a-zA-Z0-9\->
+            RegExpCharRangeImpl: <a-z>
+              RegExpCharImpl: <a>
+                PsiElement(CHARACTER)('a')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <z>
+                PsiElement(CHARACTER)('z')
+            RegExpCharRangeImpl: <A-Z>
+              RegExpCharImpl: <A>
+                PsiElement(CHARACTER)('A')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <Z>
+                PsiElement(CHARACTER)('Z')
+            RegExpCharRangeImpl: <0-9>
+              RegExpCharImpl: <0>
+                PsiElement(CHARACTER)('0')
+              PsiElement(MINUS)('-')
+              RegExpCharImpl: <9>
+                PsiElement(CHARACTER)('9')
+            RegExpCharImpl: <\->
+              PsiElement(ESC_CHARACTER)('\-')
+          PsiElement(CLASS_END)(']')
+        RegExpQuantifierImpl: <+>
+          PsiElement(PLUS)('+')
+      RegExpClosureImpl: <(?:\.[a-zA-Z0-9\-]+)*>
+        RegExpGroupImpl: <(?:\.[a-zA-Z0-9\-]+)>
+          PsiElement(NON_CAPT_GROUP)('(?:')
+          RegExpPatternImpl: <\.[a-zA-Z0-9\-]+>
+            RegExpBranchImpl: <\.[a-zA-Z0-9\-]+>
+              RegExpCharImpl: <\.>
+                PsiElement(ESC_CHARACTER)('\.')
+              RegExpClosureImpl: <[a-zA-Z0-9\-]+>
+                RegExpClassImpl: <[a-zA-Z0-9\-]>
+                  PsiElement(CLASS_BEGIN)('[')
+                  RegExpUnionImpl: <a-zA-Z0-9\->
+                    RegExpCharRangeImpl: <a-z>
+                      RegExpCharImpl: <a>
+                        PsiElement(CHARACTER)('a')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <z>
+                        PsiElement(CHARACTER)('z')
+                    RegExpCharRangeImpl: <A-Z>
+                      RegExpCharImpl: <A>
+                        PsiElement(CHARACTER)('A')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <Z>
+                        PsiElement(CHARACTER)('Z')
+                    RegExpCharRangeImpl: <0-9>
+                      RegExpCharImpl: <0>
+                        PsiElement(CHARACTER)('0')
+                      PsiElement(MINUS)('-')
+                      RegExpCharImpl: <9>
+                        PsiElement(CHARACTER)('9')
+                    RegExpCharImpl: <\->
+                      PsiElement(ESC_CHARACTER)('\-')
+                  PsiElement(CLASS_END)(']')
+                RegExpQuantifierImpl: <+>
+                  PsiElement(PLUS)('+')
+          PsiElement(GROUP_END)(')')
+        RegExpQuantifierImpl: <*>
+          PsiElement(STAR)('*')
+      RegExpBoundaryImpl: <$>
+        PsiElement(DOLLAR)('$')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes1.txt b/RegExpSupport/testData/psi/Escapes1.txt
new file mode 100644 (file)
index 0000000..4f65295
--- /dev/null
@@ -0,0 +1,7 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\q>
+    RegExpBranchImpl: <\q>
+      RegExpCharImpl: <\q>
+        PsiErrorElement:Illegal/unsupported escape sequence
+          <empty list>
+        PsiElement(INVALID_CHARACTER_ESCAPE_TOKEN)('\q')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes10.txt b/RegExpSupport/testData/psi/Escapes10.txt
new file mode 100644 (file)
index 0000000..cf49135
--- /dev/null
@@ -0,0 +1,5 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\x4a>
+    RegExpBranchImpl: <\x4a>
+      RegExpCharImpl: <\x4a>
+        PsiElement(HEX_CHAR)('\x4a')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes11.txt b/RegExpSupport/testData/psi/Escapes11.txt
new file mode 100644 (file)
index 0000000..2f40e23
--- /dev/null
@@ -0,0 +1,5 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\x{0}>
+    RegExpBranchImpl: <\x{0}>
+      RegExpCharImpl: <\x{0}>
+        PsiElement(HEX_CHAR)('\x{0}')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes12.txt b/RegExpSupport/testData/psi/Escapes12.txt
new file mode 100644 (file)
index 0000000..1455eda
--- /dev/null
@@ -0,0 +1,5 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\x{2011F}>
+    RegExpBranchImpl: <\x{2011F}>
+      RegExpCharImpl: <\x{2011F}>
+        PsiElement(HEX_CHAR)('\x{2011F}')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes13.txt b/RegExpSupport/testData/psi/Escapes13.txt
new file mode 100644 (file)
index 0000000..292b755
--- /dev/null
@@ -0,0 +1,12 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[\x4a-\x4b]>
+    RegExpBranchImpl: <[\x4a-\x4b]>
+      RegExpClassImpl: <[\x4a-\x4b]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharRangeImpl: <\x4a-\x4b>
+          RegExpCharImpl: <\x4a>
+            PsiElement(HEX_CHAR)('\x4a')
+          PsiElement(MINUS)('-')
+          RegExpCharImpl: <\x4b>
+            PsiElement(HEX_CHAR)('\x4b')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes14.txt b/RegExpSupport/testData/psi/Escapes14.txt
new file mode 100644 (file)
index 0000000..1efd5b1
--- /dev/null
@@ -0,0 +1,119 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[<warning descr="Redundant character range">a-a</warning>]>
+    RegExpBranchImpl: <[<warning descr="Redundant character range">a-a</warning>]>
+      RegExpClassImpl: <[<warning descr="Redundant character range">a-a</warning>]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <<warning descr="Redundant character range">a-a</warning>>
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: <w>
+            PsiElement(CHARACTER)('w')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <=>
+            PsiElement(CHARACTER)('=')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <R>
+            PsiElement(CHARACTER)('R')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <u>
+            PsiElement(CHARACTER)('u')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <h>
+            PsiElement(CHARACTER)('h')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+          RegExpCharRangeImpl: <a-a>
+            RegExpCharImpl: <a>
+              PsiElement(CHARACTER)('a')
+            PsiElement(MINUS)('-')
+            RegExpCharImpl: <a>
+              PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: </>
+            PsiElement(CHARACTER)('/')
+          RegExpCharImpl: <w>
+            PsiElement(CHARACTER)('w')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes15.txt b/RegExpSupport/testData/psi/Escapes15.txt
new file mode 100644 (file)
index 0000000..51fb5ba
--- /dev/null
@@ -0,0 +1,12 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[\x4a-\x3f]>
+    RegExpBranchImpl: <[\x4a-\x3f]>
+      RegExpClassImpl: <[\x4a-\x3f]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharRangeImpl: <\x4a-\x3f>
+          RegExpCharImpl: <\x4a>
+            PsiElement(HEX_CHAR)('\x4a')
+          PsiElement(MINUS)('-')
+          RegExpCharImpl: <\x3f>
+            PsiElement(HEX_CHAR)('\x3f')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes16.txt b/RegExpSupport/testData/psi/Escapes16.txt
new file mode 100644 (file)
index 0000000..24ded2e
--- /dev/null
@@ -0,0 +1,135 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[<error descr="Illegal character range (to < from)">\udbff\udfff-\ud800\udc00</error>]>
+    RegExpBranchImpl: <[<error descr="Illegal character range (to < from)">\udbff\udfff-\ud800\udc00</error>]>
+      RegExpClassImpl: <[<error descr="Illegal character range (to < from)">\udbff\udfff-\ud800\udc00</error>]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <<error descr="Illegal character range (to < from)">\udbff\udfff-\ud800\udc00</error>>
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <o>
+            PsiElement(CHARACTER)('o')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <=>
+            PsiElement(CHARACTER)('=')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <I>
+            PsiElement(CHARACTER)('I')
+          RegExpCharImpl: <l>
+            PsiElement(CHARACTER)('l')
+          RegExpCharImpl: <l>
+            PsiElement(CHARACTER)('l')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <l>
+            PsiElement(CHARACTER)('l')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <h>
+            PsiElement(CHARACTER)('h')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <(>
+            PsiElement(CHARACTER)('(')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <o>
+            PsiElement(CHARACTER)('o')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <f>
+            PsiElement(CHARACTER)('f')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <o>
+            PsiElement(CHARACTER)('o')
+          RegExpCharImpl: <m>
+            PsiElement(CHARACTER)('m')
+          RegExpCharImpl: <)>
+            PsiElement(CHARACTER)(')')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+          RegExpCharImpl: <\udbff>
+            PsiElement(UNICODE_CHAR)('\udbff')
+          RegExpCharRangeImpl: <\udfff-\ud800>
+            RegExpCharImpl: <\udfff>
+              PsiElement(UNICODE_CHAR)('\udfff')
+            PsiElement(MINUS)('-')
+            RegExpCharImpl: <\ud800>
+              PsiElement(UNICODE_CHAR)('\ud800')
+          RegExpCharImpl: <\udc00>
+            PsiElement(UNICODE_CHAR)('\udc00')
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: </>
+            PsiElement(CHARACTER)('/')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <o>
+            PsiElement(CHARACTER)('o')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes17.txt b/RegExpSupport/testData/psi/Escapes17.txt
new file mode 100644 (file)
index 0000000..9191528
--- /dev/null
@@ -0,0 +1,17 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[\ud800\udc00-\udbff\udfff]>
+    RegExpBranchImpl: <[\ud800\udc00-\udbff\udfff]>
+      RegExpClassImpl: <[\ud800\udc00-\udbff\udfff]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <\ud800\udc00-\udbff\udfff>
+          RegExpCharImpl: <\ud800>
+            PsiElement(UNICODE_CHAR)('\ud800')
+          RegExpCharRangeImpl: <\udc00-\udbff>
+            RegExpCharImpl: <\udc00>
+              PsiElement(UNICODE_CHAR)('\udc00')
+            PsiElement(MINUS)('-')
+            RegExpCharImpl: <\udbff>
+              PsiElement(UNICODE_CHAR)('\udbff')
+          RegExpCharImpl: <\udfff>
+            PsiElement(UNICODE_CHAR)('\udfff')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes18.txt b/RegExpSupport/testData/psi/Escapes18.txt
new file mode 100644 (file)
index 0000000..eb6c0eb
--- /dev/null
@@ -0,0 +1,131 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[<error descr="Illegal character range (to < from)">z-a</error>]>
+    RegExpBranchImpl: <[<error descr="Illegal character range (to < from)">z-a</error>]>
+      RegExpClassImpl: <[<error descr="Illegal character range (to < from)">z-a</error>]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpUnionImpl: <<error descr="Illegal character range (to < from)">z-a</error>>
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <o>
+            PsiElement(CHARACTER)('o')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <=>
+            PsiElement(CHARACTER)('=')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <I>
+            PsiElement(CHARACTER)('I')
+          RegExpCharImpl: <l>
+            PsiElement(CHARACTER)('l')
+          RegExpCharImpl: <l>
+            PsiElement(CHARACTER)('l')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <l>
+            PsiElement(CHARACTER)('l')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <h>
+            PsiElement(CHARACTER)('h')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <(>
+            PsiElement(CHARACTER)('(')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <o>
+            PsiElement(CHARACTER)('o')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <f>
+            PsiElement(CHARACTER)('f')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <o>
+            PsiElement(CHARACTER)('o')
+          RegExpCharImpl: <m>
+            PsiElement(CHARACTER)('m')
+          RegExpCharImpl: <)>
+            PsiElement(CHARACTER)(')')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+          RegExpCharRangeImpl: <z-a>
+            RegExpCharImpl: <z>
+              PsiElement(CHARACTER)('z')
+            PsiElement(MINUS)('-')
+            RegExpCharImpl: <a>
+              PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: </>
+            PsiElement(CHARACTER)('/')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <o>
+            PsiElement(CHARACTER)('o')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes19.txt b/RegExpSupport/testData/psi/Escapes19.txt
new file mode 100644 (file)
index 0000000..30cdb40
--- /dev/null
@@ -0,0 +1,12 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[a-z]>
+    RegExpBranchImpl: <[a-z]>
+      RegExpClassImpl: <[a-z]>
+        PsiElement(CLASS_BEGIN)('[')
+        RegExpCharRangeImpl: <a-z>
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          PsiElement(MINUS)('-')
+          RegExpCharImpl: <z>
+            PsiElement(CHARACTER)('z')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes2.txt b/RegExpSupport/testData/psi/Escapes2.txt
new file mode 100644 (file)
index 0000000..49f5f3a
--- /dev/null
@@ -0,0 +1,5 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\#>
+    RegExpBranchImpl: <\#>
+      RegExpCharImpl: <\#>
+        PsiElement(REDUNDANT_ESCAPE)('\#')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes20.txt b/RegExpSupport/testData/psi/Escapes20.txt
new file mode 100644 (file)
index 0000000..1abe401
--- /dev/null
@@ -0,0 +1,35 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a\Qabc?*+.))]][]\Eb>
+    RegExpBranchImpl: <a\Qabc?*+.))]][]\Eb>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      PsiWhiteSpace('\Q')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpCharImpl: <?>
+        PsiElement(CHARACTER)('?')
+      RegExpCharImpl: <*>
+        PsiElement(CHARACTER)('*')
+      RegExpCharImpl: <+>
+        PsiElement(CHARACTER)('+')
+      RegExpCharImpl: <.>
+        PsiElement(CHARACTER)('.')
+      RegExpCharImpl: <)>
+        PsiElement(CHARACTER)(')')
+      RegExpCharImpl: <)>
+        PsiElement(CHARACTER)(')')
+      RegExpCharImpl: <]>
+        PsiElement(CHARACTER)(']')
+      RegExpCharImpl: <]>
+        PsiElement(CHARACTER)(']')
+      RegExpCharImpl: <[>
+        PsiElement(CHARACTER)('[')
+      RegExpCharImpl: <]>
+        PsiElement(CHARACTER)(']')
+      PsiWhiteSpace('\E')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes21.txt b/RegExpSupport/testData/psi/Escapes21.txt
new file mode 100644 (file)
index 0000000..dfae40d
--- /dev/null
@@ -0,0 +1,40 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(a\Qabc?*+.))]][]\Eb)>
+    RegExpBranchImpl: <(a\Qabc?*+.))]][]\Eb)>
+      RegExpGroupImpl: <(a\Qabc?*+.))]][]\Eb)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <a\Qabc?*+.))]][]\Eb>
+          RegExpBranchImpl: <a\Qabc?*+.))]][]\Eb>
+            RegExpCharImpl: <a>
+              PsiElement(CHARACTER)('a')
+            PsiWhiteSpace('\Q')
+            RegExpCharImpl: <a>
+              PsiElement(CHARACTER)('a')
+            RegExpCharImpl: <b>
+              PsiElement(CHARACTER)('b')
+            RegExpCharImpl: <c>
+              PsiElement(CHARACTER)('c')
+            RegExpCharImpl: <?>
+              PsiElement(CHARACTER)('?')
+            RegExpCharImpl: <*>
+              PsiElement(CHARACTER)('*')
+            RegExpCharImpl: <+>
+              PsiElement(CHARACTER)('+')
+            RegExpCharImpl: <.>
+              PsiElement(CHARACTER)('.')
+            RegExpCharImpl: <)>
+              PsiElement(CHARACTER)(')')
+            RegExpCharImpl: <)>
+              PsiElement(CHARACTER)(')')
+            RegExpCharImpl: <]>
+              PsiElement(CHARACTER)(']')
+            RegExpCharImpl: <]>
+              PsiElement(CHARACTER)(']')
+            RegExpCharImpl: <[>
+              PsiElement(CHARACTER)('[')
+            RegExpCharImpl: <]>
+              PsiElement(CHARACTER)(']')
+            PsiWhiteSpace('\E')
+            RegExpCharImpl: <b>
+              PsiElement(CHARACTER)('b')
+        PsiElement(GROUP_END)(')')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes22.txt b/RegExpSupport/testData/psi/Escapes22.txt
new file mode 100644 (file)
index 0000000..afb07da
--- /dev/null
@@ -0,0 +1,455 @@
+REGEXP_FILE
+  RegExpPatternImpl: <[\Qabc?*+.)<warning descr="Duplicate character ')' in character class">)</warning>]<warning descr="Duplicate character ']' in character class">]</warning>[<warning descr="Duplicate character ']' in character class">]</warning>\E]>
+    RegExpBranchImpl: <[\Qabc?*+.)<warning descr="Duplicate character ')' in character class">)</warning>]<warning descr="Duplicate character ']' in character class">]</warning>[<warning descr="Duplicate character ']' in character class">]</warning>\E]>
+      RegExpClassImpl: <[\Qabc?*+.)<warning descr="Duplicate character ')' in character class">)</warning>]<warning descr="Duplicate character ']' in character class">]</warning>[<warning descr="Duplicate character ']' in character class">]</warning>\E]>
+        PsiElement(CLASS_BEGIN)('[')
+        PsiWhiteSpace('\Q')
+        RegExpUnionImpl: <abc?*+.)<warning descr="Duplicate character ')' in character class">)</warning>]<warning descr="Duplicate character ']' in character class">]</warning>[<warning descr="Duplicate character ']' in character class">]</warning>>
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <b>
+            PsiElement(CHARACTER)('b')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <?>
+            PsiElement(CHARACTER)('?')
+          RegExpCharImpl: <*>
+            PsiElement(CHARACTER)('*')
+          RegExpCharImpl: <+>
+            PsiElement(CHARACTER)('+')
+          RegExpCharImpl: <.>
+            PsiElement(CHARACTER)('.')
+          RegExpCharImpl: <)>
+            PsiElement(CHARACTER)(')')
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: <w>
+            PsiElement(CHARACTER)('w')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <=>
+            PsiElement(CHARACTER)('=')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <D>
+            PsiElement(CHARACTER)('D')
+          RegExpCharImpl: <u>
+            PsiElement(CHARACTER)('u')
+          RegExpCharImpl: <p>
+            PsiElement(CHARACTER)('p')
+          RegExpCharImpl: <l>
+            PsiElement(CHARACTER)('l')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <h>
+            PsiElement(CHARACTER)('h')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <'>
+            PsiElement(CHARACTER)(''')
+          RegExpCharImpl: <)>
+            PsiElement(CHARACTER)(')')
+          RegExpCharImpl: <'>
+            PsiElement(CHARACTER)(''')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <h>
+            PsiElement(CHARACTER)('h')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <l>
+            PsiElement(CHARACTER)('l')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+          RegExpCharImpl: <)>
+            PsiElement(CHARACTER)(')')
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: </>
+            PsiElement(CHARACTER)('/')
+          RegExpCharImpl: <w>
+            PsiElement(CHARACTER)('w')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+          RegExpCharImpl: <]>
+            PsiElement(CHARACTER)(']')
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: <w>
+            PsiElement(CHARACTER)('w')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <=>
+            PsiElement(CHARACTER)('=')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <D>
+            PsiElement(CHARACTER)('D')
+          RegExpCharImpl: <u>
+            PsiElement(CHARACTER)('u')
+          RegExpCharImpl: <p>
+            PsiElement(CHARACTER)('p')
+          RegExpCharImpl: <l>
+            PsiElement(CHARACTER)('l')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <h>
+            PsiElement(CHARACTER)('h')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <'>
+            PsiElement(CHARACTER)(''')
+          RegExpCharImpl: <]>
+            PsiElement(CHARACTER)(']')
+          RegExpCharImpl: <'>
+            PsiElement(CHARACTER)(''')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <h>
+            PsiElement(CHARACTER)('h')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <l>
+            PsiElement(CHARACTER)('l')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+          RegExpCharImpl: <]>
+            PsiElement(CHARACTER)(']')
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: </>
+            PsiElement(CHARACTER)('/')
+          RegExpCharImpl: <w>
+            PsiElement(CHARACTER)('w')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+          RegExpCharImpl: <[>
+            PsiElement(CHARACTER)('[')
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: <w>
+            PsiElement(CHARACTER)('w')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <d>
+            PsiElement(CHARACTER)('d')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <=>
+            PsiElement(CHARACTER)('=')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <D>
+            PsiElement(CHARACTER)('D')
+          RegExpCharImpl: <u>
+            PsiElement(CHARACTER)('u')
+          RegExpCharImpl: <p>
+            PsiElement(CHARACTER)('p')
+          RegExpCharImpl: <l>
+            PsiElement(CHARACTER)('l')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <h>
+            PsiElement(CHARACTER)('h')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <'>
+            PsiElement(CHARACTER)(''')
+          RegExpCharImpl: <]>
+            PsiElement(CHARACTER)(']')
+          RegExpCharImpl: <'>
+            PsiElement(CHARACTER)(''')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <h>
+            PsiElement(CHARACTER)('h')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <t>
+            PsiElement(CHARACTER)('t')
+          RegExpCharImpl: <e>
+            PsiElement(CHARACTER)('e')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: < >
+            PsiElement(CHARACTER)(' ')
+          RegExpCharImpl: <c>
+            PsiElement(CHARACTER)('c')
+          RegExpCharImpl: <l>
+            PsiElement(CHARACTER)('l')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <s>
+            PsiElement(CHARACTER)('s')
+          RegExpCharImpl: <">
+            PsiElement(CHARACTER)('"')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+          RegExpCharImpl: <]>
+            PsiElement(CHARACTER)(']')
+          RegExpCharImpl: <<>
+            PsiElement(CHARACTER)('<')
+          RegExpCharImpl: </>
+            PsiElement(CHARACTER)('/')
+          RegExpCharImpl: <w>
+            PsiElement(CHARACTER)('w')
+          RegExpCharImpl: <a>
+            PsiElement(CHARACTER)('a')
+          RegExpCharImpl: <r>
+            PsiElement(CHARACTER)('r')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <i>
+            PsiElement(CHARACTER)('i')
+          RegExpCharImpl: <n>
+            PsiElement(CHARACTER)('n')
+          RegExpCharImpl: <g>
+            PsiElement(CHARACTER)('g')
+          RegExpCharImpl: <>>
+            PsiElement(CHARACTER)('>')
+        PsiWhiteSpace('\E')
+        PsiElement(CLASS_END)(']')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes23.txt b/RegExpSupport/testData/psi/Escapes23.txt
new file mode 100644 (file)
index 0000000..22f8ab5
--- /dev/null
@@ -0,0 +1,36 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a\Qabc?*+.))]][]>
+    RegExpBranchImpl: <a\Qabc?*+.))]][]>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      PsiWhiteSpace('\Q')
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpCharImpl: <?>
+        PsiElement(CHARACTER)('?')
+      RegExpCharImpl: <*>
+        PsiElement(CHARACTER)('*')
+      RegExpCharImpl: <+>
+        PsiElement(CHARACTER)('+')
+      RegExpCharImpl: <.>
+        PsiElement(CHARACTER)('.')
+      RegExpCharImpl: <)>
+        PsiElement(CHARACTER)(')')
+      RegExpCharImpl: <)>
+        PsiElement(CHARACTER)(')')
+      RegExpCharImpl: <]>
+        PsiElement(CHARACTER)(']')
+      RegExpCharImpl: <]>
+        PsiElement(CHARACTER)(']')
+      RegExpCharImpl: <[>
+        PsiElement(CHARACTER)('[')
+      RegExpCharImpl: <]>
+        PsiElement(CHARACTER)(']')
+  PsiErrorElement:Unmatched closing ')'
+    <empty list>
+  PsiWhiteSpace('\E')
+  PsiElement(GROUP_END)(')')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes24.txt b/RegExpSupport/testData/psi/Escapes24.txt
new file mode 100644 (file)
index 0000000..549838a
--- /dev/null
@@ -0,0 +1,9 @@
+REGEXP_FILE
+  PsiWhiteSpace('\Q')
+  RegExpPatternImpl: <\j>
+    RegExpBranchImpl: <\j>
+      RegExpCharImpl: <\>
+        PsiElement(CHARACTER)('\')
+      RegExpCharImpl: <j>
+        PsiElement(CHARACTER)('j')
+  PsiWhiteSpace('\E')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes25.txt b/RegExpSupport/testData/psi/Escapes25.txt
new file mode 100644 (file)
index 0000000..f2ca58d
--- /dev/null
@@ -0,0 +1,5 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\c0>
+    RegExpBranchImpl: <\c0>
+      RegExpCharImpl: <\c0>
+        PsiElement(CTRL)('\c0')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes3.txt b/RegExpSupport/testData/psi/Escapes3.txt
new file mode 100644 (file)
index 0000000..4d1eb47
--- /dev/null
@@ -0,0 +1,9 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a\>
+    RegExpBranchImpl: <a\>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <\>
+        PsiErrorElement:Illegal/unsupported escape sequence
+          <empty list>
+        PsiElement(INVALID_CHARACTER_ESCAPE_TOKEN)('\')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes4.txt b/RegExpSupport/testData/psi/Escapes4.txt
new file mode 100644 (file)
index 0000000..dde6682
--- /dev/null
@@ -0,0 +1,9 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a\(b>
+    RegExpBranchImpl: <a\(b>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <\(>
+        PsiElement(ESC_CHARACTER)('\(')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes5.txt b/RegExpSupport/testData/psi/Escapes5.txt
new file mode 100644 (file)
index 0000000..ad56b55
--- /dev/null
@@ -0,0 +1,12 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a\(*b>
+    RegExpBranchImpl: <a\(*b>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpClosureImpl: <\(*>
+        RegExpCharImpl: <\(>
+          PsiElement(ESC_CHARACTER)('\(')
+        RegExpQuantifierImpl: <*>
+          PsiElement(STAR)('*')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes6.txt b/RegExpSupport/testData/psi/Escapes6.txt
new file mode 100644 (file)
index 0000000..e0f5ca3
--- /dev/null
@@ -0,0 +1,9 @@
+REGEXP_FILE
+  RegExpPatternImpl: <a\\b>
+    RegExpBranchImpl: <a\\b>
+      RegExpCharImpl: <a>
+        PsiElement(CHARACTER)('a')
+      RegExpCharImpl: <\\>
+        PsiElement(ESC_CHARACTER)('\\')
+      RegExpCharImpl: <b>
+        PsiElement(CHARACTER)('b')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes7.txt b/RegExpSupport/testData/psi/Escapes7.txt
new file mode 100644 (file)
index 0000000..71dfc14
--- /dev/null
@@ -0,0 +1,5 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\u004a>
+    RegExpBranchImpl: <\u004a>
+      RegExpCharImpl: <\u004a>
+        PsiElement(UNICODE_CHAR)('\u004a')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes8.txt b/RegExpSupport/testData/psi/Escapes8.txt
new file mode 100644 (file)
index 0000000..1024068
--- /dev/null
@@ -0,0 +1,5 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\0123>
+    RegExpBranchImpl: <\0123>
+      RegExpCharImpl: <\0123>
+        PsiElement(OCT_CHAR)('\0123')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Escapes9.txt b/RegExpSupport/testData/psi/Escapes9.txt
new file mode 100644 (file)
index 0000000..4ae56fd
--- /dev/null
@@ -0,0 +1,5 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\0>
+    RegExpBranchImpl: <\0>
+      RegExpCharImpl: <\0>
+        PsiElement(BAD_OCT_VALUE)('\0')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Groups1.txt b/RegExpSupport/testData/psi/Groups1.txt
new file mode 100644 (file)
index 0000000..7f68b46
--- /dev/null
@@ -0,0 +1,13 @@
+REGEXP_FILE
+  RegExpPatternImpl: <()ef>
+    RegExpBranchImpl: <()ef>
+      RegExpGroupImpl: <()>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <>
+          RegExpBranchImpl: <>
+            <empty list>
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
+      RegExpCharImpl: <f>
+        PsiElement(CHARACTER)('f')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Groups10.txt b/RegExpSupport/testData/psi/Groups10.txt
new file mode 100644 (file)
index 0000000..c243c0b
--- /dev/null
@@ -0,0 +1,16 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(a|)*>
+    RegExpBranchImpl: <(a|)*>
+      RegExpClosureImpl: <(a|)*>
+        RegExpGroupImpl: <(a|)>
+          PsiElement(GROUP_BEGIN)('(')
+          RegExpPatternImpl: <a|>
+            RegExpBranchImpl: <a>
+              RegExpCharImpl: <a>
+                PsiElement(CHARACTER)('a')
+            PsiElement(UNION)('|')
+            RegExpBranchImpl: <>
+              <empty list>
+          PsiElement(GROUP_END)(')')
+        RegExpQuantifierImpl: <*>
+          PsiElement(STAR)('*')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Groups11.txt b/RegExpSupport/testData/psi/Groups11.txt
new file mode 100644 (file)
index 0000000..71fcbfc
--- /dev/null
@@ -0,0 +1,20 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(ab|cd)e>
+    RegExpBranchImpl: <(ab|cd)e>
+      RegExpGroupImpl: <(ab|cd)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <ab|cd>
+          RegExpBranchImpl: <ab>
+            RegExpCharImpl: <a>
+              PsiElement(CHARACTER)('a')
+            RegExpCharImpl: <b>
+              PsiElement(CHARACTER)('b')
+          PsiElement(UNION)('|')
+          RegExpBranchImpl: <cd>
+            RegExpCharImpl: <c>
+              PsiElement(CHARACTER)('c')
+            RegExpCharImpl: <d>
+              PsiElement(CHARACTER)('d')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <e>
+        PsiElement(CHARACTER)('e')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Groups12.txt b/RegExpSupport/testData/psi/Groups12.txt
new file mode 100644 (file)
index 0000000..941b528
--- /dev/null
@@ -0,0 +1,25 @@
+REGEXP_FILE
+  RegExpPatternImpl: <(.*)c(.*)>
+    RegExpBranchImpl: <(.*)c(.*)>
+      RegExpGroupImpl: <(.*)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <.*>
+          RegExpBranchImpl: <.*>
+            RegExpClosureImpl: <.*>
+              RegExpSimpleClassImpl: <.>
+                PsiElement(DOT)('.')
+              RegExpQuantifierImpl: <*>
+                PsiElement(STAR)('*')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <c>
+        PsiElement(CHARACTER)('c')
+      RegExpGroupImpl: <(.*)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <.*>
+          RegExpBranchImpl: <.*>
+            RegExpClosureImpl: <.*>
+              RegExpSimpleClassImpl: <.>
+                PsiElement(DOT)('.')
+              RegExpQuantifierImpl: <*>
+                PsiElement(STAR)('*')
+        PsiElement(GROUP_END)(')')
\ No newline at end of file
diff --git a/RegExpSupport/testData/psi/Groups13.txt b/RegExpSupport/testData/psi/Groups13.txt
new file mode 100644 (file)
index 0000000..858a7c2
--- /dev/null
@@ -0,0 +1,31 @@
+REGEXP_FILE
+  RegExpPatternImpl: <\((.*), (.*)\)>
+    RegExpBranchImpl: <\((.*), (.*)\)>
+      RegExpCharImpl: <\(>
+        PsiElement(ESC_CHARACTER)('\(')
+      RegExpGroupImpl: <(.*)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <.*>
+          RegExpBranchImpl: <.*>
+            RegExpClosureImpl: <.*>
+              RegExpSimpleClassImpl: <.>
+                PsiElement(DOT)('.')
+              RegExpQuantifierImpl: <*>
+                PsiElement(STAR)('*')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <,>
+        PsiElement(CHARACTER)(',')
+      RegExpCharImpl: < >
+        PsiElement(CHARACTER)(' ')
+      RegExpGroupImpl: <(.*)>
+        PsiElement(GROUP_BEGIN)('(')
+        RegExpPatternImpl: <.*>
+          RegExpBranchImpl: <.*>
+            RegExpClosureImpl: <.*>
+              RegExpSimpleClassImpl: <.>
+                PsiElement(DOT)('.')
+              RegExpQuantifierImpl: <*>
+                PsiElement(STAR)('*')
+        PsiElement(GROUP_END)(')')
+      RegExpCharImpl: <\)>
+        PsiElement(ESC_CHARACTER)('\)')
\ No newline at end&