mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge branch 'master' of git@git.labs.intellij.net:idea/community
This commit is contained in:
@@ -19,7 +19,6 @@ import com.intellij.debugger.jdi.ThreadReferenceProxyImpl;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.sun.jdi.InternalException;
|
||||
import com.sun.jdi.ObjectCollectedException;
|
||||
import com.sun.jdi.ThreadReference;
|
||||
import com.sun.jdi.event.EventSet;
|
||||
import com.sun.jdi.request.EventRequest;
|
||||
|
||||
@@ -116,19 +115,19 @@ public class SuspendManagerImpl implements SuspendManager {
|
||||
LOG.debug("Start resuming eventSet " + set.toString() + " suspendPolicy = " + set.suspendPolicy() + ",size = " + set.size());
|
||||
}
|
||||
myDebugProcess.logThreads();
|
||||
final ThreadReferenceProxyImpl thread = getThread();
|
||||
|
||||
if (thread != null) { // check that thread is suspended at the moment
|
||||
try {
|
||||
if (!thread.isSuspended()) {
|
||||
final int status = thread.status();
|
||||
if ((status != ThreadReference.THREAD_STATUS_ZOMBIE) && (status != ThreadReference.THREAD_STATUS_NOT_STARTED) && (status != ThreadReference.THREAD_STATUS_UNKNOWN)) {
|
||||
LOG.error("Context thread must be suspended");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (ObjectCollectedException ignored) {}
|
||||
}
|
||||
//final ThreadReferenceProxyImpl thread = getThread();
|
||||
//
|
||||
//if (thread != null) { // check that thread is suspended at the moment
|
||||
// try {
|
||||
// if (!thread.isSuspended()) {
|
||||
// final int status = thread.status();
|
||||
// if ((status != ThreadReference.THREAD_STATUS_ZOMBIE) && (status != ThreadReference.THREAD_STATUS_NOT_STARTED) && (status != ThreadReference.THREAD_STATUS_UNKNOWN)) {
|
||||
// LOG.error("Context thread must be suspended");
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// catch (ObjectCollectedException ignored) {}
|
||||
//}
|
||||
|
||||
int attempts = 5;
|
||||
while (--attempts > 0) {
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<orderEntry type="library" name="commons-collections" level="project" />
|
||||
<orderEntry type="module" module-name="xml" />
|
||||
<orderEntry type="module" module-name="java-runtime" />
|
||||
<orderEntry type="module" module-name="lang-impl" />
|
||||
<orderEntry type="module" module-name="lang-impl" exported="" />
|
||||
<orderEntry type="module" module-name="compiler-openapi" />
|
||||
<orderEntry type="module" module-name="jsp-openapi" />
|
||||
<orderEntry type="module" module-name="jsp-spi" />
|
||||
@@ -28,6 +28,8 @@
|
||||
<orderEntry type="library" name="jcip" level="project" />
|
||||
<orderEntry type="library" name="Groovy" level="project" />
|
||||
<orderEntry type="library" name="Guava" level="project" />
|
||||
<orderEntry type="module" module-name="vcs-api" />
|
||||
<orderEntry type="library" name="JUnit4" level="project" />
|
||||
</component>
|
||||
<component name="copyright">
|
||||
<Base>
|
||||
|
||||
@@ -106,6 +106,12 @@ public interface Constants extends ElementType {
|
||||
}
|
||||
};
|
||||
|
||||
PsiElementArrayConstructor<PsiAnnotation> PSI_ANNOTATION_ARRAY_CONSTRUCTOR = new PsiElementArrayConstructor<PsiAnnotation>() {
|
||||
public PsiAnnotation[] newPsiElementArray(int length) {
|
||||
return length == 0 ? PsiAnnotation.EMPTY_ARRAY : new PsiAnnotation[length];
|
||||
}
|
||||
};
|
||||
|
||||
TokenSet CLASS_BIT_SET = TokenSet.create(CLASS, ANONYMOUS_CLASS, ENUM_CONSTANT_INITIALIZER);
|
||||
TokenSet FIELD_BIT_SET = TokenSet.create(FIELD, ENUM_CONSTANT);
|
||||
TokenSet METHOD_BIT_SET = TokenSet.create(METHOD, ANNOTATION_METHOD);
|
||||
|
||||
@@ -43,7 +43,7 @@ public class PsiMethodReceiverImpl extends CompositePsiElement implements PsiMet
|
||||
|
||||
@NotNull
|
||||
public PsiAnnotation[] getAnnotations() {
|
||||
return getChildrenAsPsiElements(ElementType.ANNOTATIONS, PsiAnnotation.PSI_ANNOTATION_ARRAY_CONSTRUCTOR);
|
||||
return getChildrenAsPsiElements(ElementType.ANNOTATIONS, Constants.PSI_ANNOTATION_ARRAY_CONSTRUCTOR);
|
||||
}
|
||||
|
||||
public PsiAnnotation findAnnotation(@NotNull @NonNls String qualifiedName) {
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="util" exported="" />
|
||||
<orderEntry type="module" module-name="java-runtime" />
|
||||
<orderEntry type="library" name="JUnit4" level="project" />
|
||||
<orderEntry type="library" name="JDOM" level="project" />
|
||||
<orderEntry type="module" module-name="forms_rt" />
|
||||
@@ -21,10 +20,9 @@
|
||||
<orderEntry type="module" module-name="xml-openapi" exported="" />
|
||||
<orderEntry type="module" module-name="platform-api" exported="" />
|
||||
<orderEntry type="module" module-name="lang-api" exported="" />
|
||||
<orderEntry type="module" module-name="vcs-api" />
|
||||
<orderEntry type="module" module-name="vcs-api" exported="" />
|
||||
<orderEntry type="library" name="XmlRPC" level="project" />
|
||||
<orderEntry type="module" module-name="dom-openapi" />
|
||||
<orderEntry type="module" module-name="testFramework" exported="" />
|
||||
<orderEntry type="module" module-name="resources-en" exported="" />
|
||||
</component>
|
||||
<component name="copyright">
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
package com.intellij.psi;
|
||||
|
||||
import com.intellij.psi.meta.PsiMetaOwner;
|
||||
import com.intellij.psi.impl.source.PsiElementArrayConstructor;
|
||||
import com.intellij.util.ArrayFactory;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -32,11 +31,6 @@ public interface PsiAnnotation extends PsiAnnotationMemberValue, PsiMetaOwner {
|
||||
* The empty array of PSI annotations which can be reused to avoid unnecessary allocations.
|
||||
*/
|
||||
PsiAnnotation[] EMPTY_ARRAY = new PsiAnnotation[0];
|
||||
PsiElementArrayConstructor<PsiAnnotation> PSI_ANNOTATION_ARRAY_CONSTRUCTOR = new PsiElementArrayConstructor<PsiAnnotation>() {
|
||||
public PsiAnnotation[] newPsiElementArray(int length) {
|
||||
return length == 0 ? EMPTY_ARRAY : new PsiAnnotation[length];
|
||||
}
|
||||
};
|
||||
|
||||
ArrayFactory<PsiAnnotation> ARRAY_FACTORY = new ArrayFactory<PsiAnnotation>() {
|
||||
public PsiAnnotation[] create(final int count) {
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
<orderEntry type="module" module-name="java-impl" />
|
||||
<orderEntry type="module" module-name="execution-impl" exported="" scope="RUNTIME" />
|
||||
<orderEntry type="library" name="Groovy" level="project" />
|
||||
<orderEntry type="module" module-name="testFramework" exported="" />
|
||||
</component>
|
||||
<component name="copyright">
|
||||
<Base>
|
||||
|
||||
@@ -18,7 +18,6 @@ package com.intellij.execution.ui;
|
||||
import com.intellij.execution.process.ProcessHandler;
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.openapi.actionSystem.DataProvider;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.ui.content.Content;
|
||||
@@ -44,7 +43,6 @@ public class RunContentDescriptor {
|
||||
|
||||
public RunContentDescriptor(final ExecutionConsole executionConsole,
|
||||
final ProcessHandler processHandler, final JComponent component, final String displayName, final Icon icon) {
|
||||
LOG.assertTrue(executionConsole != null || ApplicationManager.getApplication().isUnitTestMode());
|
||||
myExecutionConsole = executionConsole;
|
||||
myProcessHandler = processHandler;
|
||||
myComponent = component;
|
||||
@@ -71,7 +69,9 @@ public class RunContentDescriptor {
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
Disposer.dispose(myExecutionConsole);
|
||||
if (myExecutionConsole != null) {
|
||||
Disposer.dispose(myExecutionConsole);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
+5
-3
@@ -49,7 +49,9 @@ public class IgnoreWhiteSpacesAction extends ComboBoxAction implements DumbAware
|
||||
@Override
|
||||
public JComponent createCustomComponent(final Presentation presentation) {
|
||||
JPanel panel = new JPanel(new BorderLayout());
|
||||
panel.add(new JLabel(DiffBundle.message("comparison.ignore.whitespace.acton.name")), BorderLayout.WEST);
|
||||
final JLabel label = new JLabel(DiffBundle.message("comparison.ignore.whitespace.acton.name"));
|
||||
label.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 4));
|
||||
panel.add(label, BorderLayout.WEST);
|
||||
panel.add(super.createCustomComponent(presentation), BorderLayout.CENTER);
|
||||
return panel;
|
||||
}
|
||||
@@ -67,8 +69,8 @@ public class IgnoreWhiteSpacesAction extends ComboBoxAction implements DumbAware
|
||||
Presentation presentation = e.getPresentation();
|
||||
DiffPanelEx diffPanel = DiffPanelImpl.fromDataContext(e.getDataContext());
|
||||
if (diffPanel != null && diffPanel.getComponent().isDisplayable()) {
|
||||
AnAction actoin = myActions.get(diffPanel.getComparisonPolicy());
|
||||
Presentation templatePresentation = actoin.getTemplatePresentation();
|
||||
AnAction action = myActions.get(diffPanel.getComparisonPolicy());
|
||||
Presentation templatePresentation = action.getTemplatePresentation();
|
||||
presentation.setIcon(templatePresentation.getIcon());
|
||||
presentation.setText(templatePresentation.getText());
|
||||
presentation.setEnabled(true);
|
||||
|
||||
@@ -17,15 +17,13 @@ package com.intellij.openapi.diff.ex;
|
||||
|
||||
import com.intellij.openapi.editor.colors.EditorColorsManager;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsScheme;
|
||||
import com.intellij.openapi.vcs.FileStatus;
|
||||
import com.intellij.openapi.vcs.VcsBundle;
|
||||
import com.intellij.ui.IdeBorderFactory;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@@ -33,12 +31,6 @@ import java.util.List;
|
||||
* @author Yura Cangea
|
||||
*/
|
||||
public class DiffStatusBar extends JPanel {
|
||||
public static final List<? extends LegendTypeDescriptor> DEFAULT_TYPES =
|
||||
Arrays.asList(
|
||||
new LegendTypeDescriptorImpl(VcsBundle.message("diff.type.name.modified"), FileStatus.COLOR_MODIFIED),
|
||||
new LegendTypeDescriptorImpl(VcsBundle.message("diff.type.name.added"), FileStatus.COLOR_ADDED),
|
||||
new LegendTypeDescriptorImpl(VcsBundle.message("diff.type.name.deleted"), FileStatus.COLOR_MISSING));
|
||||
|
||||
private final Collection<JComponent> myLabels = new ArrayList<JComponent>();
|
||||
|
||||
private final JLabel myTextLabel = new JLabel("");
|
||||
@@ -143,24 +135,7 @@ public class DiffStatusBar extends JPanel {
|
||||
|
||||
public interface LegendTypeDescriptor {
|
||||
String getDisplayName();
|
||||
@Nullable
|
||||
Color getLegendColor(EditorColorsScheme colorScheme);
|
||||
}
|
||||
|
||||
static class LegendTypeDescriptorImpl implements LegendTypeDescriptor {
|
||||
private final String myDisplayName;
|
||||
private final Color myColor;
|
||||
|
||||
LegendTypeDescriptorImpl(final String displayName, final Color color) {
|
||||
myDisplayName = displayName;
|
||||
myColor = color;
|
||||
}
|
||||
|
||||
public String getDisplayName() {
|
||||
return myDisplayName;
|
||||
}
|
||||
|
||||
public Color getLegendColor(final EditorColorsScheme colorScheme) {
|
||||
return myColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-1
@@ -77,7 +77,10 @@ public abstract class DiffMarkup implements EditorSource {
|
||||
attributes, HighlighterTargetArea.EXACT_RANGE);
|
||||
}
|
||||
Color stripeBarColor = attributes.getErrorStripeColor();
|
||||
if (stripeBarColor != null) rangeMarker.setErrorStripeMarkColor(stripeBarColor);
|
||||
if (stripeBarColor != null) {
|
||||
rangeMarker.setErrorStripeMarkColor(stripeBarColor);
|
||||
rangeMarker.setThinErrorStripeMark(true);
|
||||
}
|
||||
saveHighlighter(rangeMarker);
|
||||
}
|
||||
|
||||
|
||||
@@ -221,8 +221,9 @@ class ByWord implements DiffPolicy{
|
||||
}
|
||||
|
||||
private DiffFragment[] fragmentsByChar(String text1, String text2) {
|
||||
DiffFragment[] fragments = BY_CHAR.buildFragments(myVersion1.getPrevChar() + text1,
|
||||
myVersion2.getPrevChar() + text2);
|
||||
final String side1 = myVersion1.getPrevChar() + text1;
|
||||
final String side2 = myVersion2.getPrevChar() + text2;
|
||||
DiffFragment[] fragments = BY_CHAR.buildFragments(side1, side2);
|
||||
return Util.cutFirst(fragments);
|
||||
}
|
||||
|
||||
@@ -267,7 +268,7 @@ class ByWord implements DiffPolicy{
|
||||
String tail1 = myVersion1.getNotProcessedTail();
|
||||
String tail2 = myVersion2.getNotProcessedTail();
|
||||
if (tail1.length() == 0 && tail2.length() == 0) return;
|
||||
DiffFragment[] fragments = fragmentsByChar(tail1, tail2);
|
||||
DiffFragment[] fragments = BY_CHAR.buildFragments(tail1, tail2);
|
||||
if (myFragments.size() > 0) {
|
||||
DiffFragment lastFragment = myFragments.get(myFragments.size() - 1);
|
||||
if (lastFragment.isChange()) {
|
||||
|
||||
+5
-10
@@ -25,7 +25,6 @@ import com.intellij.openapi.diff.impl.highlighting.LineBlockDivider;
|
||||
import com.intellij.openapi.diff.impl.highlighting.Util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class TextCompareProcessor {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.diff.impl.processing.Processor");
|
||||
@@ -40,8 +39,7 @@ public class TextCompareProcessor {
|
||||
DiffFragment[] step1lineFragments = new DiffCorrection.TrueLineBlocks(myComparisonPolicy).
|
||||
correctAndNormalize(woFormattingBlocks);
|
||||
ArrayList<LineFragment> lineBlocks = new DiffFragmentsProcessor().process(step1lineFragments);
|
||||
for (Iterator<LineFragment> iterator = lineBlocks.iterator(); iterator.hasNext();) {
|
||||
LineFragment lineBlock = iterator.next();
|
||||
for (LineFragment lineBlock : lineBlocks) {
|
||||
if (lineBlock.isOneSide() || lineBlock.isEqual()) continue;
|
||||
String subText1 = lineBlock.getText(text1, FragmentSide.SIDE1);
|
||||
String subText2 = lineBlock.getText(text2, FragmentSide.SIDE2);
|
||||
@@ -61,12 +59,10 @@ public class TextCompareProcessor {
|
||||
lines = Util.uniteFormattingOnly(lines);
|
||||
|
||||
LineFragmentsCollector collector = new LineFragmentsCollector();
|
||||
for (int i = 0; i < lines.length; i++) {
|
||||
DiffFragment[] line = lines[i];
|
||||
for (DiffFragment[] line : lines) {
|
||||
DiffFragment[][] subLines = LineBlockDivider.SINGLE_SIDE.divide(line);
|
||||
subLines = Util.uniteFormattingOnly(subLines);
|
||||
for (int j = 0; j < subLines.length; j++) {
|
||||
DiffFragment[] subLineFragments = subLines[j];
|
||||
for (DiffFragment[] subLineFragments : subLines) {
|
||||
LineFragment subLine = collector.addDiffFragment(Util.concatenate(subLineFragments));
|
||||
if (!subLine.isOneSide()) {
|
||||
subLine.setChildren(processInlineFragments(subLineFragments));
|
||||
@@ -76,11 +72,10 @@ public class TextCompareProcessor {
|
||||
return collector.getFragments();
|
||||
}
|
||||
|
||||
private ArrayList<Fragment> processInlineFragments(DiffFragment[] subLineFragments) {
|
||||
private static ArrayList<Fragment> processInlineFragments(DiffFragment[] subLineFragments) {
|
||||
LOG.assertTrue(subLineFragments.length > 0);
|
||||
FragmentsCollector result = new FragmentsCollector();
|
||||
for (int i = 0; i < subLineFragments.length; i++) {
|
||||
DiffFragment fragment = subLineFragments[i];
|
||||
for (DiffFragment fragment : subLineFragments) {
|
||||
result.addDiffFragment(fragment);
|
||||
}
|
||||
return result.getFragments();
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ public class DiffDividerPaint {
|
||||
int height = component.getHeight();
|
||||
int editorHeight = mySides.getEditor(myLeftSide).getComponent().getHeight();
|
||||
Graphics2D gg = (Graphics2D)g.create(0, height - editorHeight, width, editorHeight);
|
||||
DividerPoligon.paintPoligons(DividerPoligon.createVisiblePoligons(mySides, myLeftSide), gg, width);
|
||||
DividerPolygon.paintPolygons(DividerPolygon.createVisiblePolygons(mySides, myLeftSide), gg, width);
|
||||
gg.dispose();
|
||||
}
|
||||
|
||||
|
||||
+16
-18
@@ -26,16 +26,15 @@ import com.intellij.util.ui.UIUtil;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
|
||||
class DividerPoligon {
|
||||
class DividerPolygon {
|
||||
private final Color myColor;
|
||||
private final int myStart1;
|
||||
private final int myStart2;
|
||||
private final int myEnd1;
|
||||
private final int myEnd2;
|
||||
|
||||
public DividerPoligon(int start1, int start2, int end1, int end2, Color color) {
|
||||
public DividerPolygon(int start1, int start2, int end1, int end2, Color color) {
|
||||
myStart1 = advance(start1);
|
||||
myStart2 = advance(start2);
|
||||
myEnd1 = advance(end1);
|
||||
@@ -60,8 +59,8 @@ class DividerPoligon {
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof DividerPoligon)) return false;
|
||||
DividerPoligon other = (DividerPoligon)obj;
|
||||
if (!(obj instanceof DividerPolygon)) return false;
|
||||
DividerPolygon other = (DividerPolygon)obj;
|
||||
return myStart1 == other.myStart1 &&
|
||||
myStart2 == other.myStart2 &&
|
||||
myEnd1 == other.myEnd1 &&
|
||||
@@ -76,38 +75,37 @@ class DividerPoligon {
|
||||
return myColor;
|
||||
}
|
||||
|
||||
public static void paintPoligons(ArrayList<DividerPoligon> poligons, Graphics2D g, int width) {
|
||||
public static void paintPolygons(ArrayList<DividerPolygon> polygons, Graphics2D g, int width) {
|
||||
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||
|
||||
//Composite composite = g.getComposite();
|
||||
//g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.4f));
|
||||
for (Iterator<DividerPoligon> iterator = poligons.iterator(); iterator.hasNext();) {
|
||||
DividerPoligon poligon = iterator.next();
|
||||
poligon.paint(g, width);
|
||||
for (DividerPolygon polygon : polygons) {
|
||||
polygon.paint(g, width);
|
||||
}
|
||||
//g.setComposite(composite);
|
||||
}
|
||||
|
||||
public static ArrayList<DividerPoligon> createVisiblePoligons(EditingSides sides, FragmentSide left) {
|
||||
public static ArrayList<DividerPolygon> createVisiblePolygons(EditingSides sides, FragmentSide left) {
|
||||
Editor editor1 = sides.getEditor(left);
|
||||
Editor editor2 = sides.getEditor(left.otherSide());
|
||||
LineBlocks lineBlocks = sides.getLineBlocks();
|
||||
Trapezium visibleArea = new Trapezium(getVisibleInterval(editor1),
|
||||
getVisibleInterval(editor2));
|
||||
Interval indecies = lineBlocks.getVisibleIndecies(visibleArea);
|
||||
Interval indices = lineBlocks.getVisibleIndices(visibleArea);
|
||||
Transformation[] transformations = new Transformation[]{getTransformation(editor1),
|
||||
getTransformation(editor2)};
|
||||
ArrayList<DividerPoligon> poligons = new ArrayList<DividerPoligon>();
|
||||
for (int i = indecies.getStart(); i < indecies.getEnd(); i++) {
|
||||
ArrayList<DividerPolygon> polygons = new ArrayList<DividerPolygon>();
|
||||
for (int i = indices.getStart(); i < indices.getEnd(); i++) {
|
||||
Trapezium trapezium = lineBlocks.getTrapezium(i);
|
||||
final TextDiffTypeEnum diffTypeEnum = lineBlocks.getType(i);
|
||||
if (diffTypeEnum == null) continue;
|
||||
TextDiffType type = TextDiffType.create(diffTypeEnum);
|
||||
if (type == null) continue;
|
||||
Color color = type.getPoligonColor(editor1);
|
||||
poligons.add(createPoligon(transformations, trapezium, color, left));
|
||||
Color color = type.getPolygonColor(editor1);
|
||||
polygons.add(createPolygon(transformations, trapezium, color, left));
|
||||
}
|
||||
return poligons;
|
||||
return polygons;
|
||||
}
|
||||
|
||||
private static Transformation getTransformation(Editor editor) {
|
||||
@@ -115,7 +113,7 @@ class DividerPoligon {
|
||||
return new FoldingTransformation(editor);
|
||||
}
|
||||
|
||||
private static DividerPoligon createPoligon(Transformation[] transformations, Trapezium trapezium, Color color, FragmentSide left) {
|
||||
private static DividerPolygon createPolygon(Transformation[] transformations, Trapezium trapezium, Color color, FragmentSide left) {
|
||||
Interval base1 = trapezium.getBase(left);
|
||||
Interval base2 = trapezium.getBase(left.otherSide());
|
||||
Transformation leftTransform = transformations[left.getIndex()];
|
||||
@@ -124,7 +122,7 @@ class DividerPoligon {
|
||||
int end1 = leftTransform.transform(base1.getEnd());
|
||||
int start2 = rightTransform.transform(base2.getStart());
|
||||
int end2 = rightTransform.transform(base2.getEnd());
|
||||
return new DividerPoligon(start1, start2, end1, end2, color);
|
||||
return new DividerPolygon(start1, start2, end1, end2, color);
|
||||
}
|
||||
|
||||
static Interval getVisibleInterval(Editor editor) {
|
||||
@@ -39,7 +39,7 @@ public class LineBlocks {
|
||||
myTypes = types;
|
||||
}
|
||||
|
||||
public Interval getVisibleIndecies(Trapezium visibleArea) {
|
||||
public Interval getVisibleIndices(Trapezium visibleArea) {
|
||||
Interval visible1 = visibleArea.getBase1();
|
||||
Interval visible2 = visibleArea.getBase2();
|
||||
Interval[] intervals1 = getIntervals(FragmentSide.SIDE1);
|
||||
|
||||
@@ -27,8 +27,8 @@ public class LabeledEditor extends JPanel {
|
||||
super(new BorderLayout());
|
||||
}
|
||||
|
||||
private String addReadOnly(String title, boolean readonly) {
|
||||
if (readonly) title += DiffBundle.message("diff.content.read.only.content.title.suffix");
|
||||
private static String addReadOnly(String title, boolean readonly) {
|
||||
if (readonly) title += " " + DiffBundle.message("diff.content.read.only.content.title.suffix");
|
||||
return title;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.intellij.openapi.editor.colors.TextAttributesKey;
|
||||
import com.intellij.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.util.containers.Convertor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.Arrays;
|
||||
@@ -38,8 +39,8 @@ public class TextDiffType implements DiffStatusBar.LegendTypeDescriptor {
|
||||
public static final TextDiffType NONE = new TextDiffType(TextDiffTypeEnum.NONE, DiffBundle.message("diff.type.none.name"), null);
|
||||
|
||||
private final TextDiffTypeEnum myType;
|
||||
public static final List<TextDiffType> DIFF_TYPES = Arrays.asList(new TextDiffType[]{DELETED, CHANGED, INSERT});
|
||||
public static final List<TextDiffType> MERGE_TYPES = Arrays.asList(new TextDiffType[]{DELETED, CHANGED, INSERT, CONFLICT});
|
||||
public static final List<TextDiffType> DIFF_TYPES = Arrays.asList(DELETED, CHANGED, INSERT);
|
||||
public static final List<TextDiffType> MERGE_TYPES = Arrays.asList(DELETED, CHANGED, INSERT, CONFLICT);
|
||||
private final TextAttributesKey myAttributesKey;
|
||||
private final String myDisplayName;
|
||||
public static final Convertor<TextDiffType, TextAttributesKey> ATTRIBUTES_KEY = new Convertor<TextDiffType, TextAttributesKey>() {
|
||||
@@ -73,6 +74,7 @@ public class TextDiffType implements DiffStatusBar.LegendTypeDescriptor {
|
||||
return myDisplayName;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Color getLegendColor(EditorColorsScheme colorScheme) {
|
||||
TextAttributes attributes = getTextAttributes(colorScheme);
|
||||
return attributes != null ? attributes.getBackgroundColor() : null;
|
||||
@@ -86,14 +88,16 @@ public class TextDiffType implements DiffStatusBar.LegendTypeDescriptor {
|
||||
return scheme.getAttributes(myAttributesKey);
|
||||
}
|
||||
|
||||
public Color getPoligonColor(Editor editor1) {
|
||||
return getLegendColor(editor1.getColorsScheme());
|
||||
@Nullable
|
||||
public Color getPolygonColor(Editor editor) {
|
||||
return getLegendColor(editor.getColorsScheme());
|
||||
}
|
||||
|
||||
public TextAttributes getTextAttributes(Editor editor1) {
|
||||
return getTextAttributes(editor1.getColorsScheme());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Color getTextBackground(Editor editor) {
|
||||
TextAttributes attributes = getTextAttributes(editor);
|
||||
return attributes != null ? attributes.getBackgroundColor() : null;
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.intellij.openapi.diff;
|
||||
|
||||
import com.intellij.util.Assertion;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class LineTokenizerTest extends TestCase {
|
||||
private final Assertion CHECK = new Assertion();
|
||||
|
||||
public void test() {
|
||||
CHECK.compareAll(new String[]{"a\n", "b\n", "c\n", "d\n"}, new LineTokenizer("a\nb\n\rc\rd\r\n").execute());
|
||||
CHECK.compareAll(new String[]{"a\n", "b"}, new LineTokenizer("a\nb").execute());
|
||||
LineTokenizer lineTokenizer = new LineTokenizer("a\n\r\r\nb");
|
||||
CHECK.compareAll(new String[]{"a\n", "\n", "b"}, lineTokenizer.execute());
|
||||
assertEquals("\n\r", lineTokenizer.getLineSeparator());
|
||||
}
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
package com.intellij.openapi.diff.impl;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class IgnoreWhiteSpaceTest extends TestCase {
|
||||
private ComparisonPolicy myPolicy;
|
||||
|
||||
public void testTrim() {
|
||||
myPolicy = ComparisonPolicy.TRIM_SPACE;
|
||||
Object[] keys = myPolicy.getLineWrappers(new String[]{"a b", " a b ", "\ta b", "a b"});
|
||||
assertEquals(keys[0], keys[1]);
|
||||
assertEquals(keys[1], keys[2]);
|
||||
assertFalse(keys[2].equals(keys[3]));
|
||||
keys = myPolicy.getWrappers(new String[]{" a b", " a b ", " a b \n", "\ta b", "\n", " "});
|
||||
assertEquals(keys[0], keys[3]);
|
||||
assertFalse(keys[0].equals(keys[1]));
|
||||
assertEquals(" a b", keys[2]);
|
||||
assertEquals("", keys[4]);
|
||||
assertEquals("", keys[5]);
|
||||
}
|
||||
|
||||
public void testIgnore() {
|
||||
myPolicy = ComparisonPolicy.IGNORE_SPACE;
|
||||
Object[] keys = myPolicy.getLineWrappers(new String[]{"a b", " a b", " a b ", "ab", " b a"});
|
||||
assertEquals(keys[0], keys[1]);
|
||||
assertEquals(keys[1], keys[2]);
|
||||
assertEquals(keys[2], keys[3]);
|
||||
assertFalse(keys[1].equals(keys[4]));
|
||||
keys = myPolicy.getWrappers(new String[]{" ", " ", "\t\n", "a"});
|
||||
assertEquals(keys[0], keys[1]);
|
||||
assertEquals(keys[1], keys[2]);
|
||||
assertFalse(keys[2].equals(keys[3]));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.intellij.openapi.diff.impl;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import junit.framework.AssertionFailedError;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class MultiCheck {
|
||||
private final ArrayList<FailedCondition> myFailedConditions = new ArrayList<FailedCondition> ();
|
||||
|
||||
public void assertEquals(int expected, int actual) {
|
||||
if (expected != actual)
|
||||
myFailedConditions.add(new BooleanCondition(expected + "==" + actual));
|
||||
}
|
||||
|
||||
public void flush() {
|
||||
if (myFailedConditions.size() == 0) return;
|
||||
for (FailedCondition condition: myFailedConditions) {
|
||||
try {
|
||||
condition.fail();
|
||||
}
|
||||
catch (AssertionFailedError e) {
|
||||
e.printStackTrace(System.err);
|
||||
}
|
||||
}
|
||||
Assert.fail();
|
||||
}
|
||||
|
||||
public void assertNull(Object object) {
|
||||
if (object != null) myFailedConditions.add(new BooleanCondition("Expected null: " + object));
|
||||
}
|
||||
|
||||
private static abstract class FailedCondition {
|
||||
abstract void fail();
|
||||
}
|
||||
|
||||
private static class BooleanCondition extends FailedCondition {
|
||||
private final AssertionFailedError myFailure;
|
||||
|
||||
public BooleanCondition(String message) {
|
||||
myFailure = new AssertionFailedError(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fail() {
|
||||
throw myFailure;
|
||||
}
|
||||
}
|
||||
}
|
||||
Vendored
+83
@@ -0,0 +1,83 @@
|
||||
package com.intellij.openapi.diff.impl.external;
|
||||
|
||||
import com.intellij.openapi.diff.BinaryContent;
|
||||
import com.intellij.openapi.diff.DiffContent;
|
||||
import com.intellij.openapi.diff.DiffRequest;
|
||||
import com.intellij.openapi.diff.DiffTool;
|
||||
import com.intellij.openapi.fileTypes.FileTypes;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class DiffManagerTest extends TestCase {
|
||||
|
||||
public void testAdditionalTools() {
|
||||
DiffManagerImpl diffManager = new DiffManagerImpl();
|
||||
MyDiffTool tool = new MyDiffTool();
|
||||
diffManager.registerDiffTool(tool);
|
||||
MyDiffRequest request = new MyDiffRequest();
|
||||
request.addContent();
|
||||
request.addContent();
|
||||
request.addContent();
|
||||
request.addContent();
|
||||
assertTrue(diffManager.getDiffTool().canShow(request));
|
||||
assertEquals(1, tool.myCanShowCount);
|
||||
diffManager.getDiffTool().show(request);
|
||||
assertEquals(2, tool.myCanShowCount);
|
||||
assertEquals(1, tool.myShowCount);
|
||||
}
|
||||
|
||||
private static class MyDiffTool implements DiffTool {
|
||||
public int myCanShowCount = 0;
|
||||
public int myShowCount = 0;
|
||||
@Override
|
||||
public boolean canShow(DiffRequest request) {
|
||||
myCanShowCount++;
|
||||
return canShowImpl(request);
|
||||
}
|
||||
|
||||
private boolean canShowImpl(DiffRequest request) {
|
||||
return request.getContents().length == 4;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void show(DiffRequest request) {
|
||||
assertTrue(canShowImpl(request));
|
||||
myShowCount++;
|
||||
}
|
||||
}
|
||||
|
||||
private static class MyDiffRequest extends DiffRequest {
|
||||
private final ArrayList<String> myContentTitles = new ArrayList<String>();
|
||||
private final ArrayList<DiffContent> myDiffContents = new ArrayList<DiffContent>();
|
||||
|
||||
public MyDiffRequest() {
|
||||
super(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWindowTitle() {
|
||||
return "title";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getContentTitles() {
|
||||
return ArrayUtil.toStringArray(myContentTitles);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DiffContent[] getContents() {
|
||||
return myDiffContents.toArray(new DiffContent[myDiffContents.size()]);
|
||||
}
|
||||
|
||||
public void addContent(DiffContent content, String title) {
|
||||
myDiffContents.add(content);
|
||||
myContentTitles.add(title);
|
||||
}
|
||||
|
||||
public void addContent() {
|
||||
addContent(new BinaryContent(ArrayUtil.EMPTY_BYTE_ARRAY, null, FileTypes.UNKNOWN), "");
|
||||
}
|
||||
}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.intellij.openapi.diff.impl.highlighting;
|
||||
|
||||
import com.intellij.openapi.diff.ex.DiffFragment;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import gnu.trove.Equality;
|
||||
|
||||
public class FragmentEquality implements Equality {
|
||||
@Override
|
||||
public boolean equals(Object o1, Object o2) {
|
||||
DiffFragment fragment1 = (DiffFragment) o1;
|
||||
DiffFragment fragment2 = (DiffFragment) o2;
|
||||
return Comparing.equal(fragment1.getText1(), fragment2.getText1()) &&
|
||||
Comparing.equal(fragment1.getText2(), fragment2.getText2()) &&
|
||||
fragment1.isModified() == fragment2.isModified();
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package com.intellij.openapi.diff.impl.highlighting;
|
||||
|
||||
import com.intellij.openapi.diff.ex.DiffFragment;
|
||||
import com.intellij.util.StringConvertion;
|
||||
import junit.framework.Assert;
|
||||
|
||||
public class FragmentStringConvertion extends StringConvertion {
|
||||
@Override
|
||||
public String convert(Object obj) {
|
||||
Assert.assertNotNull(obj);
|
||||
DiffFragment fragment = (DiffFragment)obj;
|
||||
return String.valueOf(fragment.getText1()) + "->" + String.valueOf(fragment.getText2()) + "\n-----------";
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.intellij.openapi.diff.impl.highlighting;
|
||||
|
||||
import com.intellij.openapi.diff.ex.DiffFragment;
|
||||
import com.intellij.util.Assertion;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class LineBlockDividesTest extends TestCase {
|
||||
private final Assertion CHECK = new Assertion(new FragmentStringConvertion());
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
CHECK.setEquality(new FragmentEquality());
|
||||
}
|
||||
|
||||
public void testSingleSide() {
|
||||
DiffFragment abc_ = new DiffFragment("abc", null);
|
||||
DiffFragment xyzL_ = new DiffFragment("xyz\n", null);
|
||||
DiffFragment x_y = new DiffFragment("x", "y");
|
||||
DiffFragment a_b = new DiffFragment("a", "b");
|
||||
DiffFragment xyzL_L = new DiffFragment("xyz\n", "\n");
|
||||
DiffFragment abcL_ = new DiffFragment("abc\n", null);
|
||||
DiffFragment[][] lineBlocks = LineBlockDivider.SINGLE_SIDE.divide(new DiffFragment[]{
|
||||
abc_, xyzL_,
|
||||
x_y, a_b, xyzL_L,
|
||||
abcL_});
|
||||
CHECK.compareAll(new DiffFragment[][]{
|
||||
new DiffFragment[]{abc_, xyzL_}, new DiffFragment[]{x_y, a_b, xyzL_L}, new DiffFragment[]{abcL_}},
|
||||
lineBlocks);
|
||||
}
|
||||
}
|
||||
+226
@@ -0,0 +1,226 @@
|
||||
package com.intellij.openapi.diff.impl.highlighting;
|
||||
|
||||
import com.intellij.openapi.diff.ex.DiffFragment;
|
||||
import com.intellij.openapi.diff.impl.MultiCheck;
|
||||
import com.intellij.util.Assertion;
|
||||
import com.intellij.util.diff.Diff;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class UtilTest extends TestCase {
|
||||
private final Assertion CHECK = new Assertion();
|
||||
|
||||
public void testSplitByWord() {
|
||||
CHECK.singleElement(Util.splitByWord("abc"), "abc");
|
||||
CHECK.compareAll(new String[]{"abc", " ", "123"}, Util.splitByWord("abc 123"));
|
||||
CHECK.compareAll(new String[]{"abc", " \n", "\t ", "123"}, Util.splitByWord("abc \n\t 123"));
|
||||
CHECK.compareAll(new String[]{"a_b", "(", "c"}, Util.splitByWord("a_b(c"));
|
||||
CHECK.compareAll(new String[]{"ab", " ", "+","(", " ", "c"}, Util.splitByWord("ab +( c"));
|
||||
CHECK.compareAll(new String[]{"a", " ", "b", "\n"}, Util.splitByWord("a b\n"));
|
||||
}
|
||||
|
||||
public void testIsSpaceOnly() {
|
||||
assertTrue(Util.isSpaceOnly(new DiffFragment(null, " ")));
|
||||
assertTrue(Util.isSpaceOnly(new DiffFragment(" ", null)));
|
||||
}
|
||||
|
||||
public void testUnit() {
|
||||
DiffFragment fragment = Util.unite(new DiffFragment("1", "2"), new DiffFragment("a", "b"));
|
||||
assertEquals("1a", fragment.getText1());
|
||||
assertEquals("2b", fragment.getText2());
|
||||
assertTrue(fragment.isModified());
|
||||
|
||||
fragment = Util.unite(new DiffFragment("1", "1"), DiffFragment.unchanged(" ", ""));
|
||||
assertEquals("1 ", fragment.getText1());
|
||||
assertEquals("1", fragment.getText2());
|
||||
assertTrue(fragment.isEqual());
|
||||
|
||||
fragment = Util.unite(new DiffFragment("1", null), new DiffFragment("2", null));
|
||||
assertEquals("12", fragment.getText1());
|
||||
assertNull(fragment.getText2());
|
||||
}
|
||||
|
||||
private void prepareForFragments() {
|
||||
CHECK.setStringConvertion(new FragmentStringConvertion());
|
||||
CHECK.setEquality(new FragmentEquality());
|
||||
}
|
||||
|
||||
public void testSplitByUnchagedNewLine() {
|
||||
prepareForFragments();
|
||||
DiffFragment a_b = new DiffFragment("a", "b");
|
||||
DiffFragment x_x = new DiffFragment("x", "x");
|
||||
DiffFragment cl_dl = new DiffFragment("c\n", "d\n");
|
||||
DiffFragment yl_yl = new DiffFragment("y\n", "y\n");
|
||||
DiffFragment zl_z = new DiffFragment("z\n", "z");
|
||||
DiffFragment z_zl = new DiffFragment("z", "z\n");
|
||||
DiffFragment al_ = new DiffFragment("a\n", null);
|
||||
DiffFragment _al = new DiffFragment(null, "a\n");
|
||||
DiffFragment[] originalFragments = new DiffFragment[]{a_b, x_x, cl_dl, a_b, yl_yl,
|
||||
x_x, zl_z, z_zl, yl_yl,
|
||||
new DiffFragment("y\nx", "y\nx"),
|
||||
a_b, al_, _al};
|
||||
CHECK.compareAll(new DiffFragment[][]{
|
||||
new DiffFragment[]{a_b, x_x, cl_dl, a_b, yl_yl},
|
||||
new DiffFragment[]{x_x, zl_z, z_zl, yl_yl},
|
||||
new DiffFragment[]{yl_yl},
|
||||
new DiffFragment[]{x_x, a_b, al_, _al}
|
||||
}, Util.splitByUnchangedLines(originalFragments));
|
||||
|
||||
CHECK.compareAll(new DiffFragment[][]{new DiffFragment[]{new DiffFragment("abc\n", "abc\n")},
|
||||
new DiffFragment[]{DiffFragment.unchanged("123\n", "123")}},
|
||||
Util.splitByUnchangedLines(new DiffFragment[]{DiffFragment.unchanged("abc\n123\n", "abc\n123")}));
|
||||
CHECK.compareAll(new DiffFragment[][]{new DiffFragment[]{DiffFragment.unchanged("a\n ", "a")}},
|
||||
Util.splitByUnchangedLines(new DiffFragment[]{DiffFragment.unchanged("a\n ", "a")}));
|
||||
}
|
||||
|
||||
public void testSplitByUnchangedLinesIgnoringSpaces() {
|
||||
DiffFragment[][] diffFragments = Util.splitByUnchangedLines(new DiffFragment[]{DiffFragment.unchanged("f(a, b)\n", "f(a,\nb)\n")});
|
||||
assertEquals(1, diffFragments.length);
|
||||
DiffFragment[] line = diffFragments[0];
|
||||
assertEquals(1, line.length);
|
||||
assertTrue(line[0].isEqual());
|
||||
}
|
||||
|
||||
public void testConcatEquals() {
|
||||
Object[] left = new String[]{"a", "x", "a", "b"};
|
||||
Object[] right = new String[]{"a", "b"};
|
||||
Diff.Change change = Diff.buildChanges(left, right);
|
||||
Diff.Change newChange = Util.concatEquals(change, left, right);
|
||||
MultiCheck multiCheck = new MultiCheck();
|
||||
multiCheck.assertEquals(0, newChange.line0);
|
||||
multiCheck.assertEquals(0, newChange.line1);
|
||||
multiCheck.assertEquals(2, newChange.deleted);
|
||||
multiCheck.assertEquals(0, newChange.inserted);
|
||||
multiCheck.assertNull(newChange.link);
|
||||
multiCheck.flush();
|
||||
|
||||
change = Diff.buildChanges(right, left);
|
||||
newChange = Util.concatEquals(change, right, left);
|
||||
multiCheck = new MultiCheck();
|
||||
multiCheck.assertEquals(0, newChange.line0);
|
||||
multiCheck.assertEquals(0, newChange.line1);
|
||||
multiCheck.assertEquals(0, newChange.deleted);
|
||||
multiCheck.assertEquals(2, newChange.inserted);
|
||||
multiCheck.assertNull(newChange.link);
|
||||
multiCheck.flush();
|
||||
|
||||
left = new String[]{"a", "x", "a", "1", "b"};
|
||||
right = new String[]{"a", "b"};
|
||||
change = Diff.buildChanges(left, right);
|
||||
newChange = Util.concatEquals(change, left, right);
|
||||
multiCheck = new MultiCheck();
|
||||
multiCheck.assertEquals(1, newChange.line0);
|
||||
multiCheck.assertEquals(1, newChange.line1);
|
||||
multiCheck.assertEquals(3, newChange.deleted);
|
||||
multiCheck.assertEquals(0, newChange.inserted);
|
||||
multiCheck.assertNull(newChange.link);
|
||||
multiCheck.flush();
|
||||
|
||||
left = new String[]{"y", "y", "y", "a", "2", "a", "b"};
|
||||
right = new String[]{"x", "a", "b"};
|
||||
change = Diff.buildChanges(left, right);
|
||||
newChange = Util.concatEquals(change, left, right);
|
||||
multiCheck = new MultiCheck();
|
||||
multiCheck.assertEquals(0, newChange.line0);
|
||||
multiCheck.assertEquals(0, newChange.line1);
|
||||
multiCheck.assertEquals(3, newChange.deleted);
|
||||
multiCheck.assertEquals(1, newChange.inserted);
|
||||
newChange = newChange.link;
|
||||
multiCheck.assertEquals(3, newChange.line0);
|
||||
multiCheck.assertEquals(1, newChange.line1);
|
||||
multiCheck.assertEquals(2, newChange.deleted);
|
||||
multiCheck.assertEquals(0, newChange.inserted);
|
||||
multiCheck.assertNull(newChange.link);
|
||||
multiCheck.flush();
|
||||
}
|
||||
|
||||
public void testConcatEqualsConcatenatesChanged() {
|
||||
String[] left = new String[]{"i1", "a", "i2", "a", "b"};
|
||||
String[] right = new String[]{"a", "b"};
|
||||
Diff.Change change = Diff.buildChanges(left, right);
|
||||
assertNotNull(change.link);
|
||||
assertEquals(2, change.link.deleted);
|
||||
assertEquals(2, change.link.line0);
|
||||
Diff.Change newChange = Util.concatEquals(change, left, right);
|
||||
MultiCheck multiCheck = new MultiCheck();
|
||||
multiCheck.assertEquals(0, newChange.line0);
|
||||
multiCheck.assertEquals(0, newChange.line1);
|
||||
multiCheck.assertEquals(3, newChange.deleted);
|
||||
multiCheck.assertEquals(0, newChange.inserted);
|
||||
multiCheck.assertNull(newChange.link);
|
||||
multiCheck.flush();
|
||||
}
|
||||
|
||||
public void testCalcShift() {
|
||||
assertEquals(-1, Util.calcShift(new String[]{"1", "a", "x", "a"}, 1, 2, 2));
|
||||
assertEquals(0, Util.calcShift(new String[]{"1", "a", "x", "b"}, 1, 2, 2));
|
||||
assertEquals(0, Util.calcShift(new String[]{"1", "a", "x", "a"}, 0, 2, 2));
|
||||
assertEquals(-2, Util.calcShift(new String[]{"1", "a", "b", "x", "a", "b"}, 1, 3, 3));
|
||||
}
|
||||
|
||||
public void testSplitByLines() {
|
||||
Util.splitByLines(new DiffFragment("false;", "false;"));
|
||||
}
|
||||
|
||||
public void testUniteFormattingOnly() {
|
||||
prepareForFragments();
|
||||
DiffFragment[] first = new DiffFragment[]{DiffFragment.unchanged("123", "abc")};
|
||||
DiffFragment[] last = new DiffFragment[]{new DiffFragment("qqq", "qqq")};
|
||||
DiffFragment inline1 = new DiffFragment(" ", " ");
|
||||
DiffFragment inline2 = DiffFragment.unchanged("xyz", "cba");
|
||||
DiffFragment inline3 = new DiffFragment(" ", " ");
|
||||
DiffFragment inline4 = DiffFragment.unchanged("098", "890");
|
||||
DiffFragment[][] lines = new DiffFragment[][]{
|
||||
first,
|
||||
new DiffFragment[]{inline1, inline2},
|
||||
new DiffFragment[]{inline3, inline4},
|
||||
last};
|
||||
lines = Util.uniteFormattingOnly(lines);
|
||||
CHECK.compareAll(new DiffFragment[][]{
|
||||
first,
|
||||
new DiffFragment[]{inline1, inline2, inline3, inline4},
|
||||
last},
|
||||
lines);
|
||||
}
|
||||
|
||||
public void testConcatenateEquals() {
|
||||
prepareForFragments();
|
||||
DiffFragment fragments = Util.concatenate(new DiffFragment[]{
|
||||
new DiffFragment("a", "a"),
|
||||
DiffFragment.unchanged("1", "XY"),
|
||||
DiffFragment.unchanged("2\n3", "Q\nW\nE")});
|
||||
assertTrue(fragments.isEqual());
|
||||
assertFalse(fragments.isOneSide());
|
||||
assertEquals("a12\n3", fragments.getText1());
|
||||
assertEquals("aXYQ\nW\nE", fragments.getText2());
|
||||
}
|
||||
|
||||
public void testConcatenateModified() {
|
||||
DiffFragment fragment = Util.concatenate(new DiffFragment[]{new DiffFragment("a", "b"),
|
||||
DiffFragment.unchanged("1", "1")});
|
||||
assertTrue(fragment.isModified());
|
||||
}
|
||||
|
||||
public void testConcatenateWithOneSide() {
|
||||
DiffFragment fragment = Util.concatenate(new DiffFragment[]{new DiffFragment("1", "1"),
|
||||
new DiffFragment("a", null)});
|
||||
assertTrue(fragment.isModified());
|
||||
assertFalse(fragment.isOneSide());
|
||||
}
|
||||
|
||||
public void testCutFirst() {
|
||||
prepareForFragments();
|
||||
|
||||
CHECK.singleElement(Util.cutFirst(new DiffFragment[]{DiffFragment.unchanged("ab", "ac")}),
|
||||
DiffFragment.unchanged("b", "c"));
|
||||
|
||||
CHECK.compareAll(new DiffFragment[]{new DiffFragment(null, "c")},
|
||||
Util.cutFirst(new DiffFragment[]{new DiffFragment(null, "b"),
|
||||
new DiffFragment(null, "c"),
|
||||
new DiffFragment("a", null)})
|
||||
);
|
||||
|
||||
CHECK.compareAll(new DiffFragment[]{new DiffFragment(null, "b"), new DiffFragment(null, "d")},
|
||||
Util.cutFirst(new DiffFragment[]{new DiffFragment(null, "ab"), new DiffFragment("c", "d")}));
|
||||
|
||||
}
|
||||
}
|
||||
+134
@@ -0,0 +1,134 @@
|
||||
package com.intellij.openapi.diff.impl.incrementalMerge;
|
||||
|
||||
import com.intellij.idea.IdeaLogger;
|
||||
import com.intellij.openapi.diff.impl.highlighting.FragmentSide;
|
||||
import com.intellij.openapi.diff.impl.util.ContextLogger;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.util.Assertion;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class MergeBuilderTest extends TestCase {
|
||||
private final MergeBuilder myMergeBuilder = new MergeBuilder(new ContextLogger("TEST"));
|
||||
private final Assertion CHECK = new Assertion();
|
||||
|
||||
public void testEqual() {
|
||||
addLeft(new TextRange(0, 1), new TextRange(0, 1));
|
||||
addRight(new TextRange(0, 1), new TextRange(0, 1));
|
||||
CHECK.empty(finish(1, 1, 1));
|
||||
}
|
||||
|
||||
public void testWholeConflict() {
|
||||
CHECK.singleElement(finish(1, 2, 3),
|
||||
fragment(new TextRange(0, 1), new TextRange(0, 2), new TextRange(0, 3)));
|
||||
}
|
||||
|
||||
public void testTailInsert() {
|
||||
TextRange range = new TextRange(0, 1);
|
||||
addLeft(range, range);
|
||||
addRight(range, range);
|
||||
CHECK.singleElement(finish(1, 1, 2),
|
||||
fragment(null, new TextRange(1, 1), new TextRange(1, 2)));
|
||||
}
|
||||
|
||||
public void testSameInsertsConflicts1() {
|
||||
TextRange base = new TextRange(0, 1);
|
||||
TextRange version = new TextRange(1, 2);
|
||||
addLeft(base, version);
|
||||
addRight(base, version);
|
||||
CHECK.singleElement(finish(2, 1, 2),
|
||||
fragment(new TextRange(0, 1), new TextRange(0, 0), new TextRange(0, 1)));
|
||||
}
|
||||
|
||||
public void testSameInsertsConflicts2() {
|
||||
TextRange base = new TextRange(1, 2);
|
||||
TextRange version = new TextRange(0, 1);
|
||||
addLeft(base, version);
|
||||
addRight(base, version);
|
||||
CHECK.compareAll(new MergeBuilder.MergeFragment[]{
|
||||
fragment(new TextRange(0, 0), new TextRange(0, 1), new TextRange(0, 0)),
|
||||
fragment(new TextRange(1, 2), new TextRange(2, 2), new TextRange(1, 2))
|
||||
}, finish(2, 2, 2));
|
||||
}
|
||||
|
||||
private MergeBuilder.MergeFragment fragment(TextRange left, TextRange base, TextRange right) {
|
||||
return new MergeBuilder.MergeFragment(new TextRange[]{left, base, right});
|
||||
}
|
||||
|
||||
public void testHeadInsert() {
|
||||
TextRange range = new TextRange(0, 1);
|
||||
addRight(range, new TextRange(1, 2));
|
||||
addLeft(range, range);
|
||||
CHECK.singleElement(finish(1, 1, 2),
|
||||
fragment(null, new TextRange(0, 0), new TextRange(0, 1)));
|
||||
}
|
||||
|
||||
public void testOneSideChange() {
|
||||
addLeft(new TextRange(1, 2), new TextRange(2, 3));
|
||||
addRight(new TextRange(0, 2), new TextRange(0, 2));
|
||||
CHECK.singleElement(finish(3, 2, 2), fragment(new TextRange(0, 2), new TextRange(0, 1), null));
|
||||
}
|
||||
|
||||
public void testNotAllignedConflict() {
|
||||
addLeft(new TextRange(1, 3), new TextRange(0, 2));
|
||||
addRight(new TextRange(2, 4), new TextRange(1, 3));
|
||||
CHECK.compareAll(new MergeBuilder.MergeFragment[]{
|
||||
fragment(new TextRange(0, 1), new TextRange(0, 2), new TextRange(0, 1)),
|
||||
fragment(new TextRange(2, 3), new TextRange(3, 4), null)
|
||||
}, finish(3, 4, 3));
|
||||
}
|
||||
|
||||
public void testMultiChanges() {
|
||||
addLeft(new TextRange(1, 8), new TextRange(1, 8));
|
||||
addRight(new TextRange(1, 2), new TextRange(0, 1));
|
||||
addRight(new TextRange(3, 4), new TextRange(1, 2));
|
||||
addRight(new TextRange(4, 5), new TextRange(3, 4));
|
||||
addRight(new TextRange(6, 7), new TextRange(5, 6));
|
||||
addLeft(new TextRange(9, 10), new TextRange(9, 10));
|
||||
CHECK.compareAll(new MergeBuilder.MergeFragment[]{
|
||||
fragment(new TextRange(0, 1), new TextRange(0, 1), new TextRange(0, 0)),
|
||||
fragment(null, new TextRange(2, 3), new TextRange(1, 1)),
|
||||
fragment(null, new TextRange(4, 4), new TextRange(2, 3)),
|
||||
fragment(null, new TextRange(5, 6), new TextRange(4, 5)),
|
||||
fragment(new TextRange(7, 10), new TextRange(7, 10), new TextRange(6, 7))
|
||||
}, finish(10, 10, 7));
|
||||
}
|
||||
|
||||
public void testNoIntersection() {
|
||||
addLeft(new TextRange(0, 1), new TextRange(0, 1));
|
||||
addRight(new TextRange(0, 2), new TextRange(0, 2));
|
||||
addLeft(new TextRange(3, 5), new TextRange(1, 3));
|
||||
addRight(new TextRange(4, 5), new TextRange(2, 3));
|
||||
CHECK.compareAll(new MergeBuilder.MergeFragment[]{
|
||||
fragment(new TextRange(1, 2), new TextRange(1, 4), new TextRange(1, 2))
|
||||
}, finish(3, 5, 3));
|
||||
}
|
||||
|
||||
private void addRight(TextRange base, TextRange right) {
|
||||
myMergeBuilder.add(base, right, FragmentSide.SIDE2);
|
||||
}
|
||||
|
||||
private void addLeft(TextRange base, TextRange left) {
|
||||
myMergeBuilder.add(base, left, FragmentSide.SIDE1);
|
||||
}
|
||||
|
||||
private List<MergeBuilder.MergeFragment> finish(int left, int base, int right) {
|
||||
return myMergeBuilder.finish(left, base, right);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void runTest() throws Throwable {
|
||||
try {
|
||||
super.runTest();
|
||||
} finally {
|
||||
if (IdeaLogger.ourErrorsOccurred != null) throw IdeaLogger.ourErrorsOccurred;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
IdeaLogger.ourErrorsOccurred = null;
|
||||
}
|
||||
}
|
||||
+149
@@ -0,0 +1,149 @@
|
||||
package com.intellij.openapi.diff.impl.processing;
|
||||
|
||||
import com.intellij.openapi.diff.ex.DiffFragment;
|
||||
import com.intellij.openapi.diff.impl.ComparisonPolicy;
|
||||
import com.intellij.openapi.diff.impl.highlighting.FragmentEquality;
|
||||
import com.intellij.openapi.diff.impl.highlighting.FragmentStringConvertion;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.util.Assertion;
|
||||
import com.intellij.util.StringConvertion;
|
||||
import gnu.trove.Equality;
|
||||
import junit.framework.AssertionFailedError;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class ByWordTest extends TestCase {
|
||||
private final Assertion CHECK = new Assertion(new FragmentStringConvertion());
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
CHECK.setEquality(new FragmentEquality());
|
||||
}
|
||||
|
||||
public void test1() {
|
||||
DiffPolicy byWord = new ByWord(ComparisonPolicy.DEFAULT);
|
||||
DiffFragment[] fragments = byWord.buildFragments("abc def, 123", "ab def, 12");
|
||||
CHECK.compareAll(new DiffFragment[]{new DiffFragment("abc", "ab"),
|
||||
new DiffFragment(" def, ", " def, "),
|
||||
new DiffFragment("123", "12")}, fragments);
|
||||
}
|
||||
|
||||
public void test2() {
|
||||
DiffPolicy byWord = new ByWord(ComparisonPolicy.DEFAULT);
|
||||
DiffFragment[] fragments = byWord.buildFragments(" a[xy]+1", ",a[]+1");
|
||||
CHECK.compareAll(new DiffFragment[]{new DiffFragment(" ", null),
|
||||
new DiffFragment(null, ","),
|
||||
new DiffFragment("a[", "a["),
|
||||
new DiffFragment("xy", null),
|
||||
new DiffFragment("]+1", "]+1")}, fragments);
|
||||
}
|
||||
|
||||
public void test3() {
|
||||
DiffPolicy byWord = new ByWord(ComparisonPolicy.DEFAULT);
|
||||
DiffFragment[] fragments = byWord.buildFragments("0987\n a.g();\n", "yyyy\n");
|
||||
CHECK.compareAll(new DiffFragment[]{new DiffFragment("0987\n a.g();\n", "yyyy\n")}, fragments);
|
||||
}
|
||||
|
||||
public void test4() {
|
||||
DiffPolicy byWord = new ByWord(ComparisonPolicy.DEFAULT);
|
||||
DiffFragment[] fragments = byWord.buildFragments(" abc\n2222\n", " x = abc\nzzzz\n");
|
||||
CHECK.compareAll(new DiffFragment[]{
|
||||
new DiffFragment(null, " "), new DiffFragment(" ", " "), new DiffFragment(null, "x"), new DiffFragment(null, " ="),
|
||||
new DiffFragment(null, " "),
|
||||
new DiffFragment("abc\n", "abc\n"),
|
||||
new DiffFragment("2222", "zzzz"),
|
||||
new DiffFragment("\n", "\n")}, fragments);
|
||||
}
|
||||
|
||||
public void testIdea58505() {
|
||||
DiffPolicy byWord = new ByWord(ComparisonPolicy.DEFAULT);
|
||||
DiffFragment[] fragments = byWord.buildFragments(" if (eventMerger!=null && !dataSelection.getValueIsAdjusting()) {",
|
||||
" if (eventMerger!=null && (dataSelection==null || !dataSelection.getValueIsAdjusting())) {");
|
||||
CHECK.compareAll(new DiffFragment[] {
|
||||
new DiffFragment(" if (eventMerger!=null && ", " if (eventMerger!=null && "),
|
||||
new DiffFragment("!", "("),
|
||||
new DiffFragment("dataSelection", "dataSelection"),
|
||||
new DiffFragment(null, "=="),
|
||||
new DiffFragment(null, "null || !dataSelection"),
|
||||
new DiffFragment(".getValueIsAdjusting())", ".getValueIsAdjusting())"),
|
||||
new DiffFragment(null, ")"),
|
||||
new DiffFragment(" {", " {")
|
||||
}, fragments);
|
||||
}
|
||||
|
||||
public void testExtractWords() {
|
||||
String text = "a b, c.d\n\n x\n y";
|
||||
Word[] words = ByWord.buildWords(text, ComparisonPolicy.DEFAULT);
|
||||
CHECK.setEquality(new Equality() {
|
||||
@Override
|
||||
public boolean equals(Object o1, Object o2) {
|
||||
Word word1 = (Word)o1;
|
||||
Word word2 = (Word)o2;
|
||||
return word1.getStart() == word2.getStart() && word1.getEnd() == word2.getEnd();
|
||||
}
|
||||
});
|
||||
CHECK.setStringConvertion(StringConvertion.DEFAULT);
|
||||
CHECK.compareAll(new Word[]{new Formatting(text, new TextRange(0, 0)),
|
||||
new Word(text, new TextRange(0, 1)),
|
||||
new Word(text, new TextRange(2, 3)),
|
||||
new Word(text, new TextRange(5, 6)),
|
||||
new Word(text, new TextRange(7, 8)),
|
||||
new Formatting(text, new TextRange(8, 12)),
|
||||
new Word(text, new TextRange(12, 13)),
|
||||
new Formatting(text, new TextRange(13, 15)),
|
||||
new Word(text, new TextRange(15, 16))}, words);
|
||||
text = " b c";
|
||||
words = ByWord.buildWords(text, ComparisonPolicy.DEFAULT);
|
||||
CHECK.compareAll(new Word[]{new Formatting(text, new TextRange(0, 1)),
|
||||
new Word(text, new TextRange(1, 2)),
|
||||
new Word(text, new TextRange(3, 4))}, words);
|
||||
}
|
||||
|
||||
public void testLeadingFormatting() {
|
||||
DiffPolicy byWord = new ByWord(ComparisonPolicy.DEFAULT);
|
||||
DiffFragment[] fragments = byWord.buildFragments(" abc\n 123", " 123");
|
||||
CHECK.compareAll(new DiffFragment[]{new DiffFragment(" abc\n", null),
|
||||
new DiffFragment(" 123", " 123")},
|
||||
UniteSameType.INSTANCE.correct(fragments));
|
||||
}
|
||||
|
||||
public void testRestyleNewLines() {
|
||||
DiffPolicy byWord = new ByWord(ComparisonPolicy.DEFAULT);
|
||||
DiffFragment[] fragments = byWord.buildFragments("f(a, b);", "f(a,\n b);");
|
||||
CHECK.compareAll(new DiffFragment[]{new DiffFragment("f(a,", "f(a,"),
|
||||
new DiffFragment(" ", "\n "),
|
||||
new DiffFragment("b);", "b);")},
|
||||
UniteSameType.INSTANCE.correct(fragments));
|
||||
}
|
||||
|
||||
public void testIgnoreSpaces() {
|
||||
ByWord byWord = new ByWord(ComparisonPolicy.IGNORE_SPACE);
|
||||
DiffFragment[] fragments = byWord.buildFragments(" o.f(a)", "o. f( b)");
|
||||
CHECK.compareAll(new DiffFragment[]{DiffFragment.unchanged(" o.f(", "o. f( "),
|
||||
new DiffFragment("a", "b"),
|
||||
DiffFragment.unchanged(")", ")")},
|
||||
UniteSameType.INSTANCE.correct(fragments));
|
||||
}
|
||||
|
||||
public void testIgnoreLeadingAndTrailing() {
|
||||
ByWord byWord = new ByWord(ComparisonPolicy.TRIM_SPACE);
|
||||
checkEqual(byWord.buildFragments(" text", "text"));
|
||||
checkEqual(byWord.buildFragments("text ", "text"));
|
||||
checkEqual(byWord.buildFragments(" text \n", "text\n"));
|
||||
//DiffFragment[] fragments = byWord.buildFragments(" 123 ", "xyz");
|
||||
//CHECK.compareAll(new DiffFragment[]{DiffFragment.unchanged(" ", ""),
|
||||
// new DiffFragment("123", "xyz"),
|
||||
// DiffFragment.unchanged(" ", "")},
|
||||
// fragments);
|
||||
}
|
||||
|
||||
private void checkEqual(DiffFragment[] fragments) {
|
||||
try {
|
||||
assertEquals(1, fragments.length);
|
||||
assertTrue(fragments[0].isEqual());
|
||||
} catch(AssertionFailedError e) {
|
||||
CHECK.enumerate(fragments);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
package com.intellij.openapi.diff.impl.processing;
|
||||
|
||||
import com.intellij.openapi.diff.ex.DiffFragment;
|
||||
import com.intellij.openapi.diff.impl.ComparisonPolicy;
|
||||
import com.intellij.openapi.diff.impl.highlighting.FragmentEquality;
|
||||
import com.intellij.openapi.diff.impl.highlighting.FragmentStringConvertion;
|
||||
import com.intellij.util.Assertion;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class CorrectionTest extends TestCase {
|
||||
private final Assertion CHECK = new Assertion(new FragmentStringConvertion());
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
CHECK.setEquality(new FragmentEquality());
|
||||
}
|
||||
|
||||
public void testTrueLineBlock() {
|
||||
DiffCorrection.TrueLineBlocks correction = new DiffCorrection.TrueLineBlocks(ComparisonPolicy.DEFAULT);
|
||||
DiffFragment[] fragments = correction.correctAndNormalize(new DiffFragment[]{
|
||||
DiffFragment.unchanged(" 1\n ab\n x\n", " 2\n ab\n x\n"),
|
||||
new DiffFragment("XXX\n111\n", "YYY\n222\n"),
|
||||
DiffFragment.unchanged(" a\n", " a\n")});
|
||||
CHECK.compareAll(new DiffFragment[]{new DiffFragment(" 1\n", " 2\n"),
|
||||
new DiffFragment(" ab\n", " ab\n"),
|
||||
new DiffFragment(" x\n", " x\n"),
|
||||
new DiffFragment("XXX\n111\n", "YYY\n222\n"),
|
||||
new DiffFragment(" a\n", " a\n")},
|
||||
fragments);
|
||||
}
|
||||
|
||||
public void testTrueLineBlocksWithSameLines() {
|
||||
DiffCorrection.TrueLineBlocks correction = new DiffCorrection.TrueLineBlocks(ComparisonPolicy.DEFAULT);
|
||||
DiffFragment[] fragments = correction.correctAndNormalize(new DiffFragment[]{
|
||||
DiffFragment.unchanged(" X\n X\n X", " X\n X\n X")});
|
||||
CHECK.compareAll(new DiffFragment[]{new DiffFragment(" X\n X\n", " X\n X\n"),
|
||||
new DiffFragment(" X", " X")},
|
||||
fragments);
|
||||
}
|
||||
|
||||
public void testChangedSpaceCorrection() {
|
||||
DiffCorrection correction = new DiffCorrection.ChangedSpace(ComparisonPolicy.DEFAULT);
|
||||
DiffFragment[] fragments = correction.correct(new DiffFragment[]{
|
||||
new DiffFragment("x", "y"),
|
||||
new DiffFragment(" ", " "),
|
||||
new DiffFragment("ab", "ab"),
|
||||
new DiffFragment(" ", " "),
|
||||
new DiffFragment(" ", " w o r d"),
|
||||
new DiffFragment(" ", " w o r d")});
|
||||
CHECK.compareAll(new DiffFragment[]{
|
||||
new DiffFragment("x", "y"),
|
||||
new DiffFragment(null, " "), new DiffFragment(" ", " "),
|
||||
new DiffFragment("ab", "ab"),
|
||||
new DiffFragment(" ", " "),
|
||||
new DiffFragment(" ", " "), new DiffFragment(null, "w o r d"),
|
||||
new DiffFragment(" ", null), new DiffFragment(" ", " "), new DiffFragment(null, "w o r d")}, fragments);
|
||||
|
||||
fragments = correction.correct(new DiffFragment[]{new DiffFragment("\n ", "\n ")});
|
||||
CHECK.compareAll(new DiffFragment[]{new DiffFragment("\n", "\n"),
|
||||
new DiffFragment(" ", null), new DiffFragment(" ", " ")}, fragments);
|
||||
fragments = correction.correct(new DiffFragment[]{new DiffFragment("\n", "\n\n")});
|
||||
CHECK.compareAll(new DiffFragment[]{new DiffFragment("\n", "\n"), new DiffFragment(null, "\n")}, fragments);
|
||||
}
|
||||
|
||||
public void testConcatinateSingleSide() {
|
||||
DiffCorrection correction = new DiffCorrection.ConcatenateSingleSide();
|
||||
DiffFragment[] corrected = correction.correct(
|
||||
new DiffFragment[]{new DiffFragment(null, "a"),
|
||||
new DiffFragment("b", null),
|
||||
new DiffFragment("c", "d"),
|
||||
new DiffFragment(null, "a"),
|
||||
new DiffFragment("b", null),
|
||||
new DiffFragment("1", null),
|
||||
new DiffFragment("x", "x"),
|
||||
new DiffFragment(null, "a")});
|
||||
CHECK.compareAll(new DiffFragment[]{new DiffFragment("b", "a"),
|
||||
new DiffFragment("c", "d"),
|
||||
new DiffFragment("b1", "a"),
|
||||
new DiffFragment("x", "x"), new DiffFragment(null, "a")},
|
||||
corrected);
|
||||
}
|
||||
|
||||
public void testConnectSingleSideToChange() {
|
||||
DiffFragment first = DiffFragment.unchanged("a", "A");
|
||||
DiffFragment oneSide = new DiffFragment(null, "b");
|
||||
DiffFragment equal = new DiffFragment("c", "c");
|
||||
DiffFragment last = DiffFragment.unchanged("g", "G");
|
||||
DiffFragment[] fragments = DiffCorrection.ConnectSingleSideToChange.INSTANCE.correct(new DiffFragment[]{
|
||||
first,
|
||||
oneSide,
|
||||
equal,
|
||||
new DiffFragment(null, "d"), new DiffFragment("e", "E"), new DiffFragment("f", null),
|
||||
last
|
||||
});
|
||||
CHECK.compareAll(new DiffFragment[]{
|
||||
first, oneSide, equal,
|
||||
new DiffFragment("ef", "dE"),
|
||||
last
|
||||
}, fragments);
|
||||
}
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package com.intellij.openapi.diff.impl.processing;
|
||||
|
||||
import com.intellij.openapi.diff.ex.DiffFragment;
|
||||
import com.intellij.openapi.diff.impl.ComparisonPolicy;
|
||||
import com.intellij.openapi.diff.impl.highlighting.FragmentSide;
|
||||
import com.intellij.openapi.diff.impl.highlighting.Util;
|
||||
import junit.framework.Assert;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class LineBlocksDiffPolicyTest extends TestCase{
|
||||
public void test() {
|
||||
DiffPolicy.LineBlocks diffPolicy = new DiffPolicy.LineBlocks(ComparisonPolicy.DEFAULT);
|
||||
checkPolicy(diffPolicy, "abc\n123\n", "ABC\nXYZ\n");
|
||||
checkPolicy(diffPolicy, "abc\n123", "ABC\nXYZ");
|
||||
checkPolicy(diffPolicy, "abc\n123\n", "ABC\nXYZ");
|
||||
}
|
||||
|
||||
private void checkPolicy(DiffPolicy.LineBlocks diffPolicy, String text1, String text2) {
|
||||
DiffFragment[] fragments = diffPolicy.buildFragments(text1, text2);
|
||||
Assert.assertEquals(text1, Util.getText(fragments, FragmentSide.SIDE1));
|
||||
assertEquals(text2, Util.getText(fragments, FragmentSide.SIDE2));
|
||||
}
|
||||
}
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
package com.intellij.openapi.diff.impl.processing;
|
||||
|
||||
import com.intellij.openapi.diff.ex.DiffFragment;
|
||||
import com.intellij.openapi.diff.impl.highlighting.FragmentEquality;
|
||||
import com.intellij.openapi.diff.impl.highlighting.FragmentStringConvertion;
|
||||
import com.intellij.util.Assertion;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class NormalizationTest extends TestCase {
|
||||
private final Assertion CHECK = new Assertion(new FragmentStringConvertion());
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
CHECK.setEquality(new FragmentEquality());
|
||||
}
|
||||
|
||||
public void testSingleSide() {
|
||||
DiffCorrection correction = DiffCorrection.Normalize.INSTANCE;
|
||||
DiffFragment[] corrected = correction.correct(
|
||||
new DiffFragment[]{new DiffFragment(null, "a"),
|
||||
new DiffFragment("b", null),
|
||||
new DiffFragment("c", "d"),
|
||||
new DiffFragment(null, "a"),
|
||||
new DiffFragment("b", null),
|
||||
new DiffFragment("1", null),
|
||||
new DiffFragment("x", "x"),
|
||||
new DiffFragment(null, "a")});
|
||||
CHECK.compareAll(new DiffFragment[]{new DiffFragment("b", "a"),
|
||||
new DiffFragment("c", "d"),
|
||||
new DiffFragment("b1", "a"),
|
||||
new DiffFragment("x", "x"), new DiffFragment(null, "a")},
|
||||
corrected);
|
||||
}
|
||||
|
||||
public void testUnitesEquals() {
|
||||
DiffCorrection correction = DiffCorrection.Normalize.INSTANCE;
|
||||
DiffFragment[] fragments = correction.correct(new DiffFragment[]{new DiffFragment(null, "a"),
|
||||
new DiffFragment("x", "x"),
|
||||
new DiffFragment("y", "y"),
|
||||
new DiffFragment("z", null), new DiffFragment(null, "z")});
|
||||
CHECK.compareAll(new DiffFragment[]{new DiffFragment(null, "a"), new DiffFragment("xyz", "xyz")}, fragments);
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package com.intellij.openapi.diff.impl.processing;
|
||||
|
||||
import com.intellij.openapi.diff.ex.DiffFragment;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class PreferWholeLinesTest extends TestCase {
|
||||
public void test() {
|
||||
DiffFragment[] fragments = new DiffFragment[]{new DiffFragment("1", "2"), new DiffFragment(null, "\nadded"), new DiffFragment("a", "\nb")};
|
||||
fragments = new PreferWholeLines().correct(fragments);
|
||||
|
||||
}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package com.intellij.openapi.diff.impl.processing;
|
||||
|
||||
import com.intellij.openapi.diff.impl.ComparisonPolicy;
|
||||
import com.intellij.openapi.diff.impl.fragments.LineFragment;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class TextCompareProcessorTest extends TestCase {
|
||||
public void testIgnoreWrappingEqualText() {
|
||||
TextCompareProcessor processor = new TextCompareProcessor(ComparisonPolicy.IGNORE_SPACE);
|
||||
ArrayList<LineFragment> lineFragments = processor.process("f(a, b)\n", "f(a,\nb)\n");
|
||||
assertTrue(lineFragments.size() == 1);
|
||||
assertNull(lineFragments.get(0).getType());
|
||||
}
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package com.intellij.openapi.diff.impl.processing;
|
||||
|
||||
import com.intellij.openapi.diff.ex.DiffFragment;
|
||||
import com.intellij.openapi.diff.impl.highlighting.FragmentEquality;
|
||||
import com.intellij.openapi.diff.impl.highlighting.FragmentStringConvertion;
|
||||
import com.intellij.util.Assertion;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class UniteSameTypeTest extends TestCase {
|
||||
private final Assertion CHECK = new Assertion(new FragmentStringConvertion());
|
||||
|
||||
@Override
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
CHECK.setEquality(new FragmentEquality());
|
||||
}
|
||||
|
||||
public void testUnitDifferentOnesides() {
|
||||
DiffFragment[] fragments = UniteSameType.INSTANCE.correct(new DiffFragment[]{new DiffFragment("a", "b"),
|
||||
new DiffFragment(null, " "),
|
||||
new DiffFragment("\n ", null),
|
||||
new DiffFragment("x", "x")});
|
||||
CHECK.compareAll(new DiffFragment[]{new DiffFragment("a\n ", "b "), new DiffFragment("x", "x")}, fragments);
|
||||
}
|
||||
|
||||
public void testUniteEqualsUnitesFormattingOnly() {
|
||||
DiffFragment changed = new DiffFragment("abc", "123");
|
||||
DiffFragment equal = new DiffFragment("qqq", "qqq");
|
||||
DiffFragment[] fragments = DiffCorrection.UnitEquals.INSTANCE.correct(new DiffFragment[]{
|
||||
changed,
|
||||
new DiffFragment(" xxx", "xxx"), new DiffFragment("yyy", " yyy"),
|
||||
equal});
|
||||
CHECK.compareAll(new DiffFragment[]{changed, new DiffFragment(" xxxyyy", "xxx yyy"), equal}, fragments);
|
||||
}
|
||||
}
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
package com.intellij.openapi.diff.impl.splitter;
|
||||
|
||||
import com.intellij.openapi.diff.impl.fragments.LineBlock;
|
||||
import com.intellij.openapi.diff.impl.highlighting.FragmentSide;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class LineBlocksTest extends TestCase {
|
||||
public void testVisibles() {
|
||||
LineBlocks lineBlocks = LineBlocks.createLineBlocks(new LineBlock[]{new LineBlock(0, 1, 2, 1, null), new LineBlock(2, 1, 4, 1, null)});
|
||||
Interval indecies = lineBlocks.getVisibleIndices(new Trapezium(1, 1, 2, 1));
|
||||
assertEquals(Interval.fromTo(0, 1), indecies);
|
||||
assertEquals(new Trapezium(0, 1, 2, 1), lineBlocks.getTrapezium(indecies.getStart()));
|
||||
|
||||
indecies = lineBlocks.getVisibleIndices(new Trapezium(4, 2, 4, 3));
|
||||
assertEquals(Interval.fromTo(1, 2), indecies);
|
||||
assertEquals(new Trapezium(2, 1, 4, 1), lineBlocks.getTrapezium(indecies.getStart()));
|
||||
|
||||
indecies = lineBlocks.getVisibleIndices(new Trapezium(3, 1, 3, 1));
|
||||
assertEquals(Interval.fromTo(1, 2), indecies);
|
||||
assertEquals(new Trapezium(2, 1, 4, 1), lineBlocks.getTrapezium(indecies.getStart()));
|
||||
}
|
||||
|
||||
public void testIndecies() {
|
||||
Interval[] intervals = new Interval[]{new Interval(1, 2), new Interval(4, 2), new Interval(6, 2)};
|
||||
|
||||
assertEquals(0, LineBlocks.getMaxStartedIndex(intervals, 0));
|
||||
assertEquals(0, LineBlocks.getMaxStartedIndex(intervals, 1));
|
||||
assertEquals(0, LineBlocks.getMaxStartedIndex(intervals, 2));
|
||||
assertEquals(1, LineBlocks.getMaxStartedIndex(intervals, 3));
|
||||
assertEquals(1, LineBlocks.getMaxStartedIndex(intervals, 4));
|
||||
|
||||
assertEquals(1, LineBlocks.getMinNotStartedIndex(intervals, 2));
|
||||
assertEquals(1, LineBlocks.getMinNotStartedIndex(intervals, 3));
|
||||
assertEquals(2, LineBlocks.getMinNotStartedIndex(intervals, 6));
|
||||
assertEquals(3, LineBlocks.getMinNotStartedIndex(intervals, 7));
|
||||
}
|
||||
|
||||
public void testLineNumberTransformation() {
|
||||
LineBlocks lineBlocks = LineBlocks.createLineBlocks(new LineBlock[]{
|
||||
new LineBlock(2, 2, 2, 2, null),
|
||||
new LineBlock(6, 1, 6, 2, null),
|
||||
new LineBlock(8, 2, 9, 0, null)});
|
||||
|
||||
checkLeftRight(lineBlocks, 0, 0);
|
||||
checkLeftRight(lineBlocks, 3, 3);
|
||||
checkLeftRight(lineBlocks, 5, 5);
|
||||
checkLeftRight(lineBlocks, 6, 6);
|
||||
assertEquals(6, lineBlocks.transform(FragmentSide.SIDE2, 7));
|
||||
checkLeftRight(lineBlocks, 7, 8);
|
||||
checkLeftRight(lineBlocks, 8, 9);
|
||||
assertEquals(9, lineBlocks.transform(FragmentSide.SIDE1, 9));
|
||||
assertEquals(9, lineBlocks.transform(FragmentSide.SIDE1, 10));
|
||||
checkLeftRight(lineBlocks, 11, 10);
|
||||
}
|
||||
|
||||
private void checkLeftRight(LineBlocks lineBlocks, int left, int right) {
|
||||
assertEquals(right, lineBlocks.transform(FragmentSide.SIDE1, left));
|
||||
assertEquals(left, lineBlocks.transform(FragmentSide.SIDE2, right));
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.intellij.openapi.diff.impl.splitter;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class TransformationTest extends TestCase {
|
||||
public void testLinear() {
|
||||
Transformation transformation = new LinearTransformation(8, 5);
|
||||
assertEquals(-3, transformation.transform(1));
|
||||
assertEquals(2, transformation.transform(2));
|
||||
}
|
||||
|
||||
public void testOneToOne() {
|
||||
Interval range = Interval.fromTo(10, 12);
|
||||
assertEquals(10, LinearTransformation.oneToOne(1, 1, range));
|
||||
assertEquals(11, LinearTransformation.oneToOne(2, 1, range));
|
||||
assertEquals(11, LinearTransformation.oneToOne(3, 1, range));
|
||||
}
|
||||
}
|
||||
@@ -26,7 +26,7 @@ diff.element.qualified.name.vs.element.qualified.name.dialog.title={0} vs {1}
|
||||
diff.acton.ignore.qhitespace.policy.do.not.ignore=Do not ignore
|
||||
diff.acton.ignore.qhitespace.policy.leading.and.trailing=Leading and trailing
|
||||
diff.acton.ignore.qhitespace.policy.all=All
|
||||
ignore.whitespace.action.not.avaliable.action.name=<Not avaliable>
|
||||
ignore.whitespace.action.not.avaliable.action.name=<Not available>
|
||||
diff.dialog.select.change.action.name=Select Change
|
||||
diff.dialog.select.change.action.description=Select changed text in this version and corresponding in other
|
||||
merge.files.dialog.title=Merge
|
||||
@@ -71,7 +71,7 @@ merge.init.merge.content.command.name=initMergeContent
|
||||
merge.color.options.stripe.mark.color.label=&Stripe mark color:
|
||||
merge.color.options.background.color.label=Background &color:
|
||||
merge.color.options.dialog.title=Merge Color Options
|
||||
diff.content.read.only.content.title.suffix= (Read-only)
|
||||
diff.content.read.only.content.title.suffix=(Read-only)
|
||||
diff.type.inserted.name=Inserted
|
||||
diff.type.changed.name=Changed
|
||||
diff.type.deleted.name=Deleted
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
<orderEntry type="module" module-name="openapi" />
|
||||
<orderEntry type="module" module-name="testFramework-java" scope="TEST" />
|
||||
<orderEntry type="module" module-name="idea-tests" scope="TEST" />
|
||||
<orderEntry type="module" module-name="platform-impl" />
|
||||
<orderEntry type="module" module-name="lang-impl" />
|
||||
<orderEntry type="module" module-name="testFramework" />
|
||||
</component>
|
||||
</module>
|
||||
|
||||
|
||||
@@ -15,13 +15,18 @@
|
||||
*/
|
||||
package com.intellij.spellchecker;
|
||||
|
||||
import com.intellij.codeInsight.AnnotationUtil;
|
||||
import com.intellij.psi.PsiLiteralExpression;
|
||||
import com.intellij.psi.PsiModifierListOwner;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.spellchecker.inspections.SplitterFactory;
|
||||
import com.intellij.spellchecker.tokenizer.Token;
|
||||
import com.intellij.spellchecker.tokenizer.Tokenizer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
*
|
||||
@@ -32,6 +37,11 @@ public class LiteralExpressionTokenizer extends Tokenizer<PsiLiteralExpression>
|
||||
@Override
|
||||
@Nullable
|
||||
public Token[] tokenize(@NotNull PsiLiteralExpression element) {
|
||||
return new Token[]{new Token<PsiLiteralExpression>(element, SplitterFactory.getInstance().getStringLiteralSplitter())};
|
||||
final PsiModifierListOwner listOwner = PsiTreeUtil.getParentOfType(element, PsiModifierListOwner.class);
|
||||
boolean isNls = false;
|
||||
if (listOwner != null) {
|
||||
isNls = AnnotationUtil.isAnnotated(listOwner, Collections.singleton(AnnotationUtil.NON_NLS));
|
||||
}
|
||||
return !isNls ? new Token[]{new Token<PsiLiteralExpression>(element, SplitterFactory.getInstance().getStringLiteralSplitter())} : null;
|
||||
}
|
||||
}
|
||||
|
||||
+10
-5
@@ -39,7 +39,7 @@ public class MavenAddArchetypeDialog extends DialogWrapper {
|
||||
|
||||
init();
|
||||
|
||||
DocumentAdapter l =new DocumentAdapter() {
|
||||
DocumentAdapter l = new DocumentAdapter() {
|
||||
@Override
|
||||
protected void textChanged(DocumentEvent e) {
|
||||
doValidateInput();
|
||||
@@ -63,6 +63,11 @@ public class MavenAddArchetypeDialog extends DialogWrapper {
|
||||
return myGroupIdField;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getHelpId() {
|
||||
return "Add_Archetype_Dialog";
|
||||
}
|
||||
|
||||
private void doValidateInput() {
|
||||
List<String> errors = new ArrayList<String>();
|
||||
if (StringUtil.isEmptyOrSpaces(myGroupIdField.getText())) errors.add("GroupId");
|
||||
@@ -82,9 +87,9 @@ public class MavenAddArchetypeDialog extends DialogWrapper {
|
||||
|
||||
public MavenArchetype getArchetype() {
|
||||
return new MavenArchetype(myGroupIdField.getText(),
|
||||
myArtifactIdField.getText(),
|
||||
myVersionField.getText(),
|
||||
myRepositoryField.getText(),
|
||||
null);
|
||||
myArtifactIdField.getText(),
|
||||
myVersionField.getText(),
|
||||
myRepositoryField.getText(),
|
||||
null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,294 +1,294 @@
|
||||
aggregator
|
||||
ajax
|
||||
anyschema
|
||||
appender
|
||||
archivelog
|
||||
args
|
||||
arity
|
||||
asensitive
|
||||
auth
|
||||
authid
|
||||
autocommit
|
||||
autoextend
|
||||
autoincrement
|
||||
barcode
|
||||
backend
|
||||
basedir
|
||||
basicfile
|
||||
bfile
|
||||
bigfile
|
||||
bigint
|
||||
binlog
|
||||
bool
|
||||
btree
|
||||
calc
|
||||
capath
|
||||
captcha
|
||||
ccflags
|
||||
cdata
|
||||
charset
|
||||
checkbox
|
||||
checksum
|
||||
classpath
|
||||
clazz
|
||||
clob
|
||||
closable
|
||||
cmdline
|
||||
commandline
|
||||
config
|
||||
configs
|
||||
configurator
|
||||
controlfile
|
||||
cron
|
||||
ctrl
|
||||
datafile
|
||||
datafiles
|
||||
datetime
|
||||
deallocate
|
||||
deduplicate
|
||||
deferrable
|
||||
desc
|
||||
dirs
|
||||
distinctrow
|
||||
django
|
||||
dojo
|
||||
draggable
|
||||
dumpfile
|
||||
elseif
|
||||
elsif
|
||||
enum
|
||||
evex
|
||||
expr
|
||||
filename
|
||||
fileset
|
||||
filesets
|
||||
filesystem
|
||||
foreach
|
||||
formatter
|
||||
freelist
|
||||
freelists
|
||||
freepools
|
||||
frontend
|
||||
fulltext
|
||||
geometrycollection
|
||||
getters
|
||||
gdata
|
||||
google
|
||||
hardcoded
|
||||
holdability
|
||||
hostname
|
||||
href
|
||||
hsqldb
|
||||
html
|
||||
http
|
||||
https
|
||||
impl
|
||||
inbox
|
||||
indextype
|
||||
infile
|
||||
init
|
||||
initializer
|
||||
initrans
|
||||
inline
|
||||
innodb
|
||||
inout
|
||||
instantiable
|
||||
intellij
|
||||
isnull
|
||||
javadoc
|
||||
javascript
|
||||
jetbrains
|
||||
jquery
|
||||
json
|
||||
keepduplicates
|
||||
ldap
|
||||
likec
|
||||
linestring
|
||||
localhost
|
||||
localtime
|
||||
localtimestamp
|
||||
locator
|
||||
logfile
|
||||
login
|
||||
logoff
|
||||
logon
|
||||
logout
|
||||
longblob
|
||||
longtext
|
||||
lookup
|
||||
lucene
|
||||
maxdatafiles
|
||||
maxextents
|
||||
maximizable
|
||||
maxinstances
|
||||
maxlogfiles
|
||||
maxloghistory
|
||||
maxlogmembers
|
||||
maxsize
|
||||
maxtrans
|
||||
maxvalue
|
||||
mediumblob
|
||||
mediumint
|
||||
mediumtext
|
||||
metadata
|
||||
middleint
|
||||
minextents
|
||||
minimizable
|
||||
minvalue
|
||||
miny
|
||||
mlslabel
|
||||
multilinestring
|
||||
multipoint
|
||||
multipolygon
|
||||
multiset
|
||||
mutex
|
||||
mutexes
|
||||
mysql
|
||||
namespace
|
||||
namespaces
|
||||
nchar
|
||||
nclob
|
||||
ndbcluster
|
||||
noarchivelog
|
||||
noaudit
|
||||
nocache
|
||||
nocompress
|
||||
nocopy
|
||||
nocycle
|
||||
nodegroup
|
||||
noinspection
|
||||
noinspections
|
||||
nologging
|
||||
nomapping
|
||||
nomaxvalue
|
||||
nominvalue
|
||||
nomonitoring
|
||||
nonschema
|
||||
noorder
|
||||
noparallel
|
||||
norely
|
||||
noresetlogs
|
||||
noreverse
|
||||
norowdependencies
|
||||
nosort
|
||||
notnull
|
||||
novalidate
|
||||
nowait
|
||||
nullif
|
||||
nvarchar
|
||||
oauth
|
||||
oidindex
|
||||
online
|
||||
openid
|
||||
openssl
|
||||
outfile
|
||||
param
|
||||
params
|
||||
pctfree
|
||||
pctincrease
|
||||
pctthreshold
|
||||
pctused
|
||||
pctversion
|
||||
permalink
|
||||
petersburg
|
||||
pipelined
|
||||
playlist
|
||||
plsql
|
||||
plugin
|
||||
plugins
|
||||
posix
|
||||
pragma
|
||||
prebuilt
|
||||
prepend
|
||||
preprocessor
|
||||
processlist
|
||||
profiler
|
||||
progressbar
|
||||
readonly
|
||||
refactor
|
||||
refactored
|
||||
refactoring
|
||||
reindex
|
||||
renderer
|
||||
resetlogs
|
||||
rlike
|
||||
rollup
|
||||
rowdependencies
|
||||
rtree
|
||||
rubymine
|
||||
runtime
|
||||
savepoint
|
||||
schemas
|
||||
securefile
|
||||
serializable
|
||||
serializer
|
||||
servererror
|
||||
servlet
|
||||
smallfile
|
||||
smallint
|
||||
soname
|
||||
spellchecker
|
||||
spellchecking
|
||||
sqlcode
|
||||
sqlerror
|
||||
sqlexception
|
||||
sqlstate
|
||||
sqlwarning
|
||||
startup
|
||||
stateful
|
||||
stmt
|
||||
stylesheet
|
||||
subpackage
|
||||
subpartition
|
||||
subpartitions
|
||||
substring
|
||||
sysdate
|
||||
systimestamp
|
||||
tablespace
|
||||
taglib
|
||||
temptable
|
||||
timestamp
|
||||
tinyblob
|
||||
tinyint
|
||||
tinytext
|
||||
todo
|
||||
tokenize
|
||||
tokenizer
|
||||
tooltips
|
||||
trinary
|
||||
twitter
|
||||
uncomment
|
||||
underwave
|
||||
undofile
|
||||
unhandled
|
||||
uninstall
|
||||
unpivot
|
||||
urowid
|
||||
utf
|
||||
util
|
||||
utils
|
||||
validator
|
||||
validators
|
||||
vararg
|
||||
varbinary
|
||||
varchar
|
||||
varcharacter
|
||||
varray
|
||||
versa
|
||||
vertices
|
||||
webservice
|
||||
whitespace
|
||||
wildcard
|
||||
workflow
|
||||
wsdl
|
||||
xmlschema
|
||||
xmlschemas
|
||||
xmltype
|
||||
xpath
|
||||
xslt
|
||||
youtube
|
||||
zend
|
||||
zerofill
|
||||
indices
|
||||
postfix
|
||||
aggregator
|
||||
ajax
|
||||
anyschema
|
||||
appender
|
||||
archivelog
|
||||
args
|
||||
arity
|
||||
asensitive
|
||||
auth
|
||||
authid
|
||||
autocommit
|
||||
autoextend
|
||||
autoincrement
|
||||
barcode
|
||||
backend
|
||||
basedir
|
||||
basicfile
|
||||
bfile
|
||||
bigfile
|
||||
bigint
|
||||
binlog
|
||||
bool
|
||||
btree
|
||||
calc
|
||||
capath
|
||||
captcha
|
||||
ccflags
|
||||
cdata
|
||||
charset
|
||||
checkbox
|
||||
checksum
|
||||
classpath
|
||||
clazz
|
||||
clob
|
||||
closable
|
||||
cmdline
|
||||
commandline
|
||||
config
|
||||
configs
|
||||
configurator
|
||||
controlfile
|
||||
cron
|
||||
ctrl
|
||||
datafile
|
||||
datafiles
|
||||
datetime
|
||||
deallocate
|
||||
deduplicate
|
||||
deferrable
|
||||
desc
|
||||
dirs
|
||||
distinctrow
|
||||
django
|
||||
dojo
|
||||
draggable
|
||||
dumpfile
|
||||
elseif
|
||||
elsif
|
||||
enum
|
||||
evex
|
||||
expr
|
||||
filename
|
||||
fileset
|
||||
filesets
|
||||
filesystem
|
||||
foreach
|
||||
formatter
|
||||
freelist
|
||||
freelists
|
||||
freepools
|
||||
frontend
|
||||
fulltext
|
||||
geometrycollection
|
||||
getters
|
||||
gdata
|
||||
google
|
||||
hardcoded
|
||||
holdability
|
||||
hostname
|
||||
href
|
||||
hsqldb
|
||||
html
|
||||
http
|
||||
https
|
||||
impl
|
||||
inbox
|
||||
indextype
|
||||
infile
|
||||
init
|
||||
initializer
|
||||
initrans
|
||||
inline
|
||||
innodb
|
||||
inout
|
||||
instantiable
|
||||
intellij
|
||||
isnull
|
||||
javadoc
|
||||
javascript
|
||||
jetbrains
|
||||
jquery
|
||||
json
|
||||
keepduplicates
|
||||
ldap
|
||||
likec
|
||||
linestring
|
||||
localhost
|
||||
localtime
|
||||
localtimestamp
|
||||
locator
|
||||
logfile
|
||||
login
|
||||
logoff
|
||||
logon
|
||||
logout
|
||||
longblob
|
||||
longtext
|
||||
lookup
|
||||
lucene
|
||||
maxdatafiles
|
||||
maxextents
|
||||
maximizable
|
||||
maxinstances
|
||||
maxlogfiles
|
||||
maxloghistory
|
||||
maxlogmembers
|
||||
maxsize
|
||||
maxtrans
|
||||
maxvalue
|
||||
mediumblob
|
||||
mediumint
|
||||
mediumtext
|
||||
metadata
|
||||
middleint
|
||||
minextents
|
||||
minimizable
|
||||
minvalue
|
||||
miny
|
||||
mlslabel
|
||||
multilinestring
|
||||
multipoint
|
||||
multipolygon
|
||||
multiset
|
||||
mutex
|
||||
mutexes
|
||||
mysql
|
||||
namespace
|
||||
namespaces
|
||||
nchar
|
||||
nclob
|
||||
ndbcluster
|
||||
noarchivelog
|
||||
noaudit
|
||||
nocache
|
||||
nocompress
|
||||
nocopy
|
||||
nocycle
|
||||
nodegroup
|
||||
noinspection
|
||||
noinspections
|
||||
nologging
|
||||
nomapping
|
||||
nomaxvalue
|
||||
nominvalue
|
||||
nomonitoring
|
||||
nonschema
|
||||
noorder
|
||||
noparallel
|
||||
norely
|
||||
noresetlogs
|
||||
noreverse
|
||||
norowdependencies
|
||||
nosort
|
||||
notnull
|
||||
novalidate
|
||||
nowait
|
||||
nullif
|
||||
nvarchar
|
||||
oauth
|
||||
oidindex
|
||||
online
|
||||
openid
|
||||
openssl
|
||||
outfile
|
||||
param
|
||||
params
|
||||
pctfree
|
||||
pctincrease
|
||||
pctthreshold
|
||||
pctused
|
||||
pctversion
|
||||
permalink
|
||||
petersburg
|
||||
pipelined
|
||||
playlist
|
||||
plsql
|
||||
plugin
|
||||
plugins
|
||||
posix
|
||||
pragma
|
||||
prebuilt
|
||||
prepend
|
||||
preprocessor
|
||||
processlist
|
||||
profiler
|
||||
progressbar
|
||||
readonly
|
||||
refactor
|
||||
refactored
|
||||
refactoring
|
||||
reindex
|
||||
renderer
|
||||
resetlogs
|
||||
rlike
|
||||
rollup
|
||||
rowdependencies
|
||||
rtree
|
||||
rubymine
|
||||
runtime
|
||||
savepoint
|
||||
schemas
|
||||
securefile
|
||||
serializable
|
||||
serializer
|
||||
servererror
|
||||
servlet
|
||||
smallfile
|
||||
smallint
|
||||
soname
|
||||
spellchecker
|
||||
spellchecking
|
||||
sqlcode
|
||||
sqlerror
|
||||
sqlexception
|
||||
sqlstate
|
||||
sqlwarning
|
||||
startup
|
||||
stateful
|
||||
stmt
|
||||
stylesheet
|
||||
subpackage
|
||||
subpartition
|
||||
subpartitions
|
||||
substring
|
||||
sysdate
|
||||
systimestamp
|
||||
tablespace
|
||||
taglib
|
||||
temptable
|
||||
timestamp
|
||||
tinyblob
|
||||
tinyint
|
||||
tinytext
|
||||
todo
|
||||
tokenize
|
||||
tokenizer
|
||||
tooltips
|
||||
trinary
|
||||
twitter
|
||||
uncomment
|
||||
underwave
|
||||
undofile
|
||||
unhandled
|
||||
uninstall
|
||||
unpivot
|
||||
urowid
|
||||
utf
|
||||
util
|
||||
utils
|
||||
validator
|
||||
validators
|
||||
vararg
|
||||
varbinary
|
||||
varchar
|
||||
varcharacter
|
||||
varray
|
||||
versa
|
||||
vertices
|
||||
webservice
|
||||
whitespace
|
||||
wildcard
|
||||
workflow
|
||||
wsdl
|
||||
xmlschema
|
||||
xmlschemas
|
||||
xmltype
|
||||
xpath
|
||||
xslt
|
||||
youtube
|
||||
zend
|
||||
zerofill
|
||||
indices
|
||||
postfix
|
||||
Throwable
|
||||
@@ -0,0 +1,15 @@
|
||||
public class VarArgTest {
|
||||
|
||||
public void a(Test first, Test... rest){
|
||||
}
|
||||
|
||||
public void b(<TYPO descr="Typo: In word 'Testt'">Testt</TYPO> first, <TYPO descr="Typo: In word 'Testt'">Testt</TYPO>... rest){
|
||||
}
|
||||
|
||||
public class Test {
|
||||
}
|
||||
|
||||
public class <TYPO descr="Typo: In word 'Testt'">Testt</TYPO> {
|
||||
}
|
||||
|
||||
}
|
||||
+6
@@ -36,4 +36,10 @@ public class JavaSpellcheckingTest extends SpellcheckerInspectionTestCase {
|
||||
public void testTypoInJava() throws Throwable {
|
||||
doTest("GenericTestt.java", SpellCheckerInspectionToolProvider.getInspectionTools());
|
||||
}
|
||||
|
||||
public void testVarArg() throws Throwable {
|
||||
doTest("VarArgTest.java", SpellCheckerInspectionToolProvider.getInspectionTools());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user