method chain: capture wildcard on wildcard bounds

This commit is contained in:
Anna Kozlova
2016-02-17 17:22:19 +01:00
parent 0ac147ad95
commit fb42498c99
3 changed files with 22 additions and 2 deletions

View File

@@ -136,7 +136,7 @@ public class PsiScopesUtil {
final PsiType upperBound =
PsiClassImplUtil.correctType(((PsiCapturedWildcardType)type).getUpperBound(), place.getResolveScope());
if (upperBound != null) {
processTypeDeclarations(upperBound, place, processor);
processTypeDeclarations(PsiUtil.captureToplevelWildcards(upperBound, place), place, processor);
}
}
else {
@@ -368,7 +368,7 @@ public class PsiScopesUtil {
final PsiType upperBound =
PsiClassImplUtil.correctType(((PsiCapturedWildcardType)type).getUpperBound(), methodCall.getResolveScope());
if (upperBound != null) {
processQualifierType(upperBound, processor, manager, methodCall);
processQualifierType(PsiUtil.captureToplevelWildcards(upperBound, methodCall), processor, manager, methodCall);
}
}
else {

View File

@@ -0,0 +1,16 @@
class TableModelBuilder<Self extends TableModelBuilder<?>> {
public Self addColumns() {
return null;
}
public Self addAndGet() {
return null;
}
public void leave() {}
void foo(TableModelBuilder<?> m) {
m.addColumns().addAndGet() .leave();
}
}

View File

@@ -970,4 +970,8 @@ public class GenericsHighlighting8Test extends LightDaemonAnalyzerTestCase {
public void testCapturedWildcardPackageLocalAccess() throws Exception {
doTest();
}
public void testCapturedWildcardPassedThroughMethodCallChain() throws Exception {
doTest();
}
}