package com.jetbrains.lang.dart.resolve; import com.intellij.psi.PsiElement; import com.jetbrains.lang.dart.DartComponentType; import com.jetbrains.lang.dart.psi.DartComponent; import com.jetbrains.lang.dart.psi.DartComponentName; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; public class DartResolveProcessor extends DartPsiScopeProcessor { private final List<DartComponentName> myResult; private final String myName; private final boolean myLValue; public DartResolveProcessor(List<DartComponentName> result, @NotNull String name) { this(result, name, false); } public DartResolveProcessor(List<DartComponentName> result, @NotNull String name, boolean lookForLValue) { this.myResult = result; this.myName = name; this.myLValue = lookForLValue; } @Override protected boolean doExecute(final @NotNull DartComponentName componentName) { final PsiElement parentElement = componentName.getParent(); if (parentElement instanceof DartComponent) { final DartComponent dartComponent = (DartComponent)parentElement; // try set getter or get setter if (myLValue && dartComponent.isGetter()) return true; if (!myLValue && dartComponent.isSetter()) return true; } if (this.myName.equals(componentName.getName()) && !isMember(DartComponentType.typeOf(parentElement))) { myResult.add(componentName); return false; } return true; } private static boolean isMember(final @Nullable DartComponentType componentType) { return componentType == DartComponentType.CONSTRUCTOR || componentType == DartComponentType.FIELD || componentType == DartComponentType.METHOD; } }