in CFML/src/com/intellij/coldFusion/model/psi/CfmlVariantsProcessor.java [75:181]
public boolean execute(final @NotNull PsiElement element, final @NotNull ResolveState state) {
// continue if not a definition
if (!(element instanceof PsiNamedElement)) {
return true;
}
// continue if has no name
if (StringUtil.isEmpty(((PsiNamedElement)element).getName())) {
return true;
}
String elementName = ((PsiNamedElement)element).getName();
PsiElement namedElement = element instanceof CfmlNamedAttributeImpl ? element.getParent() : element;
// if declared after using
/*
if (myElement.getContainingFile() == element.getContainingFile()) {
if (myElement.getTextRange().getStartOffset() < element.getTextRange().getStartOffset()) {
return true;
}
}
*/
if (!CfmlScopesInfo.isConvenient(namedElement, myScope)) {
return true;
}
// continue if a field or a class
if (namedElement instanceof PsiClass) {
return true;
}
// continue if element is hidden (has private modifier, package_local or protected) (?)
if (namedElement instanceof PsiModifierListOwner owner) {
if (owner.hasModifierProperty(PRIVATE) || owner.hasModifierProperty(PACKAGE_LOCAL) || owner.hasModifierProperty(PROTECTED)) {
return true;
}
}
boolean isJavaMethodCall = namedElement instanceof PsiMethod;
if (isJavaMethodCall) {
final PsiMethod method = (PsiMethod)namedElement;
if (method.isConstructor()) {
final PsiClass methodClass = method.getContainingClass();
if (methodClass == null) {
return true;
}
if (myStaticScopeFlag &&
(methodClass.equals(myInitialClass) || !myWasConstructorFound) &&
(myIsForCompletion || "init".equals(myReferenceName))) {
myWasConstructorFound = true;
if (!methodClass.equals(myInitialClass) && !myIsForCompletion) {
addIfNotNull(myResult, execute(myInitialClass, false));
}
else {
addIfNotNull(myResult, execute(method, myMethods.getResolveError() == JavaMethodResolveHelper.ErrorType.RESOLVE));
}
return true;
}
}
}
if (namedElement instanceof PsiModifierListOwner owner && myStaticScopeFlag && !owner.hasModifierProperty(STATIC)) {
return true;
}
boolean isMyMethodCall = namedElement instanceof CfmlFunction;
// continue if names differ
if (!myIsForCompletion) {
final String referenceNameLoweCase = StringUtil.toLowerCase(myReferenceName);
if (myIsMethodCall &&
(referenceNameLoweCase.startsWith("get") || referenceNameLoweCase.startsWith("set")) &&
referenceNameLoweCase.substring(3).equalsIgnoreCase(elementName)
) {
if (!referenceNameLoweCase.startsWith("get") || methodCallArity() == 0) {
addIfNotNull(myResult, execute((PsiNamedElement)element, false));
}
return myResult.isEmpty();
}
if (!referenceNameLoweCase.equalsIgnoreCase(elementName)) {
return true;
}
}
// continue if not the same type as parent
if (!myIsForCompletion && (isJavaMethodCall || isMyMethodCall) != myIsMethodCall) {
return true;
}
if (isJavaMethodCall) {
myMethods.addMethod((PsiMethod)namedElement, state.get(PsiSubstitutor.KEY), false);
return true;
}
T execute = execute((PsiNamedElement)element, false);
if (execute != null) {
addIfNotNull(myResult, execute);
if (myIsForCompletion || myResult.isEmpty()) {
return true;
} else if (namedElement instanceof CfmlVariable) {
return !((CfmlVariable)namedElement).isTrulyDeclaration();
}
return false;
}
return true;
}