diff --git a/java/java-tests/java-tests.iml b/java/java-tests/java-tests.iml
index 8f933bc5bdf8..e45989a2ad8c 100644
--- a/java/java-tests/java-tests.iml
+++ b/java/java-tests/java-tests.iml
@@ -47,5 +47,6 @@
+
\ No newline at end of file
diff --git a/java/java-tests/testSrc/com/intellij/slicer/SliceBackwardTest.java b/java/java-tests/testSrc/com/intellij/slicer/SliceBackwardTest.java
index c905d3cb2948..8d8638dc02d4 100644
--- a/java/java-tests/testSrc/com/intellij/slicer/SliceBackwardTest.java
+++ b/java/java-tests/testSrc/com/intellij/slicer/SliceBackwardTest.java
@@ -43,11 +43,11 @@ public class SliceBackwardTest extends SliceTestCase {
private void doTest() throws Exception {
configureByFile("/codeInsight/slice/backward/"+getTestName(false)+".java");
- Map sliceUsageName2Offset = extractSliceOffsetsFromDocument(getEditor().getDocument());
+ Map sliceUsageName2Offset = SliceTestUtil.extractSliceOffsetsFromDocument(getEditor().getDocument());
PsiDocumentManager.getInstance(getProject()).commitAllDocuments();
PsiElement element = new SliceHandler(true).getExpressionAtCaret(getEditor(), getFile());
assertNotNull(element);
- calcRealOffsets(element, sliceUsageName2Offset, myFlownOffsets);
+ SliceTestUtil.calcRealOffsets(element, sliceUsageName2Offset, myFlownOffsets);
Collection errors = highlightErrors();
assertEmpty(errors);
SliceAnalysisParams params = new SliceAnalysisParams();
@@ -55,101 +55,7 @@ public class SliceBackwardTest extends SliceTestCase {
params.dataFlowToThis = true;
SliceUsage usage = LanguageSlicing.getProvider(element).createRootUsage(element, params);
- checkUsages(usage, myFlownOffsets);
- }
-
- static void checkUsages(final SliceUsage usage, final TIntObjectHashMap flownOffsets) {
- final List children = new ArrayList();
- boolean b = ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() {
- @Override
- public void run() {
- usage.processChildren(new CommonProcessors.CollectProcessor(children));
- }
- }, "Expanding", true, usage.getElement().getProject());
- assertTrue(b);
- int startOffset = usage.getElement().getTextOffset();
- IntArrayList list = flownOffsets.get(startOffset);
- int[] offsets = list == null ? new int[0] : list.toArray();
- Arrays.sort(offsets);
-
- int size = offsets.length;
- assertEquals(message(startOffset, usage), size, children.size());
- Collections.sort(children, new Comparator() {
- @Override
- public int compare(SliceUsage o1, SliceUsage o2) {
- return o1.compareTo(o2);
- }
- });
-
- for (int i = 0; i < children.size(); i++) {
- SliceUsage child = children.get(i);
- int offset = offsets[i];
- assertEquals(message(offset, child), offset, child.getUsageInfo().getElement().getTextOffset());
-
- checkUsages(child, flownOffsets);
- }
- }
-
- private static String message(int startOffset, SliceUsage usage) {
- PsiFile file = usage.getElement().getContainingFile();
- Document document = PsiDocumentManager.getInstance(file.getProject()).getDocument(file);
- Editor editor = FileEditorManager.getInstance(file.getProject()).getSelectedTextEditor();
- LogicalPosition position = editor.offsetToLogicalPosition(startOffset);
- return position + ": '" + StringUtil.first(file.getText().substring(startOffset), 100, true) + "'";
- }
-
- static void calcRealOffsets(PsiElement startElement, Map sliceUsageName2Offset,
- final TIntObjectHashMap flownOffsets) {
- fill(sliceUsageName2Offset, "", startElement.getTextOffset(), flownOffsets);
- }
-
- static Map extractSliceOffsetsFromDocument(final Document document) {
- Map sliceUsageName2Offset = new THashMap();
-
- extract(document, sliceUsageName2Offset, "");
- int index = document.getText().indexOf(" sliceUsageName2Offset, String name, int offset,
- final TIntObjectHashMap flownOffsets) {
- for (int i=1;i<9;i++) {
- String newName = name + i;
- RangeMarker marker = sliceUsageName2Offset.get(newName);
- if (marker == null) break;
- IntArrayList offsets = flownOffsets.get(offset);
- if (offsets == null) {
- offsets = new IntArrayList();
- flownOffsets.put(offset, offsets);
- }
- int newStartOffset = marker.getStartOffset();
- offsets.add(newStartOffset);
- fill(sliceUsageName2Offset, newName, newStartOffset, flownOffsets);
- }
- }
-
- private static void extract(final Document document, final Map sliceUsageName2Offset, final String name) {
- WriteCommandAction.runWriteCommandAction(null, new Runnable() {
- @Override
- public void run() {
- for (int i = 1; i < 9; i++) {
- String newName = name + i;
- String s = "";
- if (!document.getText().contains(s)) break;
- int off = document.getText().indexOf(s);
-
- document.deleteString(off, off + s.length());
- RangeMarker prev = sliceUsageName2Offset.put(newName, document.createRangeMarker(off, off));
- assertNull(prev);
-
- extract(document, sliceUsageName2Offset, newName);
- }
- }
- });
+ SliceTestUtil.checkUsages(usage, myFlownOffsets);
}
public void testSimple() throws Exception { doTest();}
diff --git a/java/java-tests/testSrc/com/intellij/slicer/SliceForwardTest.java b/java/java-tests/testSrc/com/intellij/slicer/SliceForwardTest.java
index 2d4458dcbe29..9348a1cb4c8e 100644
--- a/java/java-tests/testSrc/com/intellij/slicer/SliceForwardTest.java
+++ b/java/java-tests/testSrc/com/intellij/slicer/SliceForwardTest.java
@@ -35,18 +35,18 @@ public class SliceForwardTest extends DaemonAnalyzerTestCase {
private void dotest() throws Exception {
configureByFile("/codeInsight/slice/forward/"+getTestName(false)+".java");
- Map sliceUsageName2Offset = SliceBackwardTest.extractSliceOffsetsFromDocument(getEditor().getDocument());
+ Map sliceUsageName2Offset = SliceTestUtil.extractSliceOffsetsFromDocument(getEditor().getDocument());
PsiDocumentManager.getInstance(getProject()).commitAllDocuments();
PsiElement element = new SliceForwardHandler().getExpressionAtCaret(getEditor(), getFile());
assertNotNull(element);
- SliceBackwardTest.calcRealOffsets(element, sliceUsageName2Offset, myFlownOffsets);
+ SliceTestUtil.calcRealOffsets(element, sliceUsageName2Offset, myFlownOffsets);
Collection errors = highlightErrors();
assertEmpty(errors);
SliceAnalysisParams params = new SliceAnalysisParams();
params.scope = new AnalysisScope(getProject());
params.dataFlowToThis = false;
SliceUsage usage = LanguageSlicing.getProvider(element).createRootUsage(element, params);
- SliceBackwardTest.checkUsages(usage, myFlownOffsets);
+ SliceTestUtil.checkUsages(usage, myFlownOffsets);
}
public void testSimple() throws Exception { dotest();}
diff --git a/platform/lang-impl/testSources/com/intellij/slicer/SliceTestUtil.java b/platform/lang-impl/testSources/com/intellij/slicer/SliceTestUtil.java
new file mode 100644
index 000000000000..144acf4a267d
--- /dev/null
+++ b/platform/lang-impl/testSources/com/intellij/slicer/SliceTestUtil.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2000-2015 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 com.intellij.slicer;
+
+import com.intellij.openapi.command.WriteCommandAction;
+import com.intellij.openapi.editor.Document;
+import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.editor.LogicalPosition;
+import com.intellij.openapi.editor.RangeMarker;
+import com.intellij.openapi.fileEditor.FileEditorManager;
+import com.intellij.openapi.progress.ProgressManager;
+import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.psi.PsiDocumentManager;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiFile;
+import com.intellij.util.CommonProcessors;
+import com.intellij.util.containers.IntArrayList;
+import gnu.trove.THashMap;
+import gnu.trove.TIntObjectHashMap;
+
+import java.util.*;
+
+import static junit.framework.TestCase.*;
+
+public class SliceTestUtil {
+
+ private SliceTestUtil() {
+ }
+
+ public static void calcRealOffsets(PsiElement startElement, Map sliceUsageName2Offset,
+ final TIntObjectHashMap flownOffsets) {
+ fill(sliceUsageName2Offset, "", startElement.getTextOffset(), flownOffsets);
+ }
+
+ public static Map extractSliceOffsetsFromDocument(final Document document) {
+ Map sliceUsageName2Offset = new THashMap();
+
+ extract(document, sliceUsageName2Offset, "");
+ int index = document.getText().indexOf(" sliceUsageName2Offset, String name, int offset,
+ final TIntObjectHashMap flownOffsets) {
+ for (int i=1;i<9;i++) {
+ String newName = name + i;
+ RangeMarker marker = sliceUsageName2Offset.get(newName);
+ if (marker == null) break;
+ IntArrayList offsets = flownOffsets.get(offset);
+ if (offsets == null) {
+ offsets = new IntArrayList();
+ flownOffsets.put(offset, offsets);
+ }
+ int newStartOffset = marker.getStartOffset();
+ offsets.add(newStartOffset);
+ fill(sliceUsageName2Offset, newName, newStartOffset, flownOffsets);
+ }
+ }
+
+ private static void extract(final Document document, final Map sliceUsageName2Offset, final String name) {
+ WriteCommandAction.runWriteCommandAction(null, new Runnable() {
+ @Override
+ public void run() {
+ for (int i = 1; i < 9; i++) {
+ String newName = name + i;
+ String s = "";
+ if (!document.getText().contains(s)) break;
+ int off = document.getText().indexOf(s);
+
+ document.deleteString(off, off + s.length());
+ RangeMarker prev = sliceUsageName2Offset.put(newName, document.createRangeMarker(off, off));
+ assertNull(prev);
+
+ extract(document, sliceUsageName2Offset, newName);
+ }
+ }
+ });
+ }
+
+ public static void checkUsages(final SliceUsage usage, final TIntObjectHashMap flownOffsets) {
+ final List children = new ArrayList();
+ boolean b = ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() {
+ @Override
+ public void run() {
+ usage.processChildren(new CommonProcessors.CollectProcessor(children));
+ }
+ }, "Expanding", true, usage.getElement().getProject());
+ assertTrue(b);
+ int startOffset = usage.getElement().getTextOffset();
+ IntArrayList list = flownOffsets.get(startOffset);
+ int[] offsets = list == null ? new int[0] : list.toArray();
+ Arrays.sort(offsets);
+
+ int size = offsets.length;
+ assertEquals(message(startOffset, usage), size, children.size());
+ Collections.sort(children, new Comparator() {
+ @Override
+ public int compare(SliceUsage o1, SliceUsage o2) {
+ return o1.compareTo(o2);
+ }
+ });
+
+ for (int i = 0; i < children.size(); i++) {
+ SliceUsage child = children.get(i);
+ int offset = offsets[i];
+ assertEquals(message(offset, child), offset, child.getUsageInfo().getElement().getTextOffset());
+
+ checkUsages(child, flownOffsets);
+ }
+ }
+
+ private static String message(int startOffset, SliceUsage usage) {
+ PsiFile file = usage.getElement().getContainingFile();
+ Document document = PsiDocumentManager.getInstance(file.getProject()).getDocument(file);
+ Editor editor = FileEditorManager.getInstance(file.getProject()).getSelectedTextEditor();
+ LogicalPosition position = editor.offsetToLogicalPosition(startOffset);
+ return position + ": '" + StringUtil.first(file.getText().substring(startOffset), 100, true) + "'";
+ }
+}