mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-05 01:50:56 +07:00
IDEA-114736 Bug in code completion inside instanceof block
This commit is contained in:
@@ -384,7 +384,7 @@ public class JavaCompletionUtil {
|
||||
}
|
||||
mentioned.add((PsiMember)o);
|
||||
}
|
||||
set.add(highlightIfNeeded(qualifierType, castQualifier(item, castItem, plainQualifier), o));
|
||||
set.add(highlightIfNeeded(qualifierType, castQualifier(item, castItem, plainQualifier, processor), o));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -427,7 +427,7 @@ public class JavaCompletionUtil {
|
||||
@NotNull
|
||||
private static LookupElement castQualifier(@NotNull LookupElement item,
|
||||
@Nullable final PsiTypeLookupItem castTypeItem,
|
||||
@Nullable PsiType plainQualifier) {
|
||||
@Nullable PsiType plainQualifier, JavaCompletionProcessor processor) {
|
||||
if (castTypeItem == null) {
|
||||
return item;
|
||||
}
|
||||
@@ -449,7 +449,9 @@ public class JavaCompletionUtil {
|
||||
PsiSubstitutor plainSub = plainResult.getSubstitutor();
|
||||
PsiSubstitutor castSub = TypeConversionUtil.getSuperClassSubstitutor(plainClass, (PsiClassType)castType);
|
||||
if (method.getSignature(plainSub).equals(method.getSignature(castSub)) &&
|
||||
plainSub.substitute(method.getReturnType()).equals(castSub.substitute(method.getReturnType()))) {
|
||||
plainSub.substitute(method.getReturnType()).equals(castSub.substitute(method.getReturnType())) &&
|
||||
processor.isAccessible(plainClass.findMethodBySignature(method, true))
|
||||
) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -265,7 +265,7 @@ public class JavaCompletionProcessor extends BaseScopeProcessor implements Eleme
|
||||
return myQualifierType;
|
||||
}
|
||||
|
||||
private boolean isAccessible(final PsiElement element) {
|
||||
public boolean isAccessible(@Nullable final PsiElement element) {
|
||||
if (!myOptions.checkAccess) return true;
|
||||
if (!(element instanceof PsiMember)) return true;
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
import foo.*;
|
||||
|
||||
class Goo {
|
||||
void method(Foo o) {
|
||||
if (o instanceof FooImpl) {
|
||||
o.consu<caret>
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import foo.*;
|
||||
|
||||
class Goo {
|
||||
void method(Foo o) {
|
||||
if (o instanceof FooImpl) {
|
||||
((FooImpl) o).consume();<caret>
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -39,6 +39,23 @@ class NormalCompletionDfaTest extends LightFixtureCompletionTestCase {
|
||||
void testCastQualifierForPrivateFieldReference() { doTest(); }
|
||||
void testOrAssignmentDfa() { doTest(); }
|
||||
void testFieldWithCastingCaret() { doTest(); }
|
||||
|
||||
void testPublicMethodExtendsProtected() {
|
||||
myFixture.addClass '''
|
||||
package foo;
|
||||
public class Foo {
|
||||
protected void consume() {}
|
||||
}
|
||||
|
||||
'''
|
||||
myFixture.addClass '''
|
||||
package foo;
|
||||
public class FooImpl extends Foo {
|
||||
public void consume() {}
|
||||
}
|
||||
'''
|
||||
doTest()
|
||||
}
|
||||
|
||||
private void doTest() throws Exception {
|
||||
configureByTestName()
|
||||
|
||||
Reference in New Issue
Block a user