mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
minor extraction
This commit is contained in:
+1
-1
@@ -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()]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user