public void handle( final AccessLevel level, final Class<? extends java.lang.annotation.Annotation> annotationType) { LOMBOK_NODE_TYPE mayBeField = annotationNode.up(); if (mayBeField == null) return; TYPE_TYPE type = typeOf(annotationNode, ast); List<FIELD_TYPE> fields = new ArrayList<FIELD_TYPE>(); if (mayBeField.getKind() == Kind.FIELD) { for (LOMBOK_NODE_TYPE node : annotationNode.upFromAnnotationToFields()) { fields.add(fieldOf(node, ast)); } } else if (mayBeField.getKind() == Kind.TYPE) { for (FIELD_TYPE field : type.fields()) { if (!field.annotations(SETTER_PATTERN).isEmpty()) continue; if (field.name().startsWith("$")) continue; if (field.isFinal()) continue; if (field.isStatic()) continue; fields.add(field); } } else { annotationNode.addError(canBeUsedOnClassAndFieldOnly(annotationType)); return; } generateSetter(type, fields, level); }