Insert one additional space for function literals

This commit is contained in:
Nikolay Krasko
2012-10-12 21:18:47 +04:00
parent ef7ed937c1
commit 440f781a93
5 changed files with 45 additions and 3 deletions
@@ -23,8 +23,11 @@ import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
@@ -35,6 +38,7 @@ import org.jetbrains.jet.lang.psi.JetQualifiedExpression;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.plugin.completion.JetLookupObject;
import org.jetbrains.jet.plugin.formatter.JetCodeStyleSettings;
import org.jetbrains.jet.plugin.quickfix.ImportInsertHelper;
/**
@@ -100,8 +104,14 @@ public class JetFunctionInsertHandler implements InsertHandler<LookupElement> {
if (openingBracketIndex == -1) {
// Insert ()/{} if it's not already exist
if (braces) {
document.insertString(endOffset, " {}");
openingBracketIndex = endOffset + 1;
if (isInsertSpacesInOneLineFunctionEnabled(offsetElement.getProject())) {
document.insertString(endOffset, " { }");
openingBracketIndex = endOffset + 2;
}
else {
document.insertString(endOffset, " {}");
openingBracketIndex = endOffset + 1;
}
}
else {
document.insertString(endOffset, "()");
@@ -125,6 +135,13 @@ public class JetFunctionInsertHandler implements InsertHandler<LookupElement> {
PsiDocumentManager.getInstance(context.getProject()).commitDocument(context.getDocument());
}
private static boolean isInsertSpacesInOneLineFunctionEnabled(Project project) {
CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(project);
JetCodeStyleSettings jetSettings = settings.getCustomSettings(JetCodeStyleSettings.class);
return jetSettings.INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD;
}
private static void addImport(final InsertionContext context, final @NotNull LookupElement item) {
ApplicationManager.getApplication().runReadAction(new Runnable() {
@Override
@@ -0,0 +1,5 @@
fun <T> jet.Array<T>.filter(predicate : (T) -> jet.Boolean) : java.util.List<T> = throw UnsupportedOperationException()
fun main(args: Array<String>) {
args.fil<caret>
}
@@ -0,0 +1,5 @@
fun <T> jet.Array<T>.filter(predicate : (T) -> jet.Boolean) : java.util.List<T> = throw UnsupportedOperationException()
fun main(args: Array<String>) {
args.filter {<caret>}
}
@@ -1,5 +1,5 @@
fun <T> jet.Array<T>.filter(predicate : (T) -> jet.Boolean) : java.util.List<T> = throw UnsupportedOperationException()
fun main(args: Array<String>) {
args.filter {<caret>}
args.filter { <caret> }
}
@@ -23,9 +23,12 @@ import com.intellij.codeInsight.lookup.LookupElementPresentation;
import com.intellij.codeInsight.lookup.LookupManager;
import com.intellij.codeInsight.lookup.impl.LookupImpl;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import junit.framework.Assert;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.plugin.PluginTestCaseBase;
import org.jetbrains.jet.plugin.formatter.JetCodeStyleSettings;
import java.io.File;
@@ -76,6 +79,18 @@ public class CompletionHandlerTest extends LightCompletionTestCase {
doTest();
}
public void testFunctionLiteralInsertWhenNoSpacesForBraces() {
CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject());
JetCodeStyleSettings jetSettings = settings.getCustomSettings(JetCodeStyleSettings.class);
try {
jetSettings.INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD = false;
doTest();
} finally {
jetSettings.INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD = true;
}
}
public void testHigherOrderFunction() {
doTest();
}