mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-82427 Code Completion produces bad code inside if brackets
This commit is contained in:
@@ -21,8 +21,10 @@ import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.util.ClassConditionKey;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.text.CharArrayUtil;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -100,10 +102,12 @@ public class JavaChainLookupElement extends LookupElementDecorator<LookupElement
|
||||
final Document document = context.getEditor().getDocument();
|
||||
document.replaceString(context.getStartOffset(), context.getTailOffset(), ";");
|
||||
final InsertionContext qualifierContext = CompletionUtil.emulateInsertion(context, context.getStartOffset(), myQualifier);
|
||||
OffsetKey oldStart = context.trackOffset(context.getStartOffset(), false);
|
||||
|
||||
if (shouldParenthesizeQualifier(qualifierContext.getFile(), context.getStartOffset(), qualifierContext.getTailOffset())) {
|
||||
int start = CharArrayUtil.shiftForward(context.getDocument().getCharsSequence(), context.getStartOffset(), " \t");
|
||||
if (shouldParenthesizeQualifier(context.getFile(), start, qualifierContext.getTailOffset())) {
|
||||
final String space = CodeStyleSettingsManager.getSettings(qualifierContext.getProject()).SPACE_WITHIN_PARENTHESES ? " " : "";
|
||||
document.insertString(context.getStartOffset(), "(" + space);
|
||||
document.insertString(start, "(" + space);
|
||||
document.insertString(qualifierContext.getTailOffset(), space + ")");
|
||||
}
|
||||
|
||||
@@ -112,6 +116,13 @@ public class JavaChainLookupElement extends LookupElementDecorator<LookupElement
|
||||
document.replaceString(context.getTailOffset() - 1, context.getTailOffset(), ".");
|
||||
|
||||
CompletionUtil.emulateInsertion(getDelegate(), context.getTailOffset(), context);
|
||||
context.commitDocument();
|
||||
|
||||
int formatStart = context.getOffset(oldStart);
|
||||
int formatEnd = context.getTailOffset();
|
||||
if (formatStart >= 0 && formatEnd >= 0) {
|
||||
CodeStyleManager.getInstance(context.getProject()).reformatRange(context.getFile(), formatStart, formatEnd);
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean shouldParenthesizeQualifier(final PsiFile file, final int startOffset, final int endOffset) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
class Foo {
|
||||
{
|
||||
Assert.<caret>
|
||||
if (Assert.<caret>)
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
import bar.Assert;
|
||||
|
||||
class Foo {
|
||||
{
|
||||
if (Assert.bar()<caret>)
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -45,7 +45,6 @@ import com.intellij.openapi.fileEditor.FileEditorManager
|
||||
import com.intellij.openapi.progress.ProgressManager
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.psi.PsiJavaFile
|
||||
import com.intellij.util.Consumer
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
@@ -1230,7 +1229,8 @@ class Foo {{
|
||||
type 'fo\n'
|
||||
myFixture.checkResult '''import foo.Util;
|
||||
|
||||
class Foo {{ Util.foo();<caret> }}'''
|
||||
class Foo {{
|
||||
Util.foo();<caret> }}'''
|
||||
}
|
||||
|
||||
public void testPackageQualifier() {
|
||||
|
||||
+4
-2
@@ -1292,10 +1292,12 @@ public class ListUtils {
|
||||
}
|
||||
|
||||
public void testAllAssertClassesMethods() {
|
||||
myFixture.addClass 'package foo; public class Assert { public static void foo() {} }'
|
||||
myFixture.addClass 'package bar; public class Assert { public static void bar() {} }'
|
||||
myFixture.addClass 'package foo; public class Assert { public static boolean foo() {} }'
|
||||
myFixture.addClass 'package bar; public class Assert { public static boolean bar() {} }'
|
||||
configure()
|
||||
assert myFixture.lookupElementStrings == ['Assert.bar', 'Assert.foo']
|
||||
myFixture.type '\n'
|
||||
checkResult()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ class A {
|
||||
File myFile;
|
||||
|
||||
def foo() {
|
||||
myFile.canonicalPath<caret>
|
||||
myFile.canonicalPath<caret>
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user