in tapestry/src/main/java/com/intellij/tapestry/psi/TelVariantsProcessor.java [56:112]
public boolean execute(@NotNull final PsiElement element, @NotNull final ResolveState state) {
if (!(element instanceof PsiNamedElement)) return true;
final PsiNamedElement namedElement = (PsiNamedElement)element;
if (StringUtil.isEmpty(namedElement.getName())) return true;
if (namedElement instanceof PsiClass) {
return true;
}
final boolean isMethod = namedElement instanceof PsiMethod;
final boolean isField = namedElement instanceof PsiField;
if (isMethod) {
final PsiMethod method = (PsiMethod)namedElement;
if (!method.hasModifierProperty(PUBLIC) ||
method.isConstructor() ||
!myAllowStatic && method.hasModifierProperty(STATIC) ||
INSECURE_OBJECT_METHODS.contains(method.getName())) {
return true;
}
if (!myMethodCall &&
myPropertyAccessors != null &&
PropertyUtilBase.isSimplePropertyGetter(method) &&
(myReferenceName == null || myReferenceName.equalsIgnoreCase(PropertyUtilBase.getPropertyName(method)))) {
myPropertyAccessors.addMethod(method, state.get(PsiSubstitutor.KEY), false);
}
if (myForCompletion || myMethodCall && myReferenceName.equalsIgnoreCase(namedElement.getName())) {
if (myMethods != null) myMethods.addMethod((PsiMethod)namedElement, state.get(PsiSubstitutor.KEY), false);
}
}
else if (isField) {
final PsiField field = (PsiField)namedElement;
final PsiModifierList modifierList = field.getModifierList();
if (!field.hasModifierProperty(PRIVATE) || modifierList == null || field.hasModifierProperty(STATIC)) return true;
String propertyAnnotation = null;
for (PsiAnnotation psiAnnotation : modifierList.getAnnotations()) {
if (TapestryConstants.PROPERTY_ANNOTATION.equals(psiAnnotation.getQualifiedName())) {
propertyAnnotation = psiAnnotation.getQualifiedName();
}
}
if (propertyAnnotation == null) return true;
if (myForCompletion || !myMethodCall && myReferenceName.equalsIgnoreCase(namedElement.getName())) {
addIfNotNull(myResult, createResult(namedElement, true));
}
final String getterName = PropertyUtilBase.suggestGetterName(field);
if (myForCompletion || myMethodCall && myReferenceName.equalsIgnoreCase(getterName)) {
myMethods.addMethod(new TapestryAccessorMethod(field, true, getterName), state.get(PsiSubstitutor.KEY), false);
//addIfNotNull(createResult(new PropertyAccessorElement(field, getterName, true), true), myResult);
}
final String setterName = PropertyUtilBase.suggestSetterName(field);
if (!field.hasModifierProperty(FINAL) && (myForCompletion || myMethodCall && myReferenceName.equalsIgnoreCase(setterName))) {
myMethods.addMethod(new TapestryAccessorMethod(field, false, setterName), state.get(PsiSubstitutor.KEY), false);
//addIfNotNull(createResult(new PropertyAccessorElement(field, setterName, false), true), myResult);
}
}
return myForCompletion || myResult.size() != 1;
}