Use lazy analysis in JetNameValidatorImpl
This commit is contained in:
@@ -21,8 +21,8 @@ import com.intellij.psi.PsiElement;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
|
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetElement;
|
||||||
import org.jetbrains.jet.lang.psi.JetExpression;
|
import org.jetbrains.jet.lang.psi.JetExpression;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
|
||||||
import org.jetbrains.jet.lang.psi.JetVisitorVoid;
|
import org.jetbrains.jet.lang.psi.JetVisitorVoid;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.plugin.codeInsight.TipsManager;
|
import org.jetbrains.jet.plugin.codeInsight.TipsManager;
|
||||||
@@ -33,12 +33,17 @@ import java.util.Collection;
|
|||||||
public class JetNameValidatorImpl extends JetNameValidator {
|
public class JetNameValidatorImpl extends JetNameValidator {
|
||||||
private final PsiElement myContainer;
|
private final PsiElement myContainer;
|
||||||
private final PsiElement myAnchor;
|
private final PsiElement myAnchor;
|
||||||
private BindingContext myBindingContext;
|
private final boolean myOnlyVariables;
|
||||||
|
|
||||||
public JetNameValidatorImpl(PsiElement container, PsiElement anchor) {
|
public JetNameValidatorImpl(PsiElement container, PsiElement anchor, boolean onlyVariables) {
|
||||||
super(container.getProject());
|
super(container.getProject());
|
||||||
myContainer = container;
|
myContainer = container;
|
||||||
myAnchor = anchor;
|
myAnchor = anchor;
|
||||||
|
myOnlyVariables = onlyVariables;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JetNameValidatorImpl(PsiElement container, PsiElement anchor) {
|
||||||
|
this(container, anchor, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -63,9 +68,10 @@ public class JetNameValidatorImpl extends JetNameValidator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean checkElement(final String name, PsiElement sibling) {
|
private boolean checkElement(final String name, PsiElement sibling) {
|
||||||
if (myBindingContext == null) {
|
if (!(sibling instanceof JetElement)) return true;
|
||||||
myBindingContext = AnalyzerFacadeWithCache.analyzeFileWithCache((JetFile) myContainer.getContainingFile()).getBindingContext();
|
|
||||||
}
|
final BindingContext bindingContext = AnalyzerFacadeWithCache.getContextForElement((JetElement) sibling);
|
||||||
|
|
||||||
final Ref<Boolean> result = new Ref<Boolean>(true);
|
final Ref<Boolean> result = new Ref<Boolean>(true);
|
||||||
JetVisitorVoid visitor = new JetVisitorVoid() {
|
JetVisitorVoid visitor = new JetVisitorVoid() {
|
||||||
@Override
|
@Override
|
||||||
@@ -77,10 +83,9 @@ public class JetNameValidatorImpl extends JetNameValidator {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitExpression(@NotNull JetExpression expression) {
|
public void visitExpression(@NotNull JetExpression expression) {
|
||||||
Collection<DeclarationDescriptor> variants =
|
Collection<DeclarationDescriptor> variants = TipsManager.getVariantsNoReceiver(expression, bindingContext);
|
||||||
TipsManager.getVariantsNoReceiver(expression, myBindingContext);
|
|
||||||
for (DeclarationDescriptor variant : variants) {
|
for (DeclarationDescriptor variant : variants) {
|
||||||
if (variant.getName().asString().equals(name) && variant instanceof VariableDescriptor) {
|
if (variant.getName().asString().equals(name) && (!myOnlyVariables || variant instanceof VariableDescriptor)) {
|
||||||
result.set(false);
|
result.set(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user