mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
SSR: introduce SingleNodeIterator
This commit is contained in:
@@ -38,6 +38,7 @@ import com.intellij.structuralsearch.impl.matcher.*;
|
||||
import com.intellij.structuralsearch.impl.matcher.compiler.PatternCompiler;
|
||||
import com.intellij.structuralsearch.impl.matcher.handlers.MatchingHandler;
|
||||
import com.intellij.structuralsearch.impl.matcher.handlers.TopLevelMatchingHandler;
|
||||
import com.intellij.structuralsearch.impl.matcher.iterators.SingleNodeIterator;
|
||||
import com.intellij.structuralsearch.impl.matcher.iterators.SsrFilteringNodeIterator;
|
||||
import com.intellij.structuralsearch.impl.matcher.strategies.MatchingStrategy;
|
||||
import com.intellij.structuralsearch.plugin.ui.Configuration;
|
||||
@@ -480,7 +481,7 @@ public class Matcher {
|
||||
|
||||
final Language elementLanguage = element.getLanguage();
|
||||
if (strategy.continueMatching(element) && elementLanguage.isKindOf(language)) {
|
||||
visitor.matchContext(new ArrayBackedNodeIterator(new PsiElement[] {element}));
|
||||
visitor.matchContext(new SingleNodeIterator(element));
|
||||
return;
|
||||
}
|
||||
for(PsiElement el=element.getFirstChild();el!=null;el=el.getNextSibling()) {
|
||||
@@ -551,8 +552,7 @@ public class Matcher {
|
||||
|
||||
assert targetNode != null : "Could not match down up when no target node";
|
||||
|
||||
final LanguageFileType fileType = (LanguageFileType)options.getFileType();
|
||||
match(elementToStartMatching, fileType.getLanguage());
|
||||
visitor.matchContext(new SingleNodeIterator(elementToStartMatching));
|
||||
matchContext.getSink().matchingFinished();
|
||||
return sink.getMatches();
|
||||
}
|
||||
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.structuralsearch.impl.matcher.iterators;
|
||||
|
||||
import com.intellij.dupLocator.iterators.NodeIterator;
|
||||
import com.intellij.psi.PsiElement;
|
||||
|
||||
/**
|
||||
* @author Bas Leijdekkers
|
||||
*/
|
||||
public class SingleNodeIterator extends NodeIterator {
|
||||
|
||||
private final PsiElement myNode;
|
||||
private boolean myHasNext = true;
|
||||
|
||||
public SingleNodeIterator(PsiElement node) {
|
||||
myNode = node;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return myHasNext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiElement current() {
|
||||
return myHasNext ? myNode : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void advance() {
|
||||
myHasNext = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rewind() {
|
||||
myHasNext = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
myHasNext = true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user