PY-61639 Introduced PyAstElementVisitor

GitOrigin-RevId: 6ee69922a4ade172dba5abb3ea3b13d01c2b0ebc
This commit is contained in:
Petr Golubev
2024-01-19 18:10:09 +01:00
committed by intellij-monorepo-bot
parent 7668d7231b
commit 223013dad1
90 changed files with 824 additions and 4 deletions

View File

@@ -12,6 +12,7 @@ import com.intellij.psi.stubs.StubElement;
import com.intellij.psi.templateLanguages.OuterLanguageElement;
import com.jetbrains.python.PythonFileType;
import com.jetbrains.python.PythonLanguage;
import com.jetbrains.python.ast.PyAstElementVisitor;
import com.jetbrains.python.codeInsight.typing.PyTypingTypeProvider;
import com.jetbrains.python.psi.*;
import com.jetbrains.python.psi.resolve.PyResolveContext;
@@ -53,8 +54,11 @@ public class PyBaseElementImpl<T extends StubElement> extends StubBasedPsiElemen
@Override
public void accept(@NotNull PsiElementVisitor visitor) {
PyUtil.verboseOnly(() -> PyPsiUtils.assertValid(this));
if (visitor instanceof PyElementVisitor) {
acceptPyVisitor(((PyElementVisitor)visitor));
if (visitor instanceof PyElementVisitor pyVisitor) {
acceptPyVisitor(pyVisitor);
}
else if (visitor instanceof PyAstElementVisitor pyVisitor) {
acceptPyVisitor(pyVisitor);
}
else {
super.accept(visitor);

View File

@@ -27,6 +27,7 @@ import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.python.PyNames;
import com.jetbrains.python.PythonFileType;
import com.jetbrains.python.PythonLanguage;
import com.jetbrains.python.ast.PyAstElementVisitor;
import com.jetbrains.python.ast.PyAstFunction;
import com.jetbrains.python.codeInsight.controlflow.ControlFlowCache;
import com.jetbrains.python.codeInsight.imports.AddImportHelper;
@@ -275,8 +276,11 @@ public class PyFileImpl extends PsiFileBase implements PyFile, PyExpression {
@Override
public void accept(@NotNull PsiElementVisitor visitor) {
if (isAcceptedFor(visitor.getClass())) {
if (visitor instanceof PyElementVisitor) {
((PyElementVisitor)visitor).visitPyFile(this);
if (visitor instanceof PyElementVisitor pyVisitor) {
pyVisitor.visitPyFile(this);
}
else if (visitor instanceof PyAstElementVisitor pyVisitor) {
pyVisitor.visitPyFile(this);
}
else {
super.accept(visitor);