restore field negation by !

This commit is contained in:
peter
2011-02-21 20:44:03 +01:00
parent ab4660c7ac
commit 0955db3442
5 changed files with 33 additions and 22 deletions

View File

@@ -21,7 +21,6 @@ import com.intellij.codeInsight.TailType;
import com.intellij.codeInsight.TailTypes;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupItem;
import com.intellij.featureStatistics.FeatureUsageTracker;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
@@ -31,7 +30,6 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
@@ -73,20 +71,6 @@ public class DefaultInsertHandler extends TemplateInsertHandler implements Clone
handleParentheses(false, false, tailType, context, state);
handleBrackets(item, document, state);
if (item.getObject() instanceof PsiVariable) {
if (completionChar == '!' && PsiType.BOOLEAN.isAssignableFrom(((PsiVariable) item.getObject()).getType())) {
PsiDocumentManager.getInstance(project).commitDocument(document);
final PsiReferenceExpression ref =
PsiTreeUtil.findElementOfClassAtOffset(file, state.tailOffset - 1, PsiReferenceExpression.class, false);
if (ref != null) {
FeatureUsageTracker.getInstance().triggerFeatureUsed(CodeCompletionFeatures.EXCLAMATION_FINISH);
document.insertString(ref.getTextRange().getStartOffset(), "!");
state.caretOffset++;
state.tailOffset++;
}
}
}
context.setTailOffset(state.tailOffset);
state.caretOffset = processTail(tailType, state.caretOffset, state.tailOffset, editor);
editor.getSelectionModel().removeSelection();

View File

@@ -2,10 +2,11 @@ package com.intellij.codeInsight.lookup;
import com.intellij.codeInsight.AutoPopupController;
import com.intellij.codeInsight.TailType;
import com.intellij.codeInsight.completion.CodeCompletionFeatures;
import com.intellij.codeInsight.completion.InsertionContext;
import com.intellij.psi.PsiSubstitutor;
import com.intellij.psi.PsiType;
import com.intellij.psi.PsiVariable;
import com.intellij.featureStatistics.FeatureUsageTracker;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
/**
@@ -34,17 +35,27 @@ public class VariableLookupItem extends LookupItem<PsiVariable> implements Typed
public void handleInsert(InsertionContext context) {
super.handleInsert(context);
if (context.getCompletionChar() == '=') {
final char completionChar = context.getCompletionChar();
if (completionChar == '=') {
context.setAddCompletionChar(false);
TailType.EQ.processTail(context.getEditor(), context.getTailOffset());
}
else if (context.getCompletionChar() == ',' && getAttribute(LookupItem.TAIL_TYPE_ATTR) != TailType.UNKNOWN) {
else if (completionChar == ',' && getAttribute(LookupItem.TAIL_TYPE_ATTR) != TailType.UNKNOWN) {
context.setAddCompletionChar(false);
TailType.COMMA.processTail(context.getEditor(), context.getTailOffset());
}
else if (context.getCompletionChar() == '.') {
else if (completionChar == '.') {
AutoPopupController.getInstance(context.getProject()).autoPopupMemberLookup(context.getEditor(), null);
}
else if (completionChar == '!' && PsiType.BOOLEAN.isAssignableFrom(getObject().getType())) {
context.setAddCompletionChar(false);
final PsiReferenceExpression ref = PsiTreeUtil.findElementOfClassAtOffset(context.getFile(), context.getTailOffset() - 1, PsiReferenceExpression.class, false);
if (ref != null) {
FeatureUsageTracker.getInstance().triggerFeatureUsed(CodeCompletionFeatures.EXCLAMATION_FINISH);
context.getDocument().insertString(ref.getTextRange().getStartOffset(), "!");
}
}
}
}

View File

@@ -0,0 +1,7 @@
public class ConstConfig {
public static boolean testMode = false;
{
if (test<caret>x)
}
}

View File

@@ -0,0 +1,7 @@
public class ConstConfig {
public static boolean testMode = false;
{
if (!testMode<caret>x)
}
}

View File

@@ -582,6 +582,8 @@ public class NormalCompletionTest extends LightFixtureCompletionTestCase {
checkResult()
}
public void testFieldNegation() throws Throwable { doTest('!');}
public void testSuperInConstructor() throws Throwable {
doTest();
}