minor extraction

This commit is contained in:
peter.gromov
2010-11-17 17:32:43 +03:00
parent 683482bddc
commit 6d80b33502
3 changed files with 37 additions and 32 deletions
@@ -455,7 +455,7 @@ public class JavaCompletionContributor extends CompletionContributor {
if (parent instanceof PsiReferenceExpression && ((PsiReferenceExpression)parent).getQualifier() != null) return false;
if (parent instanceof PsiReferenceExpression && parent.getParent() instanceof PsiReferenceExpression) return true;
return new ExpectedTypesGetter().get(element, null).length > 0;
return ExpectedTypesGetter.getExpectedTypes(element, false).length > 0;
}
private static boolean shouldSuggestClassNameCompletion(final PsiElement element) {
@@ -33,10 +33,10 @@ import com.intellij.util.Consumer;
import com.intellij.util.ProcessingContext;
import com.intellij.util.Processor;
import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
@@ -51,40 +51,45 @@ public class JavaInheritorsGetter extends CompletionProvider<CompletionParameter
}
public void addCompletions(@NotNull final CompletionParameters parameters, final ProcessingContext matchingContext, @NotNull final CompletionResultSet result) {
final PsiElement identifierCopy = parameters.getPosition();
final ExpectedTypeInfo[] infos = JavaSmartCompletionContributor.getExpectedTypes(parameters);
addArrayTypes(result, parameters.getPosition(), infos);
final List<ExpectedTypeInfo> infoCollection = Arrays.asList(infos);
processInheritors(parameters, extractClassTypes(infos), result.getPrefixMatcher(), new Consumer<PsiType>() {
public void consume(final PsiType type) {
addExpectedType(result, type, parameters, infoCollection);
}
});
}
private static void addArrayTypes(CompletionResultSet result,
PsiElement identifierCopy,
ExpectedTypeInfo[] infos) {
for (final PsiType type : ExpectedTypesGetter.extractTypes(infos, true)) {
if (type instanceof PsiArrayType) {
final LookupItem item = PsiTypeLookupItem.createLookupItem(JavaCompletionUtil.eliminateWildcards(type), identifierCopy);
if (item.getObject() instanceof PsiClass) {
JavaCompletionUtil.setShowFQN(item);
}
item.setInsertHandler(new DefaultInsertHandler()); //braces & shortening
result.addElement(JavaSmartCompletionContributor.decorate(item, Arrays.asList(infos)));
}
}
}
public static List<PsiClassType> extractClassTypes(ExpectedTypeInfo[] infos) {
final List<PsiClassType> expectedClassTypes = new SmartList<PsiClassType>();
final List<PsiArrayType> expectedArrayTypes = new SmartList<PsiArrayType>();
final List<ExpectedTypeInfo> infos = new SmartList<ExpectedTypeInfo>();
ContainerUtil.addAll(infos, JavaSmartCompletionContributor.getExpectedTypes(parameters));
for (PsiType type : ExpectedTypesGetter.getExpectedTypes(identifierCopy, true)) {
for (PsiType type : ExpectedTypesGetter.extractTypes(infos, true)) {
if (type instanceof PsiClassType) {
final PsiClassType classType = (PsiClassType)type;
if (classType.resolve() != null) {
expectedClassTypes.add(classType);
}
}
else if (type instanceof PsiArrayType) {
expectedArrayTypes.add((PsiArrayType)type);
}
}
for (final PsiArrayType type : expectedArrayTypes) {
final LookupItem item = PsiTypeLookupItem.createLookupItem(JavaCompletionUtil.eliminateWildcards(type), identifierCopy);
if (item.getObject() instanceof PsiClass) {
JavaCompletionUtil.setShowFQN(item);
}
item.setInsertHandler(new DefaultInsertHandler()); //braces & shortening
result.addElement(JavaSmartCompletionContributor.decorate(item, infos));
}
processInheritors(parameters, expectedClassTypes, result.getPrefixMatcher(), new Consumer<PsiType>() {
public void consume(final PsiType type) {
addExpectedType(result, type, parameters, infos);
}
});
return expectedClassTypes;
}
private void addExpectedType(final CompletionResultSet result, final PsiType type, final CompletionParameters parameters, Collection<ExpectedTypeInfo> infos) {
@@ -151,8 +156,8 @@ public class JavaInheritorsGetter extends CompletionProvider<CompletionParameter
final THashSet<PsiType> statVariants = new THashSet<PsiType>();
final Processor<PsiClass> processor = CodeInsightUtil.createInheritorsProcessor(parameters.getPosition(), type, 0, false,
statVariants, baseClass, baseSubstitutor);
final StatisticsInfo[] statisticsInfos = StatisticsManager.getInstance().getAllValues(JavaStatisticsManager.getAfterNewKey(type));
for (final StatisticsInfo statisticsInfo : statisticsInfos) {
final StatisticsInfo[] stats = StatisticsManager.getInstance().getAllValues(JavaStatisticsManager.getAfterNewKey(type));
for (final StatisticsInfo statisticsInfo : stats) {
final String value = statisticsInfo.getValue();
if (value.startsWith(JavaStatisticsManager.CLASS_PREFIX)) {
final String qname = value.substring(JavaStatisticsManager.CLASS_PREFIX.length());
@@ -43,12 +43,13 @@ public class ExpectedTypesGetter implements ContextGetter{
}
public static PsiType[] getExpectedTypes(final PsiElement context, boolean defaultTypes) {
ExpectedTypesProvider typesProvider = ExpectedTypesProvider.getInstance(context.getProject());
PsiExpression expression = PsiTreeUtil.getContextOfType(context, PsiExpression.class, true);
if(expression == null) return PsiType.EMPTY_ARRAY;
ExpectedTypeInfo[] infos = typesProvider.getExpectedTypes(expression, true);
return extractTypes(ExpectedTypesProvider.getExpectedTypes(expression, true), defaultTypes);
}
public static PsiType[] extractTypes(ExpectedTypeInfo[] infos, boolean defaultTypes) {
Set<PsiType> result = new THashSet<PsiType>(infos.length);
for (ExpectedTypeInfo info : infos) {
final PsiType type = info.getType();
@@ -60,5 +61,4 @@ public class ExpectedTypesGetter implements ContextGetter{
}
return result.toArray(new PsiType[result.size()]);
}
}