IDEA-67951 Suggest comparator type in Collections.sort()

This commit is contained in:
peter
2011-04-14 19:26:49 +02:00
parent 94aa1230cd
commit a70cf1c7ed
4 changed files with 43 additions and 5 deletions
@@ -302,17 +302,19 @@ public class CodeInsightUtil {
return ApplicationManager.getApplication().runReadAction(new Computable<Boolean>() {
public Boolean compute() {
if (!context.isValid() || !inheritor.isValid() || !facade.getResolveHelper().isAccessible(inheritor, context, null)) return true;
if (!context.isValid() || !inheritor.isValid() || !facade.getResolveHelper().isAccessible(inheritor, context, null))
return true;
if(inheritor.getQualifiedName() == null && !manager.areElementsEquivalent(inheritor.getContainingFile(), context.getContainingFile().getOriginalFile())){
if (inheritor.getQualifiedName() == null &&
!manager.areElementsEquivalent(inheritor.getContainingFile(), context.getContainingFile().getOriginalFile())) {
return true;
}
if (JavaCompletionUtil.isInExcludedPackage(inheritor)) return true;
PsiSubstitutor superSubstitutor = TypeConversionUtil.getClassSubstitutor(baseClass, inheritor, PsiSubstitutor.EMPTY);
if(superSubstitutor == null) return true;
if(getRawSubtypes){
if (superSubstitutor == null) return true;
if (getRawSubtypes) {
result.add(createType(inheritor, facade.getElementFactory().createRawSubstitutor(inheritor), arrayDim));
return true;
}
@@ -322,7 +324,10 @@ public class CodeInsightUtil {
for (PsiTypeParameter baseParameter : PsiUtil.typeParametersIterable(baseClass)) {
final PsiType substituted = superSubstitutor.substitute(baseParameter);
PsiType arg = baseSubstitutor.substitute(baseParameter);
if (arg instanceof PsiWildcardType) arg = ((PsiWildcardType)arg).getExtendsBound();
if (arg instanceof PsiWildcardType) {
PsiType bound = ((PsiWildcardType)arg).getBound();
arg = bound != null ? bound : ((PsiWildcardType)arg).getExtendsBound();
}
PsiType substitution = resolveHelper.getSubstitutionForTypeParameter(inheritorParameter,
substituted,
arg,
@@ -0,0 +1,16 @@
import java.util.Comparator;
import java.util.List;
import java.util.Collections;
public class Foo {
private List<String> myList;
private void sort() {
Collections.sort(myList, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
<selection>return 0; //To change body of implemented methods use File | Settings | File Templates.</selection>
}
});
}
}
@@ -0,0 +1,10 @@
import java.util.List;
import java.util.Collections;
public class Foo {
private List<String> myList;
private void sort() {
Collections.sort(myList, new Comparator<caret>);
}
}
@@ -11,6 +11,7 @@ import com.intellij.codeInsight.template.TemplateContextType;
import com.intellij.codeInsight.template.TemplateManager;
import com.intellij.codeInsight.template.impl.TemplateImpl;
import com.intellij.codeInsight.template.impl.TemplateSettings;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.util.Condition;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
@@ -984,6 +985,12 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase {
assertStringItems("Bar", "Goo");
}
public void testNoWrongSubstitutorFromStats() throws Throwable {
doTest();
FileDocumentManager.getInstance().saveDocument(myFixture.getEditor().getDocument());
doTest(); // stats are changed now
}
public void testCommonPrefixWithSelection() throws Throwable {
doItemTest();
}