mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
IDEA-88975 Java constructors autocompletion doesn't work fine for non-static inner classes.
This commit is contained in:
@@ -736,7 +736,9 @@ public class JavaCompletionUtil {
|
||||
PsiElement element = file.findElementAt(startOffset);
|
||||
if (element instanceof PsiIdentifier) {
|
||||
PsiElement parent = element.getParent();
|
||||
if (parent instanceof PsiJavaCodeReferenceElement && !((PsiJavaCodeReferenceElement)parent).isQualified() && !(parent.getParent() instanceof PsiPackageStatement)) {
|
||||
if (parent instanceof PsiJavaCodeReferenceElement &&
|
||||
!((PsiJavaCodeReferenceElement)parent).isQualified() &&
|
||||
!(parent.getParent() instanceof PsiPackageStatement)) {
|
||||
PsiJavaCodeReferenceElement ref = (PsiJavaCodeReferenceElement)parent;
|
||||
|
||||
if (psiClass.isValid() && !psiClass.getManager().areElementsEquivalent(psiClass, resolveReference(ref))) {
|
||||
@@ -750,8 +752,8 @@ public class JavaCompletionUtil {
|
||||
documentManager.commitDocument(document);
|
||||
|
||||
newElement = CodeInsightUtilBase.findElementInRange(file, rangeMarker.getStartOffset(), rangeMarker.getEndOffset(),
|
||||
PsiJavaCodeReferenceElement.class,
|
||||
JavaLanguage.INSTANCE);
|
||||
PsiJavaCodeReferenceElement.class,
|
||||
JavaLanguage.INSTANCE);
|
||||
rangeMarker.dispose();
|
||||
if (newElement != null) {
|
||||
newEndOffset = newElement.getTextRange().getEndOffset();
|
||||
@@ -762,7 +764,9 @@ public class JavaCompletionUtil {
|
||||
}
|
||||
}
|
||||
|
||||
if (!staticImport && !psiClass.getManager().areElementsEquivalent(psiClass, resolveReference((PsiReference)newElement))) {
|
||||
if (!staticImport &&
|
||||
!psiClass.getManager().areElementsEquivalent(psiClass, resolveReference((PsiReference)newElement)) &&
|
||||
!PsiUtil.isInnerClass(psiClass)) {
|
||||
final String qName = psiClass.getQualifiedName();
|
||||
if (qName != null) {
|
||||
document.replaceString(newElement.getTextRange().getStartOffset(), newEndOffset, qName);
|
||||
|
||||
@@ -39,6 +39,8 @@ import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static com.intellij.patterns.PsiJavaPatterns.psiElement;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
@@ -116,8 +118,10 @@ public class JavaInheritorsGetter extends CompletionProvider<CompletionParameter
|
||||
final PsiClass psiClass = PsiUtil.resolveClassInType(type);
|
||||
if (psiClass == null || psiClass.getName() == null) return null;
|
||||
|
||||
PsiElement position = parameters.getPosition();
|
||||
if ((parameters.getInvocationCount() < 2 || psiClass instanceof PsiCompiledElement) &&
|
||||
HighlightClassUtil.checkCreateInnerClassFromStaticContext(parameters.getPosition(), null, psiClass) != null) {
|
||||
HighlightClassUtil.checkCreateInnerClassFromStaticContext(position, null, psiClass) != null &&
|
||||
!psiElement().afterLeaf(psiElement().withText(PsiKeyword.NEW).afterLeaf(".")).accepts(position)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -143,7 +147,7 @@ public class JavaInheritorsGetter extends CompletionProvider<CompletionParameter
|
||||
}
|
||||
}
|
||||
}
|
||||
final PsiTypeLookupItem item = PsiTypeLookupItem.createLookupItem(psiType, parameters.getPosition());
|
||||
final PsiTypeLookupItem item = PsiTypeLookupItem.createLookupItem(psiType, position);
|
||||
JavaCompletionUtil.setShowFQN(item);
|
||||
|
||||
if (psiClass.isInterface() || psiClass.hasModifierProperty(PsiModifier.ABSTRACT)) {
|
||||
|
||||
@@ -187,10 +187,10 @@ public class PsiTypeLookupItem extends LookupItem {
|
||||
Set<String> allStrings = new HashSet<String>();
|
||||
String lookupString = psiClass.getName();
|
||||
allStrings.add(lookupString);
|
||||
if (!psiClass.getManager().areElementsEquivalent(resolved, psiClass)) {
|
||||
if (!psiClass.getManager().areElementsEquivalent(resolved, psiClass) && !PsiUtil.isInnerClass(psiClass)) {
|
||||
// inner class name should be shown qualified if its not accessible by single name
|
||||
PsiClass aClass = psiClass.getContainingClass();
|
||||
while (aClass != null) {
|
||||
while (aClass != null && !PsiUtil.isInnerClass(aClass)) {
|
||||
lookupString = aClass.getName() + '.' + lookupString;
|
||||
allStrings.add(lookupString);
|
||||
aClass = aClass.getContainingClass();
|
||||
|
||||
Reference in New Issue
Block a user