![JAR search and dependency download from the Maven repository](/logo.png)
org.jvnet.jaxb.annox.parser.value.XClassAnnotationValueParser Maven / Gradle / Ivy
The newest version!
package org.jvnet.jaxb.annox.parser.value;
import java.lang.reflect.Array;
import org.jvnet.jaxb.annox.model.annotation.value.AbstractBasicXAnnotationValueVisitor;
import org.jvnet.jaxb.annox.model.annotation.value.XAnnotationValue;
import org.jvnet.jaxb.annox.model.annotation.value.XArrayClassAnnotationValue;
import org.jvnet.jaxb.annox.model.annotation.value.XClassAnnotationValue;
import org.jvnet.jaxb.annox.model.annotation.value.XClassByNameAnnotationValue;
import org.jvnet.jaxb.annox.parser.exception.ValueParseException;
import org.jvnet.jaxb.annox.parser.java.visitor.ClassExpressionVisitor;
import org.jvnet.jaxb.annox.parser.java.visitor.ExpressionVisitor;
import org.jvnet.jaxb.annox.util.ClassUtils;
import org.jvnet.jaxb.annox.util.StringUtils;
public class XClassAnnotationValueParser extends
XAnnotationValueParser, Class>> {
@Override
public XAnnotationValue> parse(String value, Class> type)
throws ValueParseException {
try {
final Class> _class = ClassUtils.getClass(value);
@SuppressWarnings({ "unchecked", "rawtypes" })
final XAnnotationValue> annotationValue = new XClassAnnotationValue(
_class);
return annotationValue;
} catch (ClassNotFoundException cnfex) {
final int lastLeftBracketPosition = value.lastIndexOf('[');
final int lastRightBracketPosition = value.lastIndexOf(']');
if (lastLeftBracketPosition >= 0
&& lastRightBracketPosition > lastLeftBracketPosition) {
final String classNamePart = value.substring(0,
lastLeftBracketPosition);
final String indexPart = value.substring(
lastLeftBracketPosition + 1, lastRightBracketPosition);
final String suffixPart = value
.substring(lastRightBracketPosition + 1);
if (!StringUtils.isBlank(classNamePart)
&& StringUtils.isBlank(indexPart)
&& StringUtils.isBlank(suffixPart)) {
final XAnnotationValue> componentTypeValue = parse(
classNamePart.trim(), type);
return componentTypeValue
.accept(new AbstractBasicXAnnotationValueVisitor>>() {
@Override
public XAnnotationValue> visitDefault(
XAnnotationValue> value) {
throw new IllegalArgumentException();
}
@SuppressWarnings("rawtypes")
@Override
public XAnnotationValue> visit(
XClassAnnotationValue> value) {
final Class> itemClass = value.getValue();
final Class> arrayClass = Array
.newInstance(itemClass, 0)
.getClass();
@SuppressWarnings("unchecked")
final XAnnotationValue> classAnnotationValue = new XClassAnnotationValue(
arrayClass);
return classAnnotationValue;
}
@Override
public XAnnotationValue> visit(
XClassByNameAnnotationValue> value) {
@SuppressWarnings({ "unchecked", "rawtypes" })
final XAnnotationValue> arrayClassAnnotationValue = new XArrayClassAnnotationValue(
value, 1);
return arrayClassAnnotationValue;
}
@Override
public XAnnotationValue> visit(
XArrayClassAnnotationValue, ?> value) {
@SuppressWarnings({ "unchecked", "rawtypes" })
final XAnnotationValue> arrayClassAnnotationValue = new XArrayClassAnnotationValue(
value.getItemClassByNameAnnotationValue(),
value.getDimension() + 1);
return arrayClassAnnotationValue;
}
});
}
}
@SuppressWarnings({ "rawtypes", "unchecked" })
final XAnnotationValue> classByNameAnnotationValue = new XClassByNameAnnotationValue(
value);
return classByNameAnnotationValue;
}
}
@Override
public XAnnotationValue> construct(Class> value, Class> type) {
@SuppressWarnings({ "unchecked", "rawtypes" })
final XAnnotationValue> annotationValue = new XClassAnnotationValue(
value);
return annotationValue;
}
@Override
public ExpressionVisitor>> createExpressionVisitor(
Class> type) {
return new ClassExpressionVisitor(type);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy