mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
less read actions
This commit is contained in:
+2
-14
@@ -15,13 +15,11 @@
|
||||
*/
|
||||
package com.intellij.codeInsight.completion;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
import com.intellij.codeInsight.ExpectedTypeInfo;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiLiteralExpression;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -31,21 +29,11 @@ import java.util.Collection;
|
||||
*/
|
||||
public abstract class ExpectedTypeBasedCompletionProvider extends CompletionProvider<CompletionParameters> {
|
||||
|
||||
public ExpectedTypeBasedCompletionProvider() {
|
||||
super(false);
|
||||
}
|
||||
|
||||
public void addCompletions(@NotNull final CompletionParameters params, final ProcessingContext matchingContext, @NotNull final CompletionResultSet result) {
|
||||
final PsiElement position = params.getPosition();
|
||||
if (position.getParent() instanceof PsiLiteralExpression) return;
|
||||
|
||||
final THashSet<ExpectedTypeInfo> infos = new THashSet<ExpectedTypeInfo>();
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
public void run() {
|
||||
ContainerUtil.addAll(infos, JavaSmartCompletionContributor.getExpectedTypes(params));
|
||||
}
|
||||
});
|
||||
addCompletions(params, result, infos);
|
||||
addCompletions(params, result, Sets.newHashSet(JavaSmartCompletionContributor.getExpectedTypes(params)));
|
||||
}
|
||||
|
||||
protected abstract void addCompletions(CompletionParameters params, CompletionResultSet result, Collection<ExpectedTypeInfo> infos);
|
||||
|
||||
+1
-1
@@ -97,7 +97,7 @@ public class JavaClassNameCompletionContributor extends CompletionContributor {
|
||||
};
|
||||
|
||||
public JavaClassNameCompletionContributor() {
|
||||
extend(CompletionType.CLASS_NAME, psiElement(), new CompletionProvider<CompletionParameters>(false) {
|
||||
extend(CompletionType.CLASS_NAME, psiElement(), new CompletionProvider<CompletionParameters>() {
|
||||
public void addCompletions(@NotNull final CompletionParameters parameters, final ProcessingContext matchingContext, @NotNull final CompletionResultSet result) {
|
||||
if (shouldShowSecondSmartCompletionHint(parameters) &&
|
||||
CompletionUtil.shouldShowFeature(parameters, CodeCompletionFeatures.SECOND_CLASS_NAME_COMPLETION)) {
|
||||
|
||||
+1
-2
@@ -66,8 +66,7 @@ public class JavaDocCompletionContributor extends CompletionContributor {
|
||||
public JavaDocCompletionContributor() {
|
||||
extend(CompletionType.BASIC, PsiJavaPatterns.psiElement(PsiDocToken.DOC_TAG_NAME), new TagChooser());
|
||||
|
||||
extend(CompletionType.BASIC, PsiJavaPatterns.psiElement().inside(PsiDocTagValue.class), new CompletionProvider<CompletionParameters>(
|
||||
true) {
|
||||
extend(CompletionType.BASIC, PsiJavaPatterns.psiElement().inside(PsiDocTagValue.class), new CompletionProvider<CompletionParameters>() {
|
||||
protected void addCompletions(@NotNull final CompletionParameters parameters, final ProcessingContext context, @NotNull final CompletionResultSet result) {
|
||||
final PsiElement position = parameters.getPosition();
|
||||
boolean isArg = PsiJavaPatterns.psiElement().afterLeaf("(").accepts(position);
|
||||
|
||||
+1
-1
@@ -120,7 +120,7 @@ public class JavaSmartCompletionContributor extends CompletionContributor {
|
||||
psiElement(PsiReferenceExpression.class).withParent(
|
||||
psiElement(PsiExpressionList.class).withParent(PsiMethodCallExpression.class))), new SameSignatureCallParametersProvider());
|
||||
|
||||
extend(CompletionType.SMART, psiElement().afterLeaf(PsiKeyword.INSTANCEOF), new CompletionProvider<CompletionParameters>(false) {
|
||||
extend(CompletionType.SMART, psiElement().afterLeaf(PsiKeyword.INSTANCEOF), new CompletionProvider<CompletionParameters>() {
|
||||
protected void addCompletions(@NotNull final CompletionParameters parameters, final ProcessingContext context, @NotNull final CompletionResultSet result) {
|
||||
final PsiElement position = parameters.getPosition();
|
||||
final PsiType[] leftTypes = InstanceOfLeftPartTypeGetter.getLeftTypes(position);
|
||||
|
||||
@@ -21,9 +21,7 @@ import com.intellij.codeInsight.completion.CompletionResultSet;
|
||||
import com.intellij.codeInsight.completion.JavaSmartCompletionParameters;
|
||||
import com.intellij.codeInsight.completion.PrefixMatcher;
|
||||
import com.intellij.codeInsight.lookup.AutoCompletionPolicy;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
@@ -36,10 +34,6 @@ import org.jetbrains.annotations.Nullable;
|
||||
public class ClassLiteralGetter extends CompletionProvider<JavaSmartCompletionParameters> {
|
||||
private static final Logger LOG = Logger.getInstance("com.intellij.psi.filters.getters.ClassLiteralGetter");
|
||||
|
||||
public ClassLiteralGetter() {
|
||||
super(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addCompletions(@NotNull final JavaSmartCompletionParameters parameters,
|
||||
ProcessingContext context,
|
||||
@@ -52,12 +46,7 @@ public class ClassLiteralGetter extends CompletionProvider<JavaSmartCompletionPa
|
||||
}
|
||||
};
|
||||
|
||||
PsiType classParameter = ApplicationManager.getApplication().runReadAction(new Computable<PsiType>() {
|
||||
@Nullable
|
||||
public PsiType compute() {
|
||||
return PsiUtil.substituteTypeParameter(parameters.getExpectedType(), CommonClassNames.JAVA_LANG_CLASS, 0, false);
|
||||
}
|
||||
});
|
||||
PsiType classParameter = PsiUtil.substituteTypeParameter(parameters.getExpectedType(), CommonClassNames.JAVA_LANG_CLASS, 0, false);
|
||||
|
||||
boolean addInheritors = false;
|
||||
if (classParameter instanceof PsiWildcardType) {
|
||||
@@ -80,11 +69,7 @@ public class ClassLiteralGetter extends CompletionProvider<JavaSmartCompletionPa
|
||||
Condition<String> shortNameCondition,
|
||||
final PsiType classParameter,
|
||||
CompletionResultSet result) {
|
||||
final String canonicalText = ApplicationManager.getApplication().runReadAction(new Computable<String>() {
|
||||
public String compute() {
|
||||
return classParameter.getCanonicalText();
|
||||
}
|
||||
});
|
||||
final String canonicalText = classParameter.getCanonicalText();
|
||||
if (CommonClassNames.JAVA_LANG_OBJECT.equals(canonicalText) && StringUtil.isEmpty(result.getPrefixMatcher().getPrefix())) {
|
||||
return;
|
||||
}
|
||||
@@ -95,22 +80,16 @@ public class ClassLiteralGetter extends CompletionProvider<JavaSmartCompletionPa
|
||||
}
|
||||
|
||||
private static void addClassLiteralLookupElement(@Nullable final PsiType type, final CompletionResultSet resultSet, final PsiElement context) {
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
public void run() {
|
||||
if (type instanceof PsiClassType &&
|
||||
type.isValid() &&
|
||||
PsiUtil.resolveClassInType(type) != null &&
|
||||
!((PsiClassType)type).hasParameters() &&
|
||||
!(((PsiClassType)type).resolve() instanceof PsiTypeParameter)) {
|
||||
try {
|
||||
resultSet.addElement(AutoCompletionPolicy.NEVER_AUTOCOMPLETE.applyPolicy(new ClassLiteralLookupElement((PsiClassType)type, context)));
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
}
|
||||
if (type instanceof PsiClassType &&
|
||||
PsiUtil.resolveClassInType(type) != null &&
|
||||
!((PsiClassType)type).hasParameters() &&
|
||||
!(((PsiClassType)type).resolve() instanceof PsiTypeParameter)) {
|
||||
try {
|
||||
resultSet.addElement(AutoCompletionPolicy.NEVER_AUTOCOMPLETE.applyPolicy(new ClassLiteralLookupElement((PsiClassType)type, context)));
|
||||
}
|
||||
});
|
||||
|
||||
catch (IncorrectOperationException e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,34 +16,23 @@
|
||||
package com.intellij.codeInsight.completion;
|
||||
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public abstract class CompletionProvider<V extends CompletionParameters> {
|
||||
private final boolean myStartInReadAction;
|
||||
|
||||
protected CompletionProvider() {
|
||||
this(true);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
protected CompletionProvider(final boolean startInReadAction) {
|
||||
myStartInReadAction = startInReadAction;
|
||||
}
|
||||
|
||||
protected abstract void addCompletions(@NotNull V parameters, final ProcessingContext context, @NotNull CompletionResultSet result);
|
||||
|
||||
public final void addCompletionVariants(@NotNull final V parameters, final ProcessingContext context, @NotNull final CompletionResultSet result) {
|
||||
if (myStartInReadAction) {
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
public void run() {
|
||||
addCompletions(parameters, context, result);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
addCompletions(parameters, context, result);
|
||||
}
|
||||
addCompletions(parameters, context, result);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -77,7 +77,7 @@ public class FilePathCompletionContributor extends CompletionContributor {
|
||||
}
|
||||
});
|
||||
|
||||
extend(CompletionType.CLASS_NAME, psiElement(), new CompletionProvider<CompletionParameters>(false) {
|
||||
extend(CompletionType.CLASS_NAME, psiElement(), new CompletionProvider<CompletionParameters>() {
|
||||
@Override
|
||||
protected void addCompletions(@NotNull final CompletionParameters parameters,
|
||||
ProcessingContext context,
|
||||
|
||||
@@ -83,7 +83,7 @@ public class XmlCompletionContributor extends CompletionContributor {
|
||||
public XmlCompletionContributor() {
|
||||
extend(CompletionType.BASIC,
|
||||
XmlPatterns.psiElement().inside(XmlPatterns.xmlAttributeValue()),
|
||||
new CompletionProvider<CompletionParameters>(false) {
|
||||
new CompletionProvider<CompletionParameters>() {
|
||||
@Override
|
||||
protected void addCompletions(@NotNull CompletionParameters parameters,
|
||||
ProcessingContext context,
|
||||
|
||||
Reference in New Issue
Block a user