diff options
Diffstat (limited to 'java/java-impl/src/com/intellij/codeInsight/completion')
7 files changed, 27 insertions, 29 deletions
diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java index 5ac14956fe4c..f5e43aa7bcec 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java @@ -484,7 +484,7 @@ public class JavaCompletionData extends JavaAwareCompletionData { } } - if ((isInsideParameterList(position) || isAtResourceVariableStart(position)) && + if ((isInsideParameterList(position) || isAtResourceVariableStart(position) || isAtCatchVariableStart(position)) && !psiElement().afterLeaf(PsiKeyword.FINAL).accepts(position) && !AFTER_DOT.accepts(position)) { result.addElement(TailTypeDecorator.withTail(createKeyword(position, PsiKeyword.FINAL), TailType.HUMBLE_SPACE_BEFORE_WORD)); @@ -673,6 +673,10 @@ public class JavaCompletionData extends JavaAwareCompletionData { return psiElement().insideStarting(psiElement(PsiTypeElement.class).withParent(PsiResourceList.class)).accepts(position); } + private static boolean isAtCatchVariableStart(PsiElement position) { + return psiElement().insideStarting(psiElement(PsiTypeElement.class).withParent(PsiCatchSection.class)).accepts(position); + } + private static void addBreakContinue(CompletionResultSet result, PsiElement position) { PsiLoopStatement loop = PsiTreeUtil.getParentOfType(position, PsiLoopStatement.class); diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionSorting.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionSorting.java index d144a67fcb69..5a18a4b42826 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionSorting.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionSorting.java @@ -278,10 +278,12 @@ public class JavaCompletionSorting { @NotNull @Override - public Comparable weigh(@NotNull LookupElement item) { + public MyResult weigh(@NotNull LookupElement item) { final Object object = item.getObject(); if (object instanceof PsiClass) { + if (object instanceof PsiTypeParameter) return MyResult.typeParameter; + if (myTypeParameter != null && object.equals(PsiUtil.resolveClassInType(TypeConversionUtil.typeParameterErasure(myTypeParameter)))) { return MyResult.exactlyExpected; } @@ -340,6 +342,7 @@ public class JavaCompletionSorting { private enum MyResult { expectedNoSelect, + typeParameter, exactlyDefault, ofDefaultType, exactlyExpected, diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java index 1112738c5464..8cc9d06aed04 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java @@ -55,6 +55,7 @@ import com.intellij.util.NullableFunction; import com.intellij.util.PairConsumer; import com.intellij.util.PairFunction; import com.intellij.util.containers.ContainerUtil; +import com.siyeh.ig.psiutils.SideEffectChecker; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -606,21 +607,7 @@ public class JavaCompletionUtil { } public static boolean mayHaveSideEffects(@Nullable final PsiElement element) { - if (element == null) return false; - if (element instanceof PsiMethodCallExpression || element instanceof PsiNewExpression) return true; - if (element instanceof PsiTypeCastExpression) { - return mayHaveSideEffects(((PsiTypeCastExpression)element).getOperand()); - } - if (element instanceof PsiArrayAccessExpression) { - return mayHaveSideEffects(((PsiArrayAccessExpression)element).getArrayExpression()); - } - if (element instanceof PsiJavaCodeReferenceElement) { - return mayHaveSideEffects(((PsiJavaCodeReferenceElement)element).getQualifier()); - } - if (element instanceof PsiParenthesizedExpression) { - return mayHaveSideEffects(((PsiParenthesizedExpression)element).getExpression()); - } - return true; + return element instanceof PsiExpression && SideEffectChecker.mayHaveSideEffects((PsiExpression)element); } public static void insertClassReference(@NotNull PsiClass psiClass, @NotNull PsiFile file, int offset) { @@ -836,13 +823,16 @@ public class JavaCompletionUtil { //need to shorten references in type argument list public static void shortenReference(final PsiFile file, final int offset) throws IncorrectOperationException { - final PsiDocumentManager manager = PsiDocumentManager.getInstance(file.getProject()); - manager.commitDocument(manager.getDocument(file)); + Project project = file.getProject(); + final PsiDocumentManager manager = PsiDocumentManager.getInstance(project); + Document document = manager.getDocument(file); + manager.commitDocument(document); final PsiReference ref = file.findReferenceAt(offset); if (ref != null) { PsiElement element = ref.getElement(); if (element != null) { - JavaCodeStyleManager.getInstance(file.getProject()).shortenClassReferences(element); + JavaCodeStyleManager.getInstance(project).shortenClassReferences(element); + PsiDocumentManager.getInstance(project).doPostponedOperationsAndUnblockDocument(document); } } } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaGenerateMemberCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaGenerateMemberCompletionContributor.java index 351eca4857fd..456c06fe8756 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaGenerateMemberCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaGenerateMemberCompletionContributor.java @@ -26,6 +26,7 @@ import com.intellij.psi.infos.CandidateInfo; import com.intellij.psi.util.MethodSignature; import com.intellij.psi.util.PsiFormatUtil; import com.intellij.psi.util.PsiFormatUtilBase; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.ui.RowIcon; import com.intellij.util.VisibilityUtil; import com.intellij.util.containers.ContainerUtil; @@ -98,13 +99,12 @@ public class JavaGenerateMemberCompletionContributor { PsiClass baseClass = baseMethod.getContainingClass(); PsiSubstitutor substitutor = candidate.getSubstitutor(); if (!baseMethod.isConstructor() && baseClass != null && addedSignatures.add(baseMethod.getSignature(substitutor))) { - result.addElement(createOverridingLookupElement(parent, implemented, baseMethod, baseClass, substitutor)); + result.addElement(createOverridingLookupElement(implemented, baseMethod, baseClass, substitutor)); } } } - private static LookupElementBuilder createOverridingLookupElement(final PsiClass parent, - boolean implemented, + private static LookupElementBuilder createOverridingLookupElement(boolean implemented, final PsiMethod baseMethod, PsiClass baseClass, PsiSubstitutor substitutor) { @@ -117,6 +117,9 @@ public class JavaGenerateMemberCompletionContributor { public void handleInsert(InsertionContext context, LookupElement item) { removeLookupString(context); + final PsiClass parent = PsiTreeUtil.findElementOfClassAtOffset(context.getFile(), context.getStartOffset(), PsiClass.class, false); + if (parent == null) return; + List<PsiMethod> prototypes = OverrideImplementUtil.overrideOrImplementMethod(parent, baseMethod, false); insertGenerationInfos(context, OverrideImplementUtil.convert2GenerationInfos(prototypes)); } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaInheritorsGetter.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaInheritorsGetter.java index 1a14010ec834..a503de4d93a5 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaInheritorsGetter.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaInheritorsGetter.java @@ -229,10 +229,7 @@ public class JavaInheritorsGetter extends CompletionProvider<CompletionParameter //long for (final PsiClassType type : expectedClassTypes) { - final PsiClass psiClass = type.resolve(); - if (psiClass != null && !psiClass.hasModifierProperty(PsiModifier.FINAL)) { - CodeInsightUtil.processSubTypes(type, parameters.getPosition(), false, matcher, consumer); - } + CodeInsightUtil.processSubTypes(type, parameters.getPosition(), false, matcher, consumer); } } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java index a1d4a6f8ac81..bb45d770dea1 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java @@ -414,7 +414,7 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor { outer: for (int i = 0; i < strings.length; i++) { String name = strings[i]; - if (!matcher.prefixMatches(name) || !JavaPsiFacade.getInstance(project).getNameHelper().isIdentifier(name, LanguageLevel.HIGHEST)) { + if (!matcher.prefixMatches(name) || !PsiNameHelper.getInstance(project).isIdentifier(name, LanguageLevel.HIGHEST)) { continue; } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java index 61d8abe18368..d5e04ce3f95a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java @@ -158,8 +158,9 @@ public class JavaSmartCompletionContributor extends CompletionContributor { @Override public void consume(PsiType type) { final PsiClass psiClass = PsiUtil.resolveClassInType(type); - if (psiClass == null) return; + if (psiClass == null || psiClass instanceof PsiTypeParameter) return; + //noinspection SuspiciousMethodCalls if (expectedClassTypes.contains(type)) return; result.addElement(createInstanceofLookupElement(psiClass, parameterizedTypes)); |