package net.minidev.asm;

/*
 *    Copyright 2011 JSON-SMART authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;

Contains all information needed to access a java field. field, getter setter this object is used internally by BeansAcces
Author:Uriel Chemouni
See Also:
  • BeansAccess
/** * Contains all information needed to access a java field. * * field, getter setter * * this object is used internally by BeansAcces * * @see BeansAccess * * @author Uriel Chemouni */
public class Accessor {
Field to access
/** * Field to access */
protected Field field;
Setter Methods if available
/** * Setter Methods if available */
protected Method setter;
getter Methods if available
/** * getter Methods if available */
protected Method getter;
Filed index in object
/** * Filed index in object */
protected int index;
Filed Class
/** * Filed Class */
protected Class<?> type;
Filed Type using JDK 5+ generics if available
/** * Filed Type using JDK 5+ generics if available */
protected Type genericType; protected String fieldName;
getter for index
Returns:Index
/** * getter for index * @return Index */
public int getIndex() { return index; }
is the field access using Field access type
Returns:if Accessor is public
/** * is the field access using Field access type * @return if Accessor is public */
public boolean isPublic() { return setter == null; }
is the field is an enum field
Returns:if Accessor return an Enum Class
/** * is the field is an enum field * @return if Accessor return an Enum Class */
public boolean isEnum() { return type.isEnum(); }
return the field name
Returns:the field name
/** * return the field name * @return the field name */
public String getName() { return fieldName; }
return field Class
Returns:field Class
/** * return field Class * @return field Class */
public Class<?> getType() { return type; }
return generics field Type.
Returns:generics field Type.
/** * return generics field Type. * @return generics field Type. */
public Type getGenericType() { return genericType; }
Returns:true if the field can be read or write
/** * @return true if the field can be read or write */
public boolean isUsable() { return field != null || getter != null || setter != null; }
Returns:true if the field can be read
/** * @return true if the field can be read */
public boolean isReadable() { return field != null || getter != null; }
Returns:true if the field can be write
/** * @return true if the field can be write */
public boolean isWritable() { return field != null || getter != null; }
build accessor for a field
Params:
  • c – the handled class
  • field – the field to access
/** * build accessor for a field * * @param c * the handled class * @param field * the field to access */
public Accessor(Class<?> c, Field field, FieldFilter filter) { this.fieldName = field.getName(); int m = field.getModifiers(); if ((m & (Modifier.STATIC | Modifier.TRANSIENT)) > 0) return; if ((m & Modifier.PUBLIC) > 0) this.field = field; String name = ASMUtil.getSetterName(field.getName()); try { setter = c.getDeclaredMethod(name, field.getType()); } catch (Exception e) { } boolean isBool = field.getType().equals(Boolean.TYPE); if (isBool) { name = ASMUtil.getIsName(field.getName()); } else { name = ASMUtil.getGetterName(field.getName()); } try { getter = c.getDeclaredMethod(name); } catch (Exception e) { } if (getter == null && isBool) { try { getter = c.getDeclaredMethod(ASMUtil.getGetterName(field.getName())); } catch (Exception e) { } } if (this.field == null && getter == null && setter == null) return; if (getter != null && !filter.canUse(field, getter)) getter = null; if (setter != null && !filter.canUse(field, setter)) setter = null; // disable if (getter == null && setter == null && this.field == null) return; this.type = field.getType(); this.genericType = field.getGenericType(); } }