[^ann] IDEA-85010 Inner enum is completed incorrectly in method return type

This commit is contained in:
peter
2012-04-23 17:27:50 +02:00
parent b1024632fc
commit 1f737ee239
7 changed files with 60 additions and 7 deletions
@@ -15,8 +15,10 @@
*/
package com.intellij.codeInsight.completion;
import com.intellij.codeInsight.lookup.*;
import com.intellij.featureStatistics.FeatureUsageTracker;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementDecorator;
import com.intellij.codeInsight.lookup.LookupElementPresentation;
import com.intellij.codeInsight.lookup.TypedLookupItem;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.util.ClassConditionKey;
import com.intellij.openapi.util.text.StringUtil;
@@ -97,8 +99,6 @@ public class JavaChainLookupElement extends LookupElementDecorator<LookupElement
@Override
public void handleInsert(InsertionContext context) {
FeatureUsageTracker.getInstance().triggerFeatureUsed(JavaCompletionFeatures.SECOND_SMART_COMPLETION_CHAIN);
final Document document = context.getEditor().getDocument();
document.replaceString(context.getStartOffset(), context.getTailOffset(), ";");
final InsertionContext qualifierContext = CompletionUtil.emulateInsertion(context, context.getStartOffset(), myQualifier);
@@ -138,8 +138,11 @@ public class JavaChainLookupElement extends LookupElementDecorator<LookupElement
last = element;
element = element.getParent();
}
PsiExpression expr = PsiTreeUtil.getParentOfType(last, PsiExpression.class, false);
if (expr == null || expr.getTextRange().getEndOffset() > endOffset) {
PsiExpression expr = PsiTreeUtil.getParentOfType(last, PsiExpression.class, false, PsiClass.class);
if (expr == null) {
return false;
}
if (expr.getTextRange().getEndOffset() > endOffset) {
return true;
}
@@ -451,7 +451,13 @@ public class ReferenceExpressionCompletionContributor {
final ElementFilter filter = getReferenceFilter(place, true);
for (final LookupElement item : completeFinalReference(place, mockRef, filter, parameters)) {
if (shouldChain(place, qualifierType, expectedType, item)) {
result.consume(new JavaChainLookupElement(qualifierItem, item));
result.consume(new JavaChainLookupElement(qualifierItem, item) {
@Override
public void handleInsert(InsertionContext context) {
FeatureUsageTracker.getInstance().triggerFeatureUsed(JavaCompletionFeatures.SECOND_SMART_COMPLETION_CHAIN);
super.handleInsert(context);
}
});
}
}
}