下面列出了怎么用com.intellij.psi.ResolveState的API类实例代码及写法,或者点击链接到github查看源代码。
@Nullable
@Override
public PsiElement resolveInner() {
final String referencedName = cmd.getReferencedCommandName();
if (referencedName == null) {
return null;
}
// in dumb mode the current is the only one searched for function definitions
List<BashFunctionDef> functionDefs = cmd.getContainingFile().allFunctionDefinitions();
ResolveState initial = ResolveState.initial();
ResolveProcessor processor = new BashFunctionProcessor(referencedName);
for (BashFunctionDef functionDef : functionDefs) {
processor.execute(functionDef, initial);
}
processor.prepareResults();
return processor.hasResults() ? processor.getBestResult(true, cmd) : null;
}
@Override
public boolean processDeclarations(@Nonnull PsiScopeProcessor processor, @Nonnull ResolveState state, PsiElement lastParent,
@Nonnull PsiElement place)
{
if(lastParent == null || !PsiTreeUtil.isAncestor(this, lastParent, false))
{
return true;
}
for(DotNetVariable dotNetVariable : getVariables())
{
if(!processor.execute(dotNetVariable, state))
{
return false;
}
}
return true;
}
@Override
@RequiredReadAction
public boolean processDeclarations(@Nonnull PsiScopeProcessor processor, @Nonnull ResolveState state, PsiElement lastParent, @Nonnull PsiElement place)
{
DotNetVariable variable = getVariable();
if(!processor.execute(variable, state))
{
return false;
}
DotNetExpression whenExpression = getWhenExpression();
if(whenExpression != null && !whenExpression.processDeclarations(processor, state, lastParent, place))
{
return false;
}
return super.processDeclarations(processor, state, lastParent, place);
}
@Override
public boolean processDeclarations(@NotNull PsiScopeProcessor processor, @NotNull ResolveState state,
@Nullable PsiElement lastParent, @NotNull PsiElement place) {
if (lastParent == null) {
// Do not show declarations of nested variables to outside scopes
return true;
}
for (GLSLStatement statement : getStatements()) {
if (statement == null)
continue;
if (!statement.processDeclarations(processor, state, lastParent, place)) return false;
}
return true;
}
@Override
public boolean processDeclarations(@Nonnull PsiScopeProcessor processor,
@Nonnull ResolveState state,
PsiElement lastParent,
@Nonnull PsiElement place)
{
CSharpLinqVariableImpl variable = getVariable();
if(variable != null)
{
if(!processor.execute(variable, state))
{
return false;
}
}
CSharpLinqIntoClauseImpl intoClause = getIntoClause();
if(intoClause != null)
{
if(!intoClause.processDeclarations(processor, state, lastParent, place))
{
return false;
}
}
return true;
}
@Override
public boolean processDeclarations(@NotNull PsiScopeProcessor processor, @NotNull ResolveState state, @Nullable PsiElement lastParent, @NotNull PsiElement place) {
if (lastParent == null) {
// Do not show declarations of parameters to outside scopes
return true;
}
for (GLSLParameterDeclaration parameter : getParameters()) {
if (parameter == lastParent) // TODO(jp): sloppy, parameter is probably not direct child, so this will fail
continue;
if (!parameter.processDeclarations(processor, state, lastParent, place)) return false;
}
return true;
}
@RequiredReadAction
@Override
public void process(@Nonnull CSharpResolveOptions options,
@Nonnull DotNetGenericExtractor defaultExtractor,
@Nullable PsiElement forceQualifierElement,
@Nonnull Processor<ResolveResult> processor)
{
PsiElement element = options.getElement();
DotNetParameterListOwner parameterListOwner = CSharpReferenceExpressionImplUtil.findParentOrNextIfDoc(element, DotNetParameterListOwner
.class);
if(parameterListOwner == null)
{
return;
}
SimpleNamedScopeProcessor scopeProcessor = new SimpleNamedScopeProcessor(processor, options.isCompletion(),
ExecuteTarget.LOCAL_VARIABLE_OR_PARAMETER_OR_LOCAL_METHOD);
ResolveState state = ResolveState.initial();
state = state.put(CSharpResolveUtil.SELECTOR, options.getSelector());
parameterListOwner.processDeclarations(scopeProcessor, state, null, element);
}
@RequiredReadAction
@Override
public void process(@Nonnull CSharpResolveOptions options,
@Nonnull DotNetGenericExtractor defaultExtractor,
@Nullable PsiElement forceQualifierElement,
@Nonnull Processor<ResolveResult> processor)
{
PsiElement element = options.getElement();
DotNetGenericParameterListOwner genericParameterListOwner = CSharpReferenceExpressionImplUtil.findParentOrNextIfDoc(element,
DotNetGenericParameterListOwner.class);
if(genericParameterListOwner == null)
{
return;
}
SimpleNamedScopeProcessor scopeProcessor = new SimpleNamedScopeProcessor(processor, options.isCompletion(), ExecuteTarget.GENERIC_PARAMETER);
ResolveState state = ResolveState.initial();
state = state.put(CSharpResolveUtil.SELECTOR, options.getSelector());
genericParameterListOwner.processDeclarations(scopeProcessor, state, null, element);
}
@Nullable
@RequiredReadAction
public static DotNetPropertyDeclaration findPropertyByName(@Nonnull final String name, @Nonnull PsiElement owner, @Nullable String parentQName, @Nonnull DotNetGenericExtractor extractor)
{
AsPsiElementProcessor psiElementProcessor = new AsPsiElementProcessor();
MemberResolveScopeProcessor memberResolveScopeProcessor = new MemberResolveScopeProcessor(owner, psiElementProcessor, new ExecuteTarget[]{ExecuteTarget.PROPERTY},
OverrideProcessor.ALWAYS_TRUE);
ResolveState state = ResolveState.initial();
state = state.put(CSharpResolveUtil.EXTRACTOR, extractor);
state = state.put(CSharpResolveUtil.SELECTOR, new MemberByNameSelector(name));
CSharpResolveUtil.walkChildren(memberResolveScopeProcessor, owner, false, true, state);
for(PsiElement element : psiElementProcessor.getElements())
{
if(isMyElement(element, parentQName))
{
return (DotNetPropertyDeclaration) element;
}
}
return null;
}
@Override
public boolean processDeclarations(@Nonnull PsiScopeProcessor processor,
@Nonnull ResolveState state,
PsiElement lastParent,
@Nonnull PsiElement place)
{
if(lastParent == null || !PsiTreeUtil.isAncestor(this, lastParent, false))
{
return true;
}
for(PsiElement psiElement : getChildren())
{
if(!psiElement.processDeclarations(processor, state, lastParent, place))
{
return false;
}
}
return super.processDeclarations(processor, state, lastParent, place);
}
@Override
public boolean processDeclarations(@Nonnull PsiScopeProcessor processor, @Nonnull ResolveState state, PsiElement lastParent,
@Nonnull PsiElement place)
{
if(lastParent == null || !PsiTreeUtil.isAncestor(this, lastParent, false))
{
return true;
}
CSharpLocalVariable variable = getVariable();
if(variable != null)
{
if(!processor.execute(variable, state))
{
return false;
}
}
return true;
}
@Override
public boolean processDeclarations(@Nonnull PsiScopeProcessor processor,
@Nonnull ResolveState state,
PsiElement lastParent,
@Nonnull PsiElement place)
{
if(lastParent == null || !PsiTreeUtil.isAncestor(this, lastParent, false))
{
return true;
}
for(PsiElement psiElement : getChildren())
{
if(!psiElement.processDeclarations(processor, state, lastParent, place))
{
return false;
}
}
return super.processDeclarations(processor, state, lastParent, place);
}
@Override
public boolean processDeclarations(@Nonnull PsiScopeProcessor processor, @Nonnull ResolveState state, PsiElement lastParent, @Nonnull PsiElement place)
{
DotNetExpression leftExpression = getLeftExpression();
if(leftExpression != null && !leftExpression.processDeclarations(processor, state, lastParent, place))
{
return false;
}
DotNetExpression rightExpression = getRightExpression();
if(rightExpression != null && !rightExpression.processDeclarations(processor, state, lastParent, place))
{
return false;
}
return super.processDeclarations(processor, state, lastParent, place);
}
@Override
public boolean processDeclarations(@Nonnull PsiScopeProcessor processor, @Nonnull ResolveState state, PsiElement lastParent, @Nonnull PsiElement
place)
{
if(lastParent == null || !PsiTreeUtil.isAncestor(this, lastParent, false))
{
return true;
}
for(DotNetVariable dotNetVariable : getVariables())
{
if(!processor.execute(dotNetVariable, state))
{
return false;
}
}
return true;
}
@Nullable
@Override
public Collection<GoPackage> resolve(
String importPath,
Project project,
@Nullable Module module,
@Nullable ResolveState resolveState) {
GoPackage goPackage = map.get(importPath);
return goPackage != null ? ImmutableList.of(goPackage) : null;
}
private List<? extends PsiElement> checkByTreeWalk(HaxeReference reference) {
final List<PsiElement> result = new ArrayList<>();
PsiTreeUtil.treeWalkUp(new ResolveScopeProcessor(result, reference.getText()), reference, null, new ResolveState());
if (result.isEmpty()) return null;
LogResolution(reference, "via tree walk.");
return result;
}
public static boolean processContainerDeclarations(BashPsiElement thisElement, @NotNull final PsiScopeProcessor processor, @NotNull final ResolveState state, final PsiElement lastParent, @NotNull final PsiElement place) {
if (thisElement == lastParent) {
return true;
}
if (!processor.execute(thisElement, state)) {
return false;
}
//process the current's elements children from first until lastParent is reached, a definition has to be before the use
List<PsiElement> functions = Lists.newLinkedList();
//fixme use stubs
for (PsiElement child = thisElement.getFirstChild(); child != null && child != lastParent; child = child.getNextSibling()) {
if (child instanceof BashFunctionDef) {
functions.add(child);
} else if (!child.processDeclarations(processor, state, lastParent, place)) {
return false;
}
}
for (PsiElement function : functions) {
if (!function.processDeclarations(processor, state, lastParent, place)) {
return false;
}
}
//fixme this is very slow atm
if (lastParent != null && lastParent.getParent().isEquivalentTo(thisElement) && BashPsiUtils.findNextVarDefFunctionDefScope(place) != null) {
for (PsiElement sibling = lastParent.getNextSibling(); sibling != null; sibling = sibling.getNextSibling()) {
if (!sibling.processDeclarations(processor, state, null, place)) {
return false;
}
}
}
return true;
}
@Override
public boolean processDeclarations(@NotNull PsiScopeProcessor processor, @NotNull ResolveState state, PsiElement lastParent, @NotNull PsiElement place) {
if (!processor.execute(this, state)) {
return false;
}
return BashElementSharedImpl.walkDefinitionScope(this, processor, state, lastParent, place);
}
@Override
public boolean execute(@NotNull PsiElement element, ResolveState state) {
HaxeComponentName componentName = null;
if (element instanceof HaxeNamedComponent) {
componentName = ((HaxeNamedComponent)element).getComponentName();
} else if (element instanceof HaxeOpenParameterList) {
componentName = ((HaxeOpenParameterList)element).getComponentName();
}
if (componentName != null && name.equals(componentName.getText())) {
result.add(componentName);
return false;
}
return true;
}
@Override
public boolean processDeclarations(@Nonnull PsiScopeProcessor processor, @Nonnull ResolveState state, PsiElement lastParent,
@Nonnull PsiElement place)
{
CSharpLinqVariableImpl variable = getVariable();
if(variable != null)
{
if(!processor.execute(variable, state))
{
return false;
}
}
return true;
}
@Override
public boolean processDeclarations(@Nonnull PsiScopeProcessor processor, @Nonnull ResolveState state, PsiElement lastParent, @Nonnull PsiElement place)
{
for(CSharpLambdaParameter parameter : getParameters())
{
if(!processor.execute(parameter, state))
{
return false;
}
}
return true;
}
@Override
public boolean execute(@NotNull PsiElement element, ResolveState state) {
boolean elementIsGoodCandidate = !element.equals(myElement) && element instanceof XQueryVarName &&
!(element.getParent() instanceof XQueryVarRef);
if (elementIsGoodCandidate) {
XQueryQName<XQueryVarName> source = aXQueryQName(myElement.getVarName()).build();
XQueryQName<XQueryVarName> checkedQName = aXQueryQName((XQueryVarName) element).build();
if (source.equals(checkedQName)) {
result = checkedQName.getNamedObject();
return false;
}
}
return true;
}
public boolean execute(@NotNull PsiElement element, @NotNull ResolveState resolveState) {
ProgressManager.checkCanceled();
if (element instanceof BashFunctionDef) {
BashFunctionDef funcDef = (BashFunctionDef) element;
if (symboleName.equals(funcDef.getName())) {
storeResult(element, BashPsiUtils.blockNestingLevel(funcDef), null);
return ignoreExecuteResult;
}
}
return true;
}
@Override
public boolean processDeclarations(@NotNull PsiScopeProcessor processor, @NotNull ResolveState state,
PsiElement lastParent, @NotNull PsiElement place) {
if (!processor.execute(this, state)) {
return false;
} else {
return ResolveUtil.processChildren(this, processor, state, lastParent, place);
}
}
public static boolean walkInjection(PsiElement host, @NotNull PsiScopeProcessor processor, @NotNull ResolveState state, PsiElement lastParent, @NotNull PsiElement place, boolean walkOn) {
//fixme does this work on the escaped or unescpaed text?
InjectedLanguageManager injectedLanguageManager = InjectedLanguageManager.getInstance(host.getProject());
List<Pair<PsiElement, TextRange>> injectedPsiFiles = injectedLanguageManager.getInjectedPsiFiles(host);
if (injectedPsiFiles != null) {
for (Pair<PsiElement, TextRange> psi_range : injectedPsiFiles) {
//fixme check lastParent ?
walkOn &= psi_range.first.processDeclarations(processor, state, lastParent, place);
}
}
return walkOn;
}
@Override
public boolean processDeclarations(@NotNull PsiScopeProcessor processor,
@NotNull ResolveState state,
PsiElement lastParent,
@NotNull PsiElement place) {
for (PsiElement element : getDeclarationElementToProcess(lastParent)) {
if (!processor.execute(element, state)) {
return false;
}
}
return super.processDeclarations(processor, state, lastParent, place);
}
private int addCollectedVariables(PsiElement element, CompletionResultSet result, BashVarCollectorProcessor processor) {
PsiTreeUtil.treeWalkUp(processor, element, BashPsiUtils.findFileContext(element), ResolveState.initial());
Collection<LookupElement> items = CompletionProviderUtils.createFromPsiItems(processor.getVariables(), BashIcons.VAR_ICON, CompletionGrouping.NormalVar.ordinal());
result.addAllElements(items);
return items.size();
}
/**
* Checks that the file tree walking visits every element only once.
*
* @param processor
* @throws Exception
*/
protected void checkTreeWalking(BashAbstractProcessor processor) throws Exception {
PsiFile file = configure().getElement().getContainingFile();
file.processDeclarations(processor, ResolveState.initial(), null, file);
assertSingleVisitedElements(file);
}
@Override
public boolean execute(@NotNull PsiElement element, @NotNull ResolveState state) {
//executeCount[0]++;
if (countKey.isIn(element)) {
countKey.set(element, countKey.get(element) + 1);
} else {
countKey.set(element, 1);
}
return true;
}
@Override
public boolean processDeclarations(@NotNull PsiScopeProcessor processor, @NotNull ResolveState state, @Nullable PsiElement lastParent, @NotNull PsiElement place) {
if (lastParent == null) {
return true;
}
PsiElement child = lastParent.getPrevSibling();
while (child != null) {
if (!child.processDeclarations(processor, state, lastParent, place)) return false;
child = child.getPrevSibling();
}
return true;
}