mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
completion copy should be reparsed incrementally even for big files (IDEA-129815)
This commit is contained in:
+21
@@ -23,10 +23,12 @@ import com.intellij.codeInsight.lookup.LookupManager
|
||||
import com.intellij.codeInsight.lookup.impl.LookupImpl
|
||||
import com.intellij.lang.java.JavaLanguage
|
||||
import com.intellij.openapi.actionSystem.IdeActions
|
||||
import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.PsiDocumentManager
|
||||
import com.intellij.psi.PsiMethod
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings
|
||||
import com.intellij.psi.impl.PsiDocumentManagerBase
|
||||
import com.siyeh.ig.style.UnqualifiedFieldAccessInspection
|
||||
|
||||
public class NormalCompletionTest extends LightFixtureCompletionTestCase {
|
||||
@@ -1515,4 +1517,23 @@ class Bar {
|
||||
}
|
||||
|
||||
public void testIndentingForSwitchCase() { doTest() }
|
||||
|
||||
public void testIncrementalCopyReparse() {
|
||||
((PsiDocumentManagerBase)PsiDocumentManager.getInstance(project)).disableBackgroundCommit(testRootDisposable)
|
||||
|
||||
myFixture.configureByText('a.java', 'class Fooxxxxxxxxxx { Fooxxxxx<caret>a f;\n' + 'public void foo() {}\n' * 10000 + '}')
|
||||
def items = myFixture.completeBasic()
|
||||
PsiClass c1 = items[0].object
|
||||
assert !c1.physical
|
||||
assert CompletionUtil.getOriginalElement(c1)
|
||||
|
||||
getLookup().hide()
|
||||
myFixture.type('x')
|
||||
items = myFixture.completeBasic()
|
||||
PsiClass c2 = items[0].object
|
||||
assert !c2.physical
|
||||
assert CompletionUtil.getOriginalElement(c2)
|
||||
|
||||
assert c1.is(c2)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -499,7 +499,7 @@ public class DocumentImpl extends UserDataHolderBase implements DocumentEx {
|
||||
|
||||
@Override
|
||||
public void replaceString(int startOffset, int endOffset, @NotNull CharSequence s) {
|
||||
replaceString(startOffset, endOffset, s, LocalTimeCounter.currentTime(), startOffset == 0 && endOffset == getTextLength());
|
||||
replaceString(startOffset, endOffset, s, LocalTimeCounter.currentTime(), false);
|
||||
}
|
||||
|
||||
private void replaceString(int startOffset, int endOffset, @NotNull CharSequence s, final long newModificationStamp, boolean wholeTextReplaced) {
|
||||
|
||||
+1
-1
@@ -152,7 +152,7 @@ public class DocumentEventImpl extends DocumentEvent {
|
||||
|
||||
@Override
|
||||
public boolean isWholeTextReplaced() {
|
||||
return myIsWholeDocReplaced;
|
||||
return myIsWholeDocReplaced || super.isWholeTextReplaced();
|
||||
}
|
||||
|
||||
public int translateLineViaDiff(int line) throws FilesTooBigForDiffException {
|
||||
|
||||
+1
-1
@@ -777,7 +777,7 @@ public class CodeCompletionHandlerBase {
|
||||
Document originalDocument = file.getViewProvider().getDocument();
|
||||
assert originalDocument != null;
|
||||
assert originalDocument.getTextLength() == file.getTextLength() : originalDocument;
|
||||
document.setText(originalDocument.getImmutableCharSequence());
|
||||
document.replaceString(0, document.getTextLength(), originalDocument.getImmutableCharSequence());
|
||||
return copy;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user