Java Code Examples for java.lang.reflect.Field#toGenericString()

The following examples show how to use java.lang.reflect.Field#toGenericString() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: AnnotationStructuredTypeFactory.java    From odata with Apache License 2.0 6 votes vote down vote up
protected List<StructuralProperty> buildStructuralProperties(Class<?> cls) {
    List<StructuralProperty> properties = new ArrayList<>();
    for (Field field : cls.getDeclaredFields()) {
        EdmProperty propertyAnno = field.getAnnotation(EdmProperty.class);
        EdmNavigationProperty navigationPropertyAnno = field.getAnnotation(EdmNavigationProperty.class);

        if (propertyAnno != null) {
            if (navigationPropertyAnno != null) {
                throw new IllegalArgumentException("Field has both an EdmProperty and an EdmNavigationProperty " +
                        "annotation. Only one of the two is allowed: " + field.toGenericString());
            }
            properties.add(buildProperty(propertyAnno, field));
        } else if (navigationPropertyAnno != null) {
            properties.add(buildNavigationProperty(navigationPropertyAnno, field));
        }
    }
    return properties;
}
 
Example 2
Source File: StructuralPropertyImpl.java    From odata with Apache License 2.0 6 votes vote down vote up
public B setTypeFromJavaField(Field field, TypeNameResolver resolver) {
    // Find out if the field is an array or collection; get the element type if that is the case
    Class<?> cls = field.getType();
    if (cls.isArray()) {
        this.isCollection = true;
        cls = cls.getComponentType();
    } else if (Collection.class.isAssignableFrom(cls)) {
        this.isCollection = true;
        cls = getCollectionElementType(field);
    } else {
        this.isCollection = false;
    }

    this.typeName = resolver.resolveTypeName(cls);
    if (isNullOrEmpty(this.typeName)) {
        throw new IllegalArgumentException("The OData type of this field cannot be determined from " +
                "the Java type: " + field.toGenericString());
    }

    return self;
}
 
Example 3
Source File: Graph.java    From AndroidMvc with Apache License 2.0 6 votes vote down vote up
/**
 * Records the field of a target object is visited
 *
 * @param object      The field holder
 * @param objectField The field which holds the object in its parent
 * @param field       The field of the holder
 */
private void recordVisitField(Object object, Field objectField, Field field) {
    Map<String, Set<String>> bag = visitedFields.get(object);
    if (bag == null) {
        bag = new HashMap<>();
        visitedFields.put(object, bag);
    }
    Set<String> fields = bag.get(objectField);

    String objectFiledKey = objectField == null ? "" : objectField.toGenericString();

    if (fields == null) {
        fields = new HashSet<>();
        bag.put(objectFiledKey, fields);
    }
    fields.add(field.toGenericString());
}
 
Example 4
Source File: ClassesManager.java    From jmapper-core with Apache License 2.0 6 votes vote down vote up
/**
 * Retrieves (from a field of map type) the key and value classes.
 * 
 * @param field to analyze
 * @param key key class
 * @param value value class
 */
public static void getKeyValueClasses(Field field,Class<?> key, Class<?> value){
	
	if(!mapIsAssignableFrom(field.getType()))
		throw new IllegalArgumentException("the field is not a map");
	
	String generic = field.toGenericString();
	String[] pair = generic.substring(generic.indexOf("<")+1, generic.indexOf(">")).split(", ");
	
	try {
		key = Class.forName(pair[0].trim());
		value = Class.forName(pair[1].trim());
	} catch (ClassNotFoundException e) {
		key = null;
		value = null;
	}
}
 
Example 5
Source File: CompilePropertyEntity.java    From jphp with Apache License 2.0 6 votes vote down vote up
public CompilePropertyEntity(Context context, Field field) {
    super(context);
    this.field = field;
    this.field.setAccessible(true);

    setModifier(php.runtime.common.Modifier.PUBLIC);

    if (Modifier.isProtected(field.getModifiers())) {
        setModifier(php.runtime.common.Modifier.PROTECTED);
    } else if (Modifier.isPrivate(field.getModifiers())) {
        throw new CriticalException("Unsupported bind private fields: " + field.toGenericString());
    }

    this.operation = MemoryOperation.get(field.getType(), field.getGenericType());

    if (this.operation == null) {
        throw new CriticalException("Unsupported type for field " + field.toGenericString());
    }

    setStatic(Modifier.isStatic(field.getModifiers()));
}
 
Example 6
Source File: Graph.java    From AndroidMvc with Apache License 2.0 5 votes vote down vote up
/**
 * Indicates whether the field of a target object is visited
 *
 * @param object      The field holder
 * @param objectField The field which holds the object in its parent
 * @param field       The field of the holder
 */
private boolean isFieldVisited(Object object, Field objectField, Field field) {
    Map<String, Set<String>> bag = visitedFields.get(object);
    if (bag == null) {
        return false;
    }

    String objectFiledKey = objectField == null ? "" : objectField.toGenericString();
    Set<String> fields = bag.get(objectFiledKey);
    return fields != null && fields.contains(field);
}
 
Example 7
Source File: FieldDescription_ReflectionAutogen.java    From graphql-java-type-generator with MIT License 4 votes vote down vote up
protected String getFieldDescriptionFromField(Field field) {
    return "Autogenerated from j.l.r.Field [" + field.toGenericString() + "]";
}
 
Example 8
Source File: JsonWriter.java    From odata with Apache License 2.0 4 votes vote down vote up
private void marshallStructuralProperty(Object object, StructuralProperty property)
        throws ODataRenderException, IOException, NoSuchFieldException, IllegalAccessException {
    String propertyName = property.getName();

    // Get the property value through reflection
    Object propertyValue;
    Field field = property.getJavaField();
    try {
        field.setAccessible(true);
        propertyValue = field.get(object);
    } catch (IllegalAccessException e) {
        LOG.error("Error getting field value of field: " + field.toGenericString());
        throw new ODataRenderException("Error getting field value of field: " + field.toGenericString());
    }

    // Collection properties and non-nullable properties should not be null
    if (propertyValue == null) {
        if (property.isCollection()) {
            throw new ODataRenderException("Collection property has null value: " + property);
        } else if (!property.isNullable()) {
            throw new ODataRenderException("Non-nullable property has null value: " + property);
        }
    }

    // Check if the property is a collection
    if (property.isCollection()) {
        // Get an iterator for the array or collection
        Iterator<?> iterator;
        if (propertyValue.getClass().isArray()) {
            iterator = Arrays.asList((Object[]) propertyValue).iterator();
        } else if (Collection.class.isAssignableFrom(propertyValue.getClass())) {
            iterator = ((Collection<?>) propertyValue).iterator();
        } else {
            throw new UnsupportedOperationException("Unsupported collection type: " +
                    propertyValue.getClass().getName() + " for property: " + propertyName);
        }

        // Get the OData type of the elements of the collection
        Type elementType = entityDataModel.getType(property.getElementTypeName());
        if (elementType == null) {
            throw new ODataRenderException("OData type not found for elements of property: " + property);
        }

        LOG.trace("Start collection property: {}", propertyName);
        if (((Collection) propertyValue).isEmpty()) {
            jsonGenerator.writeArrayFieldStart(propertyName);
            jsonGenerator.writeEndArray();
        } else {
            while (iterator.hasNext()) {
                Object element = iterator.next();
                if (element instanceof Number | element instanceof String | element.getClass().isEnum()) {
                    marshallToArray(propertyName, element, iterator);
                } else {
                    marshallCollection(propertyName, iterator, element, elementType);
                }
            }
        }
        LOG.trace("End collection property: {}", propertyName);
    } else {
        // Single value (non-collection) property
        LOG.trace("Start property: {}", propertyName);

        // Get the OData type of the property
        Type propertyType = entityDataModel.getType(property.getTypeName());
        if (propertyType == null) {
            throw new ODataRenderException("OData type not found for property: " + property);
        }

        jsonGenerator.writeFieldName(propertyName);
        if (propertyType.getMetaType().equals(COMPLEX) && propertyValue != null) {
            jsonGenerator.writeStartObject();
        }
        marshall(propertyValue, propertyType);
        if (propertyType.getMetaType().equals(COMPLEX) && propertyValue != null) {
            jsonGenerator.writeEndObject();
        }
        LOG.trace("End property: {}", propertyName);
    }
}
 
Example 9
Source File: ClassesManager.java    From jmapper-core with Apache License 2.0 4 votes vote down vote up
/**
 * Splits the fieldDescription to obtain his class type,generics inclusive.
 * @param field field to check
 * @return returns a string that specified the structure of the field, including its generic
 */
public static String getGenericString(Field field){
	
	String fieldDescription = field.toGenericString();
	List<String> splitResult = new ArrayList<String>();
	char[] charResult = fieldDescription.toCharArray();
	
	boolean isFinished = false;
	int separatorIndex = fieldDescription.indexOf(" ");
	int previousIndex = 0;
	
	while(!isFinished){
		
		// if previous character is "," don't cut the string
		int position = separatorIndex-1;
		char specialChar = charResult[position];
		boolean isSpecialChar = true;
		if(specialChar!=',' && specialChar != '?'){ 
			
			if(specialChar == 's'){
				String specialString = null;
				try{
					specialString = fieldDescription.substring(position - "extends".length(), position+1);
					if(isNull(specialString) || !" extends".equals(specialString))
						isSpecialChar = false;
				
				}catch(IndexOutOfBoundsException e){
					isSpecialChar = false;
				}
			
			}else
				isSpecialChar = false;
		}
		
		if(!isSpecialChar){
			splitResult.add(fieldDescription.substring(previousIndex, separatorIndex));
			previousIndex = separatorIndex+1;
		}
		
		separatorIndex = fieldDescription.indexOf(" ",separatorIndex+1);
		if(separatorIndex == -1)isFinished = true;
	}
	
	for (String description : splitResult)
		if(!isAccessModifier(description)) return description;
	
	return null;
}
 
Example 10
Source File: FieldAnnotationsProvider.java    From bobcat with Apache License 2.0 3 votes vote down vote up
/**
 * Provides an {@link AbstractAnnotations} implementation based on provided field's annotations.
 *
 * @param field    which annotations are checked
 * @param injector to provide Bobcat-augmented annotations
 * @return <ul>
 * <li>{@link Annotations} for fields decorated with {@link org.openqa.selenium.support.FindBy}, {@link org.openqa.selenium.support.FindAll} or {@link org.openqa.selenium.support.FindBys}</li>
 * <li>{@link BobcatAnnotations} for fields decorated with {@link com.cognifide.qa.bb.qualifier.FindPageObject}</li>
 * </ul>
 * @throws IllegalArgumentException when the field is not decorated with any of the above annotations
 */
public static AbstractAnnotations create(Field field, Injector injector) {
  if (AnnotationsHelper.isFindByAnnotationPresent(field)) {
    return new Annotations(field);
  }
  if (AnnotationsHelper.isFindPageObjectAnnotationPresent(field)) {
    return new BobcatAnnotations(field, injector);
  }
  throw new IllegalArgumentException(
      "Field is not marked by any supported annotation: " + field.toGenericString());
}