Author: Alex.Kolonitsky
Date: 2009-12-07 08:13:40 -0500 (Mon, 07 Dec 2009)
New Revision: 16082
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/ELParserUtils.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/ELVisitor.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/NullType.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AbstractBinaryOperationTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstBracketSuffixTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstDeferredOrDynamicExpressionTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstFunctionTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstIdentifierTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstMethodSuffixTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstPropertySuffixTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstValueTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/BinaryArithmeticIntegerOperationTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/BinaryArithmeticOperationTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/BinaryBooleanOperationTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/ConstantValueTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererClassVisitor.java
Log:
RFPL-195 - Code style policy
Reformatting
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/ELParserUtils.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/ELParserUtils.java 2009-12-07
13:13:26 UTC (rev 16081)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/ELParserUtils.java 2009-12-07
13:13:40 UTC (rev 16082)
@@ -19,8 +19,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-
-
package org.richfaces.cdk.parser.el;
import java.beans.BeanInfo;
@@ -99,83 +97,85 @@
/**
* Class, that encapsulate all functionality, related to Reflection calls, such as
loading classes, get property
* descriptors etc...
+ *
* @author amarkhel
- *
*/
public final class ELParserUtils {
-
- private static final class ClassDataHolder implements ClassVisitor {
-
- private Map<String, PropertyDescriptor> resolvedProperties;
-
- private List<Method> resolvedMethods;
- public ClassDataHolder() {
- super();
-
- this.resolvedProperties = new HashMap<String, PropertyDescriptor>();
- this.resolvedMethods = new ArrayList<Method>();
- }
+ private static final class ClassDataHolder implements ClassVisitor {
- public Map<String, PropertyDescriptor> getResolvedProperties() {
- return resolvedProperties;
- }
-
- public List<Method> getResolvedMethods() {
- return resolvedMethods;
- }
+ private Map<String, PropertyDescriptor> resolvedProperties;
- @Override
- public void visit(Class<?> clazz) throws ParsingException {
- PropertyDescriptor[] pds;
- Method[] declaredMethods;
-
- try {
- pds = getPropertyDescriptors(clazz);
- declaredMethods = clazz.getDeclaredMethods();
- } catch (LinkageError e) {
- throw new ParsingException(e.getMessage(), e);
- }
+ private List<Method> resolvedMethods;
+ public ClassDataHolder() {
+ super();
+
+ this.resolvedProperties = new HashMap<String, PropertyDescriptor>();
+ this.resolvedMethods = new ArrayList<Method>();
+ }
+
+ public Map<String, PropertyDescriptor> getResolvedProperties() {
+ return resolvedProperties;
+ }
+
+ public List<Method> getResolvedMethods() {
+ return resolvedMethods;
+ }
+
+ @Override
+ public void visit(Class<?> clazz) throws ParsingException {
+ PropertyDescriptor[] pds;
+ Method[] declaredMethods;
+
+ try {
+ pds = getPropertyDescriptors(clazz);
+ declaredMethods = clazz.getDeclaredMethods();
+ } catch (LinkageError e) {
+ throw new ParsingException(e.getMessage(), e);
+ }
+
for (PropertyDescriptor descriptor : pds) {
- String descriptorName = descriptor.getName();
- if (resolvedProperties.get(descriptorName) == null) {
- resolvedProperties.put(descriptorName, descriptor);
- }
+ String descriptorName = descriptor.getName();
+ if (resolvedProperties.get(descriptorName) == null) {
+ resolvedProperties.put(descriptorName, descriptor);
+ }
}
- for (Method declaredMethod : declaredMethods) {
- resolvedMethods.add(declaredMethod);
- }
- }
- }
+ for (Method declaredMethod : declaredMethods) {
+ resolvedMethods.add(declaredMethod);
+ }
+ }
+ }
- private static Map<Class<?>, ClassDataHolder> classDataCache =
+ private static Map<Class<?>, ClassDataHolder> classDataCache =
new WeakHashMap<Class<?>, ClassDataHolder>();
-
- private ELParserUtils() { }
+ private ELParserUtils() {
+ }
+
public static void verifyClassPropertiesAndMethods(Class<?> initialClass)
throws ParsingException {
- resolveClassPropertiesAndMethods(initialClass);
+ resolveClassPropertiesAndMethods(initialClass);
}
private static ClassDataHolder resolveClassPropertiesAndMethods(Class<?>
initialClass) throws ParsingException {
- ClassDataHolder classDataHolder = classDataCache.get(initialClass);
- if (classDataHolder == null) {
- classDataHolder = new ClassDataHolder();
- new ClassWalkingLogic(initialClass).walk(classDataHolder);
- classDataCache.put(initialClass, classDataHolder);
- }
-
- return classDataHolder;
+ ClassDataHolder classDataHolder = classDataCache.get(initialClass);
+ if (classDataHolder == null) {
+ classDataHolder = new ClassDataHolder();
+ new ClassWalkingLogic(initialClass).walk(classDataHolder);
+ classDataCache.put(initialClass, classDataHolder);
+ }
+
+ return classDataHolder;
}
-
+
/**
* This method determine type of parsed node and create wrapper for them, that
extends AbstractTreeNode.
* If node type is not recognized - throws ParsingException.
+ *
* @param child - parsed node
+ * @return wrapper for parsed node(if node type is recognized), that implement
ITreeNode interface.
* @throws ParsingException - if node type is not recognized.
- * @return wrapper for parsed node(if node type is recognized), that implement
ITreeNode interface.
*/
public static ITreeNode determineNodeType(Node child) throws ParsingException {
ITreeNode treeNode = null;
@@ -249,43 +249,44 @@
}
//TODO: add support for closures
-
+
return treeNode;
}
/**
* This method return PropertyDescriptor by specified propertyName and clazz.
- * @param clazz - class to search
+ *
+ * @param clazz - class to search
* @param propertyName - propertyName to search
* @return property descriptor if found.
* @throws ParsingException if error occured.
*/
public static PropertyDescriptor getPropertyDescriptor(Class<?> clazz, String
propertyName)
throws ParsingException {
- if (clazz == null) {
- return null;
- }
-
- ClassDataHolder classDataHolder = resolveClassPropertiesAndMethods(clazz);
- return classDataHolder.getResolvedProperties().get(propertyName);
+ if (clazz == null) {
+ return null;
+ }
+
+ ClassDataHolder classDataHolder = resolveClassPropertiesAndMethods(clazz);
+ return classDataHolder.getResolvedProperties().get(propertyName);
}
/**
* Returns wrapper classes for passed-in class. If type is primitive, then
corresponding
- * wrapper class is returned (e.g. boolean -> Boolean), otherwise does nothing and
returns
+ * wrapper class is returned (e.g. boolean -> Boolean), otherwise does nothing and
returns
* passed-in class.
- *
+ *
* @return wrapper for primitive types, or passed-in class
*/
private static Class<?> getWrapperClass(Class<?> inClazz) {
- if (inClazz == null) {
- return null;
- }
-
- if (inClazz.isPrimitive()) {
- return getPrimitiveWrapper(inClazz);
+ if (inClazz == null) {
+ return null;
+ }
+
+ if (inClazz.isPrimitive()) {
+ return getPrimitiveWrapper(inClazz);
} else {
- return inClazz;
+ return inClazz;
}
}
@@ -293,14 +294,13 @@
* <p>Retrieve the property descriptors for the specified class,
* introspecting and caching them the first time a particular bean class
* is encountered.</p>
- *
+ * <p/>
* <p><strong>FIXME</strong> - Does not work with
DynaBeans.</p>
*
* @param beanClass Bean class for which property descriptors are requested
* @return the property descriptors
- * @throws ParsingException if error occured.
- *
- * @exception IllegalArgumentException if <code>beanClass</code> is null
+ * @throws ParsingException if error occured.
+ * @throws IllegalArgumentException if <code>beanClass</code> is null
*/
private static PropertyDescriptor[] getPropertyDescriptors(Class<?> beanClass)
throws ParsingException {
if (beanClass == null) {
@@ -318,7 +318,7 @@
descriptors = beanInfo.getPropertyDescriptors();
} catch (IntrospectionException e) {
return new PropertyDescriptor[0];
- }
+ }
if (descriptors == null) {
descriptors = new PropertyDescriptor[0];
@@ -330,56 +330,56 @@
private static boolean isMethodVisible(Method method) {
return !Modifier.isPrivate(method.getModifiers());
}
-
+
/**
* <p>Find an accessible method that matches the given name and has compatible
parameters.
* Compatible parameters mean that every method parameter is assignable from
* the given parameters.
* In other words, it finds a method with the given name
* that will take the parameters given.<p>
- *
+ * <p/>
* <p>This method is slightly undeterminstic since it loops
* through methods names and return the first matching method.</p>
- *
+ * <p/>
* <p>This method is used by
* {@link
* #invokeMethod(Object object,String methodName,Object [] args,Class[]
parameterTypes)}.
- *
+ * <p/>
* <p>This method can match primitive parameter by passing in wrapper classes.
* For example, a <code>Boolean</code> will match a primitive
<code>boolean</code>
* parameter.
*
- * @param clazz find method in this class
- * @param methodName find method with this name
+ * @param clazz find method in this class
+ * @param methodName find method with this name
* @param parameterTypes find method with compatible parameters
* @return The accessible method
* @throws ParsingException if error occured.
*/
- public static Type getMatchingVisibleMethodReturnType(Class<?> clazz, final
String methodName,
- Type[] parameterTypes) throws ParsingException {
-
- if (clazz == null) {
- return Object.class;
- }
-
- ClassDataHolder classDataHolder = resolveClassPropertiesAndMethods(clazz);
- List<Method> resolvedMethods = classDataHolder.getResolvedMethods();
+ public static Type getMatchingVisibleMethodReturnType(Class<?> clazz, final
String methodName,
+ Type[] parameterTypes) throws
ParsingException {
+ if (clazz == null) {
+ return Object.class;
+ }
+
+ ClassDataHolder classDataHolder = resolveClassPropertiesAndMethods(clazz);
+ List<Method> resolvedMethods = classDataHolder.getResolvedMethods();
+
// search through all methods
int paramSize = parameterTypes.length;
Method bestMatch = null;
float bestMatchCost = Float.MAX_VALUE;
float myCost = Float.MAX_VALUE;
- for (Method resolvedMethod: resolvedMethods) {
- if (!isMethodVisible(resolvedMethod)) {
- continue;
- }
-
- if (!resolvedMethod.getName().equals(methodName)) {
- continue;
- }
-
+ for (Method resolvedMethod : resolvedMethods) {
+ if (!isMethodVisible(resolvedMethod)) {
+ continue;
+ }
+
+ if (!resolvedMethod.getName().equals(methodName)) {
+ continue;
+ }
+
// compare parameters
Class<?>[] methodsParams = resolvedMethod.getParameterTypes();
int methodParamSize = methodsParams.length;
@@ -409,14 +409,15 @@
if (bestMatch != null) {
return bestMatch.getGenericReturnType();
} else {
- return Object.class;
+ return Object.class;
}
}
/**
* Returns the sum of the object transformation cost for each class in the source
* argument list.
- * @param srcArgs The source arguments
+ *
+ * @param srcArgs The source arguments
* @param destArgs The destination arguments
* @return The total transformation cost
*/
@@ -437,7 +438,8 @@
* Gets the number of steps required needed to turn the source class into the
* destination class. This represents the number of steps in the object hierarchy
* graph.
- * @param srcClass The source class
+ *
+ * @param srcClass The source class
* @param destClass The destination class
* @return The cost of transforming an object
*/
@@ -445,35 +447,35 @@
float cost = 0.0f;
if (ELParserUtils.isNullType(srcType)) {
- return cost;
+ return cost;
}
-
+
Class<?> srcClass = ELParserUtils.getRawType(srcType);
- Class<?> destClass = ELParserUtils.getRawType(destType);
+ Class<?> destClass = ELParserUtils.getRawType(destType);
- while (srcClass != null &&
!getWrapperClass(destClass).equals(getWrapperClass(srcClass))) {
- if (destClass.isInterface() && isAssignmentCompatible(destClass, srcClass))
{
+ while (srcClass != null &&
!getWrapperClass(destClass).equals(getWrapperClass(srcClass))) {
+ if (destClass.isInterface() && isAssignmentCompatible(destClass,
srcClass)) {
- // slight penalty for interface match.
- // we still want an exact match to override an interface match, but
- // an interface match should override anything where we have to get a
- // superclass.
- cost += 0.25f;
+ // slight penalty for interface match.
+ // we still want an exact match to override an interface match, but
+ // an interface match should override anything where we have to get a
+ // superclass.
+ cost += 0.25f;
- break;
- }
+ break;
+ }
- cost++;
- srcClass = srcClass.getSuperclass();
- }
+ cost++;
+ srcClass = srcClass.getSuperclass();
+ }
- /*
- * If the destination class is null, we've travelled all the way up to
- * an Object match. We'll penalize this by adding 1.5 to the cost.
- */
- if (srcClass == null) {
- cost += 1.5f;
- }
+ /*
+ * If the destination class is null, we've travelled all the way up to
+ * an Object match. We'll penalize this by adding 1.5 to the cost.
+ */
+ if (srcClass == null) {
+ cost += 1.5f;
+ }
return cost;
}
@@ -481,7 +483,7 @@
/**
* <p>Determine whether a type can be used as a parameter in a method
invocation.
* This method handles primitive conversions correctly.</p>
- *
+ * <p/>
* <p>In order words, it will match a <code>Boolean</code> to a
<code>boolean</code>,
* a <code>Long</code> to a <code>long</code>,
* a <code>Float</code> to a <code>float</code>,
@@ -490,30 +492,30 @@
* Now logic widening matches are allowed.
* For example, a <code>Long</code> will not match a
<code>int</code>.
*
- * @param parameterType the type of parameter accepted by the method
+ * @param parameterType the type of parameter accepted by the method
* @param parameterization the type of parameter being tested
- *
* @return true if the assignement is compatible.
*/
public static boolean isAssignmentCompatible(Type parameterType, Type
parameterization) {
Class<?> parameterClass = ELParserUtils.getRawType(parameterType);
-
+
if (ELParserUtils.isNullType(parameterization)) {
- //null value can be assigned to any class except primitive
- return !parameterClass.isPrimitive();
- } else {
- Class<?> parameterWrappedClass = getWrapperClass(parameterClass);
- Class<?> parameterizationWrappedClass =
getWrapperClass(ELParserUtils.getRawType(parameterization));
- return parameterWrappedClass.isAssignableFrom(parameterizationWrappedClass);
- }
+ //null value can be assigned to any class except primitive
+ return !parameterClass.isPrimitive();
+ } else {
+ Class<?> parameterWrappedClass = getWrapperClass(parameterClass);
+ Class<?> parameterizationWrappedClass =
getWrapperClass(ELParserUtils.getRawType(parameterization));
+ return parameterWrappedClass.isAssignableFrom(parameterizationWrappedClass);
+ }
}
/**
* Gets the wrapper object class for the given primitive type class.
* For example, passing <code>boolean.class</code> returns
<code>Boolean.class</code>
+ *
* @param primitiveType the primitive type class for which a match is to be found
* @return the wrapper type associated with the given primitive
- * or null if no match is found
+ * or null if no match is found
*/
private static Class<?> getPrimitiveWrapper(Class<?> primitiveType) {
@@ -535,8 +537,8 @@
} else if (char.class.equals(primitiveType)) {
return Character.class;
} else {
- throw new IllegalArgumentException(
- MessageFormat.format("Type {0} is not primitive!",
primitiveType.getName()));
+ throw new IllegalArgumentException(
+ MessageFormat.format("Type {0} is not primitive!",
primitiveType.getName()));
}
}
@@ -546,72 +548,72 @@
static class ClassWalkingLogic {
private Queue<Class<?>> classesList = new
LinkedList<Class<?>>();
-
+
private Set<Class<?>> visitedClasses = new
HashSet<Class<?>>();
-
+
public ClassWalkingLogic(Class<?> clazz) {
super();
-
+
this.classesList.add(clazz);
}
public void walk(ClassVisitor visitor) throws ParsingException {
- //BFS algorithm
- while (!classesList.isEmpty()) {
- Class<?> clazz = classesList.remove();
-
- visitor.visit(clazz);
+ //BFS algorithm
+ while (!classesList.isEmpty()) {
+ Class<?> clazz = classesList.remove();
- Class<?> superclass = clazz.getSuperclass();
- if (superclass != null) {
- if (visitedClasses.add(superclass)) {
- classesList.add(superclass);
- }
- }
-
- Class<?>[] interfaces = clazz.getInterfaces();
- if (interfaces != null) {
- for (Class<?> iface : interfaces) {
- if (visitedClasses.add(superclass)) {
- classesList.add(iface);
- }
- }
- }
- }
-
- //this is for the case when we started just from interface, not class
- if (visitedClasses.add(Object.class)) {
- visitor.visit(Object.class);
- }
+ visitor.visit(clazz);
+
+ Class<?> superclass = clazz.getSuperclass();
+ if (superclass != null) {
+ if (visitedClasses.add(superclass)) {
+ classesList.add(superclass);
+ }
+ }
+
+ Class<?>[] interfaces = clazz.getInterfaces();
+ if (interfaces != null) {
+ for (Class<?> iface : interfaces) {
+ if (visitedClasses.add(superclass)) {
+ classesList.add(iface);
+ }
+ }
+ }
+ }
+
+ //this is for the case when we started just from interface, not class
+ if (visitedClasses.add(Object.class)) {
+ visitor.visit(Object.class);
+ }
}
}
- public static boolean isNullType(Type type) {
- return type instanceof NullType;
- }
+ public static boolean isNullType(Type type) {
+ return type instanceof NullType;
+ }
- public static Type getLastTypeArgument(Type type) {
- Type[] actualTypeArguments = null;
- if (type instanceof ParameterizedType) {
- ParameterizedType parameterizedType = (ParameterizedType) type;
- actualTypeArguments = parameterizedType.getActualTypeArguments();
- }
-
- if (actualTypeArguments != null && actualTypeArguments.length != 0) {
- return actualTypeArguments[actualTypeArguments.length - 1];
- } else {
- return null;
- }
- }
+ public static Type getLastTypeArgument(Type type) {
+ Type[] actualTypeArguments = null;
+ if (type instanceof ParameterizedType) {
+ ParameterizedType parameterizedType = (ParameterizedType) type;
+ actualTypeArguments = parameterizedType.getActualTypeArguments();
+ }
- public static Class<?> getRawType(Type type) {
- if (type instanceof ParameterizedType) {
- ParameterizedType parameterizedType = (ParameterizedType) type;
- return (Class<?>) parameterizedType.getRawType();
- } else if (type instanceof Class<?>) {
- return (Class<?>) type;
- } else {
- return null;
- }
- }
+ if (actualTypeArguments != null && actualTypeArguments.length != 0) {
+ return actualTypeArguments[actualTypeArguments.length - 1];
+ } else {
+ return null;
+ }
+ }
+
+ public static Class<?> getRawType(Type type) {
+ if (type instanceof ParameterizedType) {
+ ParameterizedType parameterizedType = (ParameterizedType) type;
+ return (Class<?>) parameterizedType.getRawType();
+ } else if (type instanceof Class<?>) {
+ return (Class<?>) type;
+ } else {
+ return null;
+ }
+ }
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/ELVisitor.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/ELVisitor.java 2009-12-07
13:13:26 UTC (rev 16081)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/ELVisitor.java 2009-12-07
13:13:40 UTC (rev 16082)
@@ -19,8 +19,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-
-
package org.richfaces.cdk.parser.el;
import java.lang.reflect.Type;
@@ -33,16 +31,17 @@
/**
* Entry point for parsing EL expressions. @see parse() method.
+ *
* @author amarkhel
- *
*/
public final class ELVisitor {
- private String parsedExpression = null;
- private Type variableType = null;
boolean useConversionToString;
boolean useEmptinessCheck;
-
+
+ private String parsedExpression = null;
+ private Type variableType = null;
+
public boolean isUseConversionToString() {
return useConversionToString;
}
@@ -51,14 +50,14 @@
this.useConversionToString = needConversion;
}
- public boolean isUseEmptinessCheck() {
- return useEmptinessCheck;
- }
-
- public void setUseEmptinessCheck(boolean useCheckForEmpty) {
- this.useEmptinessCheck = useCheckForEmpty;
- }
-
+ public boolean isUseEmptinessCheck() {
+ return useEmptinessCheck;
+ }
+
+ public void setUseEmptinessCheck(boolean useCheckForEmpty) {
+ this.useEmptinessCheck = useCheckForEmpty;
+ }
+
public Type getVariableType() {
return variableType;
}
@@ -68,30 +67,31 @@
}
/**
- * @return the parsedExpression
- */
- public String getParsedExpression() {
- return parsedExpression;
- }
-
+ * @return the parsedExpression
+ */
+ public String getParsedExpression() {
+ return parsedExpression;
+ }
+
/**
* Parse specified EL expression and return Java code, that represent this
expression
+ *
* @param expression - expression to resolve
* @param contextMap - Map<String, Class<?>> - context for search
classes.
* @return generated Java code.
* @throws ParsingException - if error occurred during parsing.
*/
public void parse(String expression, Map<String, Type> contextMap) throws
ParsingException {
- reset();
-
+ reset();
+
Node ret = ELParser.parse(expression);
if (ret instanceof AstCompositeExpression && ret.jjtGetNumChildren()
>= 2) {
- //AstCompositeExpression with 2+ children is a mixed expression
- this.setUseConversionToString(true);
+ //AstCompositeExpression with 2+ children is a mixed expression
+ this.setUseConversionToString(true);
}
-
- parsedExpression = this.visit(ret, contextMap);
+
+ parsedExpression = this.visit(ret, contextMap);
}
private String visit(Node node, Map<String, Type> context) throws
ParsingException {
@@ -112,11 +112,11 @@
return sb.toString();
}
-
+
private void reset() {
- parsedExpression = null;
- useConversionToString = false;
- useEmptinessCheck = false;
- variableType = null;
+ parsedExpression = null;
+ useConversionToString = false;
+ useEmptinessCheck = false;
+ variableType = null;
}
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/NullType.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/NullType.java 2009-12-07
13:13:26 UTC (rev 16081)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/NullType.java 2009-12-07
13:13:40 UTC (rev 16082)
@@ -25,11 +25,11 @@
/**
* @author Nick Belaevski
- *
*/
-public class NullType implements Type {
+public final class NullType implements Type {
- public static final NullType INSTANCE = new NullType();
-
- private NullType() {}
+ public static final NullType INSTANCE = new NullType();
+
+ private NullType() {
+ }
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AbstractBinaryOperationTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AbstractBinaryOperationTreeNode.java 2009-12-07
13:13:26 UTC (rev 16081)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AbstractBinaryOperationTreeNode.java 2009-12-07
13:13:40 UTC (rev 16082)
@@ -32,40 +32,40 @@
/**
* <p>Abstract class for all binary (having two operands) operation expression
nodes</p>
* <p>For operands <code>A</code> and <code>B</code> and
operator <code>x</code> output is <code>(A x B)</code></p>
- *
+ *
* @author Nick Belaevski
*/
public abstract class AbstractBinaryOperationTreeNode extends AbstractTreeNode {
- private final String operatorString;
+ private final String operatorString;
- public AbstractBinaryOperationTreeNode(Node node, String operatorString) {
- super(node);
+ public AbstractBinaryOperationTreeNode(Node node, String operatorString) {
+ super(node);
- this.operatorString = operatorString;
- }
+ this.operatorString = operatorString;
+ }
- protected abstract Type getOperationType(Type firstArgumentType, Type
secondArgumentType);
-
- /* (non-Javadoc)
- * @see org.richfaces.cdk.parser.el.node.AbstractTreeNode#visit(java.lang.StringBuilder,
java.util.Map, org.richfaces.cdk.parser.el.ELVisitor)
- */
- @Override
- public void visit(StringBuilder sb, Map<String, Type> context,
- ELVisitor visitor) throws ParsingException {
+ protected abstract Type getOperationType(Type firstArgumentType, Type
secondArgumentType);
+
+ /* (non-Javadoc)
+ * @see
org.richfaces.cdk.parser.el.node.AbstractTreeNode#visit(java.lang.StringBuilder,
java.util.Map, org.richfaces.cdk.parser.el.ELVisitor)
+ */
+ @Override
+ public void visit(StringBuilder sb, Map<String, Type> context,
+ ELVisitor visitor) throws ParsingException {
String firstChildOutput = getChildOutput(0, context, visitor);
Type firstChildType = visitor.getVariableType();
- String secondChildOutput = getChildOutput(1, context, visitor);
+ String secondChildOutput = getChildOutput(1, context, visitor);
Type secondChildType = visitor.getVariableType();
- sb.append(ELNodeConstants.LEFT_BRACKET);
+ sb.append(ELNodeConstants.LEFT_BRACKET);
- sb.append(firstChildOutput);
- sb.append(operatorString);
- sb.append(secondChildOutput);
-
- sb.append(ELNodeConstants.RIGHT_BRACKET);
-
- visitor.setVariableType(getOperationType(firstChildType, secondChildType));
- }
+ sb.append(firstChildOutput);
+ sb.append(operatorString);
+ sb.append(secondChildOutput);
+
+ sb.append(ELNodeConstants.RIGHT_BRACKET);
+
+ visitor.setVariableType(getOperationType(firstChildType, secondChildType));
+ }
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstBracketSuffixTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstBracketSuffixTreeNode.java 2009-12-07
13:13:26 UTC (rev 16081)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstBracketSuffixTreeNode.java 2009-12-07
13:13:40 UTC (rev 16082)
@@ -19,8 +19,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-
-
package org.richfaces.cdk.parser.el.node;
import java.lang.reflect.Type;
@@ -37,7 +35,6 @@
* This class extend AbstractTreeNode and wrap AstBracketSuffix node.
*
* @author amarkhel
- *
*/
public class AstBracketSuffixTreeNode extends AbstractTreeNode {
public AstBracketSuffixTreeNode(Node node) {
@@ -48,35 +45,35 @@
public void visit(StringBuilder sb, Map<String, Type> context, ELVisitor
visitor) throws ParsingException {
Type lastVariableType = visitor.getVariableType();
Class<?> rawType = ELParserUtils.getRawType(lastVariableType);
-
+
String suffixValue = getChildOutput(0, context, visitor);
if (rawType != null && rawType.isArray()) {
- sb.append(ELNodeConstants.LEFT_SQUARE_BRACKET);
- sb.append(suffixValue);
- sb.append(ELNodeConstants.RIGHT_SQUARE_BRACKET);
-
- //TODO: support for generified arrays
- visitor.setVariableType(rawType.getComponentType());
+ sb.append(ELNodeConstants.LEFT_SQUARE_BRACKET);
+ sb.append(suffixValue);
+ sb.append(ELNodeConstants.RIGHT_SQUARE_BRACKET);
+
+ //TODO: support for generified arrays
+ visitor.setVariableType(rawType.getComponentType());
} else {
- Type collectionValueType = null;
- if (rawType != null &&
- (List.class.isAssignableFrom(rawType) ||
Map.class.isAssignableFrom(rawType))) {
-
- collectionValueType = ELParserUtils.getLastTypeArgument(lastVariableType);
+ Type collectionValueType = null;
+ if (rawType != null &&
+ (List.class.isAssignableFrom(rawType) ||
Map.class.isAssignableFrom(rawType))) {
+
+ collectionValueType =
ELParserUtils.getLastTypeArgument(lastVariableType);
}
-
+
if (collectionValueType == null) {
- collectionValueType = Object.class;
+ collectionValueType = Object.class;
}
-
- sb.append(ELNodeConstants.DOT);
- sb.append(ELNodeConstants.GET_FUNCTION);
- sb.append(ELNodeConstants.LEFT_BRACKET);
- sb.append(suffixValue);
- sb.append(ELNodeConstants.RIGHT_BRACKET);
-
- visitor.setVariableType(collectionValueType);
+
+ sb.append(ELNodeConstants.DOT);
+ sb.append(ELNodeConstants.GET_FUNCTION);
+ sb.append(ELNodeConstants.LEFT_BRACKET);
+ sb.append(suffixValue);
+ sb.append(ELNodeConstants.RIGHT_BRACKET);
+
+ visitor.setVariableType(collectionValueType);
}
}
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstDeferredOrDynamicExpressionTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstDeferredOrDynamicExpressionTreeNode.java 2009-12-07
13:13:26 UTC (rev 16081)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstDeferredOrDynamicExpressionTreeNode.java 2009-12-07
13:13:40 UTC (rev 16082)
@@ -19,8 +19,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-
-
package org.richfaces.cdk.parser.el.node;
import java.lang.reflect.Type;
@@ -36,11 +34,10 @@
* This class extend AbstractTreeNode and wrap AstDeferredExpression node.
*
* @author amarkhel
- *
*/
public class AstDeferredOrDynamicExpressionTreeNode extends AbstractTreeNode {
-
- public AstDeferredOrDynamicExpressionTreeNode(Node node) {
+
+ public AstDeferredOrDynamicExpressionTreeNode(Node node) {
super(node);
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstFunctionTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstFunctionTreeNode.java 2009-12-07
13:13:26 UTC (rev 16081)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstFunctionTreeNode.java 2009-12-07
13:13:40 UTC (rev 16082)
@@ -19,8 +19,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-
-
package org.richfaces.cdk.parser.el.node;
import java.lang.reflect.Type;
@@ -37,7 +35,6 @@
* This class extend AbstractTreeNode and wrap AstFunction node.
*
* @author amarkhel
- *
*/
public class AstFunctionTreeNode extends AbstractTreeNode {
public AstFunctionTreeNode(Node node) {
@@ -48,17 +45,17 @@
public void visit(StringBuilder sb, Map<String, Type> context, ELVisitor
visitor) throws ParsingException {
AstFunction functionNode = (AstFunction) getNode();
String functionPrefix = functionNode.getPrefix();
- String functionName = functionNode.getLocalName();
+ String functionName = functionNode.getLocalName();
- if (functionPrefix != null && functionPrefix.length() != 0) {
- //TODO: this should be a property getter, not property name
- //TODO: support "super" keyword
- sb.append(functionPrefix);
- } else {
- sb.append(ELNodeConstants.THIS_PREFIX);
- }
- sb.append(ELNodeConstants.DOT);
-
+ if (functionPrefix != null && functionPrefix.length() != 0) {
+ //TODO: this should be a property getter, not property name
+ //TODO: support "super" keyword
+ sb.append(functionPrefix);
+ } else {
+ sb.append(ELNodeConstants.THIS_PREFIX);
+ }
+ sb.append(ELNodeConstants.DOT);
+
sb.append(functionName);
sb.append(ELNodeConstants.LEFT_BRACKET);
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstIdentifierTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstIdentifierTreeNode.java 2009-12-07
13:13:26 UTC (rev 16081)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstIdentifierTreeNode.java 2009-12-07
13:13:40 UTC (rev 16082)
@@ -19,8 +19,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-
-
package org.richfaces.cdk.parser.el.node;
import java.lang.reflect.Type;
@@ -34,24 +32,23 @@
* This class extend AbstractTreeNode and wrap AstIdentifier node.
*
* @author amarkhel
- *
*/
public class AstIdentifierTreeNode extends AbstractTreeNode {
- public AstIdentifierTreeNode(Node node) {
- super(node);
- }
+ public AstIdentifierTreeNode(Node node) {
+ super(node);
+ }
- @Override
- public void visit(StringBuilder sb, Map<String, Type> context, ELVisitor visitor)
throws ParsingException {
- String variableName = getNode().getImage();
+ @Override
+ public void visit(StringBuilder sb, Map<String, Type> context, ELVisitor
visitor) throws ParsingException {
+ String variableName = getNode().getImage();
- Type variableType = context.get(variableName);
- if (variableType == null) {
- throw new ParsingException("No instance found in context for identifier " +
variableName);
- }
-
- //TODO: implement variable mapper like "utils" ->
"this.getUtils()"
- visitor.setVariableType(variableType);
- sb.append(variableName);
- }
+ Type variableType = context.get(variableName);
+ if (variableType == null) {
+ throw new ParsingException("No instance found in context for identifier
" + variableName);
+ }
+
+ //TODO: implement variable mapper like "utils" ->
"this.getUtils()"
+ visitor.setVariableType(variableType);
+ sb.append(variableName);
+ }
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstMethodSuffixTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstMethodSuffixTreeNode.java 2009-12-07
13:13:26 UTC (rev 16081)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstMethodSuffixTreeNode.java 2009-12-07
13:13:40 UTC (rev 16082)
@@ -19,8 +19,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-
-
package org.richfaces.cdk.parser.el.node;
import java.lang.reflect.Type;
@@ -38,25 +36,24 @@
* This class extend AbstractTreeNode and wrap AstMethodSuffix node.
*
* @author amarkhel
- *
*/
public class AstMethodSuffixTreeNode extends AbstractTreeNode {
- private static final Type[] EMPTY_TYPES_ARRAY = new Type[0];
+ private static final Type[] EMPTY_TYPES_ARRAY = new Type[0];
- public AstMethodSuffixTreeNode(Node node) {
+ public AstMethodSuffixTreeNode(Node node) {
super(node);
}
@Override
public void visit(StringBuilder sb, Map<String, Type> context, ELVisitor
visitor) throws ParsingException {
String methodName = getNode().getImage();
-
+
Class<?> objectClass =
ELParserUtils.getRawType(visitor.getVariableType());
List<Type> argumentTypes = new ArrayList<Type>();
-
+
sb.append(ELNodeConstants.DOT);
- sb.append(methodName);
+ sb.append(methodName);
sb.append(ELNodeConstants.LEFT_BRACKET);
int childrenCount = getChildrenCount();
@@ -67,16 +64,16 @@
}
String childOutput = getChildOutput(k, context, visitor);
sb.append(childOutput);
-
+
//TODO: handle generic matches -?
argumentTypes.add(visitor.getVariableType());
}
sb.append(ELNodeConstants.RIGHT_BRACKET);
-
- Type returnType = ELParserUtils.getMatchingVisibleMethodReturnType(objectClass,
methodName,
- argumentTypes.toArray(EMPTY_TYPES_ARRAY));
-
+
+ Type returnType = ELParserUtils.getMatchingVisibleMethodReturnType(objectClass,
methodName,
+ argumentTypes.toArray(EMPTY_TYPES_ARRAY));
+
visitor.setVariableType(returnType);
}
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstPropertySuffixTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstPropertySuffixTreeNode.java 2009-12-07
13:13:26 UTC (rev 16081)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstPropertySuffixTreeNode.java 2009-12-07
13:13:40 UTC (rev 16082)
@@ -19,8 +19,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-
-
package org.richfaces.cdk.parser.el.node;
import java.beans.PropertyDescriptor;
@@ -38,54 +36,53 @@
* This class extend AbstractTreeNode and wrap AstPropertySuffix node.
*
* @author amarkhel
- *
*/
public class AstPropertySuffixTreeNode extends AbstractTreeNode {
- public AstPropertySuffixTreeNode(Node node) {
+ public AstPropertySuffixTreeNode(Node node) {
super(node);
}
private final String capitalize(String propertyName) {
- char[] chars = propertyName.toCharArray();
- chars[0] = Character.toUpperCase(chars[0]);
- return new String(chars);
+ char[] chars = propertyName.toCharArray();
+ chars[0] = Character.toUpperCase(chars[0]);
+ return new String(chars);
}
-
+
private final Method getReadMethod(Class<?> clazz, String propertyName) throws
ParsingException {
if (clazz == null) {
- return null;
+ return null;
}
-
+
PropertyDescriptor propertyDescriptor =
ELParserUtils.getPropertyDescriptor(clazz, propertyName);
if (propertyDescriptor == null) {
- return null;
+ return null;
}
-
+
return propertyDescriptor.getReadMethod();
}
-
+
@Override
public void visit(StringBuilder sb, Map<String, Type> context, ELVisitor
visitor) throws ParsingException {
String propertyName = getNode().getImage();
Type variableType = visitor.getVariableType();
Class<?> clazz = ELParserUtils.getRawType(variableType);
-
+
String readMethodName;
Type readMethodReturnType;
-
+
Method readMethod = getReadMethod(clazz, propertyName);
if (readMethod != null) {
- readMethodName = readMethod.getName();
- readMethodReturnType = readMethod.getGenericReturnType();
+ readMethodName = readMethod.getName();
+ readMethodReturnType = readMethod.getGenericReturnType();
} else {
- readMethodName = ELNodeConstants.GETTER_PREFIX + capitalize(propertyName);
- readMethodReturnType = Object.class;
+ readMethodName = ELNodeConstants.GETTER_PREFIX + capitalize(propertyName);
+ readMethodReturnType = Object.class;
}
visitor.setVariableType(readMethodReturnType);
-
+
sb.append(ELNodeConstants.DOT);
sb.append(readMethodName);
sb.append(ELNodeConstants.LEFT_BRACKET);
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstValueTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstValueTreeNode.java 2009-12-07
13:13:26 UTC (rev 16081)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstValueTreeNode.java 2009-12-07
13:13:40 UTC (rev 16082)
@@ -19,8 +19,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-
-
package org.richfaces.cdk.parser.el.node;
import java.lang.reflect.Type;
@@ -34,7 +32,6 @@
* This class extend AbstractTreeNode and wrap AstValue node.
*
* @author amarkhel
- *
*/
public class AstValueTreeNode extends AbstractTreeNode {
public AstValueTreeNode(Node node) {
@@ -44,9 +41,9 @@
@Override
public void visit(StringBuilder sb, Map<String, Type> context, ELVisitor
visitor) throws ParsingException {
int childrenCount = getChildrenCount();
- for (int i = 0; i < childrenCount; i++) {
+ for (int i = 0; i < childrenCount; i++) {
String childOutput = getChildOutput(i, context, visitor);
- sb.append(childOutput);
+ sb.append(childOutput);
}
//variable type has been already set by getChildOuput()
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/BinaryArithmeticIntegerOperationTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/BinaryArithmeticIntegerOperationTreeNode.java 2009-12-07
13:13:26 UTC (rev 16081)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/BinaryArithmeticIntegerOperationTreeNode.java 2009-12-07
13:13:40 UTC (rev 16082)
@@ -31,21 +31,21 @@
*/
public class BinaryArithmeticIntegerOperationTreeNode extends
AbstractBinaryOperationTreeNode {
- /**
- * @param node
- * @param operatorString
- */
- public BinaryArithmeticIntegerOperationTreeNode(Node node, String operatorString) {
- super(node, operatorString);
- }
+ /**
+ * @param node
+ * @param operatorString
+ */
+ public BinaryArithmeticIntegerOperationTreeNode(Node node, String operatorString) {
+ super(node, operatorString);
+ }
- /* (non-Javadoc)
- * @see
org.richfaces.cdk.parser.el.node.AbstractBinaryOperationTreeNode#getOperationType(java.lang.reflect.Type,
java.lang.reflect.Type)
- */
- @Override
- protected Type getOperationType(Type firstArgumentType,
- Type secondArgumentType) {
- return Integer.TYPE;
- }
+ /* (non-Javadoc)
+ * @see
org.richfaces.cdk.parser.el.node.AbstractBinaryOperationTreeNode#getOperationType(java.lang.reflect.Type,
java.lang.reflect.Type)
+ */
+ @Override
+ protected Type getOperationType(Type firstArgumentType,
+ Type secondArgumentType) {
+ return Integer.TYPE;
+ }
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/BinaryArithmeticOperationTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/BinaryArithmeticOperationTreeNode.java 2009-12-07
13:13:26 UTC (rev 16081)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/BinaryArithmeticOperationTreeNode.java 2009-12-07
13:13:40 UTC (rev 16082)
@@ -32,28 +32,28 @@
*/
public class BinaryArithmeticOperationTreeNode extends AbstractBinaryOperationTreeNode {
- /**
- * @param node
- * @param operatorString
- */
- public BinaryArithmeticOperationTreeNode(Node node, String operatorString) {
- super(node, operatorString);
- }
+ /**
+ * @param node
+ * @param operatorString
+ */
+ public BinaryArithmeticOperationTreeNode(Node node, String operatorString) {
+ super(node, operatorString);
+ }
- /* (non-Javadoc)
- * @see
org.richfaces.cdk.parser.el.node.AbstractBinaryOperationTreeNode#getOperationType(java.lang.reflect.Type,
java.lang.reflect.Type)
- */
- @Override
- protected Type getOperationType(Type firstArgumentType,
- Type secondArgumentType) {
-
- if (ELParserUtils.isAssignmentCompatible(firstArgumentType, Double.class) ||
- ELParserUtils.isAssignmentCompatible(secondArgumentType, Double.class)) {
-
- return Double.TYPE;
- }
+ /* (non-Javadoc)
+ * @see
org.richfaces.cdk.parser.el.node.AbstractBinaryOperationTreeNode#getOperationType(java.lang.reflect.Type,
java.lang.reflect.Type)
+ */
+ @Override
+ protected Type getOperationType(Type firstArgumentType,
+ Type secondArgumentType) {
- return Integer.TYPE;
- }
+ if (ELParserUtils.isAssignmentCompatible(firstArgumentType, Double.class) ||
+ ELParserUtils.isAssignmentCompatible(secondArgumentType, Double.class)) {
+ return Double.TYPE;
+ }
+
+ return Integer.TYPE;
+ }
+
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/BinaryBooleanOperationTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/BinaryBooleanOperationTreeNode.java 2009-12-07
13:13:26 UTC (rev 16081)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/BinaryBooleanOperationTreeNode.java 2009-12-07
13:13:40 UTC (rev 16082)
@@ -31,21 +31,21 @@
*/
public class BinaryBooleanOperationTreeNode extends AbstractBinaryOperationTreeNode {
- /**
- * @param node
- * @param operatorString
- */
- public BinaryBooleanOperationTreeNode(Node node, String operatorString) {
- super(node, operatorString);
- }
+ /**
+ * @param node
+ * @param operatorString
+ */
+ public BinaryBooleanOperationTreeNode(Node node, String operatorString) {
+ super(node, operatorString);
+ }
- /* (non-Javadoc)
- * @see
org.richfaces.cdk.parser.el.node.AbstractBinaryOperationTreeNode#getOperationType(java.lang.reflect.Type,
java.lang.reflect.Type)
- */
- @Override
- protected Type getOperationType(Type firstArgumentType,
- Type secondArgumentType) {
- return Boolean.TYPE;
- }
+ /* (non-Javadoc)
+ * @see
org.richfaces.cdk.parser.el.node.AbstractBinaryOperationTreeNode#getOperationType(java.lang.reflect.Type,
java.lang.reflect.Type)
+ */
+ @Override
+ protected Type getOperationType(Type firstArgumentType,
+ Type secondArgumentType) {
+ return Boolean.TYPE;
+ }
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/ConstantValueTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/ConstantValueTreeNode.java 2009-12-07
13:13:26 UTC (rev 16081)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/ConstantValueTreeNode.java 2009-12-07
13:13:40 UTC (rev 16082)
@@ -31,37 +31,40 @@
/**
* @author Nick Belaevski
- *
*/
-public class ConstantValueTreeNode extends AbstractTreeNode {
+public final class ConstantValueTreeNode extends AbstractTreeNode {
- private final String value;
+ //XXX what class to use for null object: Void.class or null - null will be used
+ public static final ConstantValueTreeNode NULL_NODE =
+ new ConstantValueTreeNode(ELNodeConstants.NULL_VALUE, NullType.INSTANCE);
- private final Type type;
-
- //XXX what class to use for null object: Void.class or null - null will be used
- public static final ConstantValueTreeNode NULL_NODE = new
ConstantValueTreeNode(ELNodeConstants.NULL_VALUE, NullType.INSTANCE);
-
- public static final ConstantValueTreeNode TRUE_NODE = new
ConstantValueTreeNode(ELNodeConstants.TRUE_VALUE, Boolean.TYPE);
-
- public static final ConstantValueTreeNode FALSE_NODE = new
ConstantValueTreeNode(ELNodeConstants.FALSE_VALUE, Boolean.TYPE);
+ public static final ConstantValueTreeNode TRUE_NODE =
+ new ConstantValueTreeNode(ELNodeConstants.TRUE_VALUE, Boolean.TYPE);
- private ConstantValueTreeNode(String value, Type type) {
- super(null);
-
- this.value = value;
- this.type = type;
- }
+ public static final ConstantValueTreeNode FALSE_NODE =
+ new ConstantValueTreeNode(ELNodeConstants.FALSE_VALUE, Boolean.TYPE);
- /* (non-Javadoc)
- * @see org.richfaces.cdk.parser.el.node.AbstractTreeNode#visit(java.lang.StringBuilder,
java.util.Map, org.richfaces.cdk.parser.el.ELVisitor)
- */
- @Override
- public void visit(StringBuilder sb, Map<String, Type> context,
- ELVisitor visitor) throws ParsingException {
+ private final String value;
- sb.append(value);
- visitor.setVariableType(type);
- }
-
+ private final Type type;
+
+ private ConstantValueTreeNode(String value, Type type) {
+ super(null);
+
+ this.value = value;
+ this.type = type;
+ }
+
+ /* (non-Javadoc)
+ * @see
org.richfaces.cdk.parser.el.node.AbstractTreeNode#visit(java.lang.StringBuilder,
java.util.Map,
+ * org.richfaces.cdk.parser.el.ELVisitor)
+ */
+ @Override
+ public void visit(StringBuilder sb, Map<String, Type> context,
+ ELVisitor visitor) throws ParsingException {
+
+ sb.append(value);
+ visitor.setVariableType(type);
+ }
+
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererClassVisitor.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererClassVisitor.java 2009-12-07
13:13:26 UTC (rev 16081)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererClassVisitor.java 2009-12-07
13:13:40 UTC (rev 16082)
@@ -71,78 +71,81 @@
/**
* <p class="changed_added_4_0"></p>
+ *
* @author asmirnov(a)exadel.com
- *
*/
public class RendererClassVisitor implements TemplateVisitor {
- /**
- *
- */
- static final String RESPONSE_WRITER_VARIABLE = "responseWriter";
- /**
- *
- */
- static final String COMPONENT_VARIABLE = "cc";
- /**
- *
- */
- static final String THIS_VARIABLE = "this";
- /**
- *
- */
- static final String FACES_CONTEXT_VARIABLE = "facesContext";
- /**
- *
- */
- static final String CLIENT_ID_VARIABLE = "clientId";
- /**
- *
- */
- static final String RENDERER_UTILS_VARIABLE = "utils";
-
- static final String RENDERER_UTILS_CLASS_NAME =
"org.ajax4jsf.renderkit.RendererUtils";
-
- private static final Set<String> DEFAULT_NAMESPACES = new
HashSet<String>();
-
- static {
-
DEFAULT_NAMESPACES.add("http://richfaces.org/xhtml-el");
-
DEFAULT_NAMESPACES.add("http://www.w3.org/1999/xhtml");
- }
+ /**
+ *
+ */
+ static final String RESPONSE_WRITER_VARIABLE = "responseWriter";
+ /**
+ *
+ */
+ static final String COMPONENT_VARIABLE = "cc";
+ /**
+ *
+ */
+ static final String THIS_VARIABLE = "this";
+ /**
+ *
+ */
+ static final String FACES_CONTEXT_VARIABLE = "facesContext";
+ /**
+ *
+ */
+ static final String CLIENT_ID_VARIABLE = "clientId";
+ /**
+ *
+ */
+ static final String RENDERER_UTILS_VARIABLE = "utils";
- private static final String[] GUESS_PACKAGES;
-
- static {
- Class<?>[] GUESS_PACKAGES_CLASSES = {
- UIComponent.class,
- Behavior.class,
- Converter.class,
- FacesContext.class,
- Collection.class,
- Object.class
- };
-
- GUESS_PACKAGES = new String[GUESS_PACKAGES_CLASSES.length];
- int i = 0;
- for (Class<?> guessPackageClass : GUESS_PACKAGES_CLASSES) {
- GUESS_PACKAGES[i++] = guessPackageClass.getPackage().getName();
- }
- }
-
+ static final String RENDERER_UTILS_CLASS_NAME =
"org.ajax4jsf.renderkit.RendererUtils";
+
+ private static final Set<String> DEFAULT_NAMESPACES = new
HashSet<String>();
+
+ static {
+
DEFAULT_NAMESPACES.add("http://richfaces.org/xhtml-el");
+
DEFAULT_NAMESPACES.add("http://www.w3.org/1999/xhtml");
+ }
+
+ private static final String[] GUESS_PACKAGES;
+
+ static {
+ Class<?>[] guessPackagesClasses = {
+ UIComponent.class,
+ Behavior.class,
+ Converter.class,
+ FacesContext.class,
+ Collection.class,
+ Object.class
+ };
+
+ GUESS_PACKAGES = new String[guessPackagesClasses.length];
+ int i = 0;
+ for (Class<?> guessPackageClass : guessPackagesClasses) {
+ GUESS_PACKAGES[i++] = guessPackageClass.getPackage().getName();
+ }
+ }
+
private static final Map<String, Set<String>> ELEMENTS_ATTRIBUTES;
+
+ protected MethodBodyStatementsContainer currentStatement;
+
private JavaClass rendererClass;
private CompositeInterface compositeInterface;
- protected MethodBodyStatementsContainer currentStatement;
private final LinkedList<MethodBodyStatementsContainer> statements =
Lists.newLinkedList();
private Map<String, Type> localsTypesMap;
- private ClassLoader classLoader;
- private boolean isAddedMethodForConversionToString;
- private boolean isAddedMethodForCheckingEmptiness;
-
+ private ClassLoader classLoader;
+ private boolean isAddedMethodForConversionToString;
+ private boolean isAddedMethodForCheckingEmptiness;
+
static {
- InputStream serializedAttributesStream =
RendererClassVisitor.class.getResourceAsStream("/META-INF/schema/attributes.ser");
+ InputStream serializedAttributesStream =
+
RendererClassVisitor.class.getResourceAsStream("/META-INF/schema/attributes.ser");
try {
@@ -163,80 +166,85 @@
}
}
}
-
- private void initializeJavaClass() {
- this.rendererClass = createJavaClassByName(compositeInterface.getJavaClass());
- this.rendererClass.addModifier(JavaModifier.PUBLIC);
+
+ public RendererClassVisitor(CompositeInterface compositeInterface, ClassLoader
classLoader) {
+ this.compositeInterface = compositeInterface;
+ this.classLoader = classLoader;
+ }
+
+ private void initializeJavaClass() {
+ this.rendererClass = createJavaClassByName(compositeInterface.getJavaClass());
+ this.rendererClass.addModifier(JavaModifier.PUBLIC);
this.rendererClass.setSuperClass(createJavaClassByName(compositeInterface.getBaseClass()));
this.rendererClass.addImport(FacesContext.class);
- this.rendererClass.addImport(ResponseWriter.class);
+ this.rendererClass.addImport(ResponseWriter.class);
this.rendererClass.addImport(UIComponent.class);
- this.rendererClass.addImport(RENDERER_UTILS_CLASS_NAME);
+ this.rendererClass.addImport(RENDERER_UTILS_CLASS_NAME);
- this.rendererClass.addAnnotation(Generated.class, "\"RichFaces
CDK\"");
- //TODO remove this after improving Java model
- this.rendererClass.addImport(Generated.class);
-
+ this.rendererClass.addAnnotation(Generated.class, "\"RichFaces
CDK\"");
+ //TODO remove this after improving Java model
+ this.rendererClass.addImport(Generated.class);
+
this.createMethodContext();
- }
+ }
private void addMethodForConversionToString() {
- if (!isAddedMethodForConversionToString) {
- isAddedMethodForConversionToString = true;
-
- JavaMethod conversionMethod = new JavaMethod("convertToString",
String.class,
- new Argument("object", Object.class));
-
- conversionMethod.addModifier(JavaModifier.PRIVATE);
- conversionMethod.addModifier(JavaModifier.FINAL);
+ if (!isAddedMethodForConversionToString) {
+ isAddedMethodForConversionToString = true;
- MethodBody conversionMethodBody = new MethodBody(conversionMethod);
- conversionMethod.setMethodBody(conversionMethodBody);
- conversionMethodBody.addStatement(new ConversionToStringMethodBodyStatement());
-
- rendererClass.addMethod(conversionMethod);
- }
+ JavaMethod conversionMethod = new JavaMethod("convertToString",
String.class,
+ new Argument("object", Object.class));
+
+ conversionMethod.addModifier(JavaModifier.PRIVATE);
+ conversionMethod.addModifier(JavaModifier.FINAL);
+
+ MethodBody conversionMethodBody = new MethodBody(conversionMethod);
+ conversionMethod.setMethodBody(conversionMethodBody);
+ conversionMethodBody.addStatement(new
ConversionToStringMethodBodyStatement());
+
+ rendererClass.addMethod(conversionMethod);
+ }
}
private void addMethodForCheckingEmptiness() {
- if (!isAddedMethodForCheckingEmptiness) {
- isAddedMethodForCheckingEmptiness = true;
+ if (!isAddedMethodForCheckingEmptiness) {
+ isAddedMethodForCheckingEmptiness = true;
- JavaMethod checkingMethod = new JavaMethod("isEmpty", boolean.class,
- new Argument("object", Object.class));
-
- checkingMethod.addModifier(JavaModifier.PRIVATE);
- checkingMethod.addModifier(JavaModifier.FINAL);
+ JavaMethod checkingMethod = new JavaMethod("isEmpty",
boolean.class,
+ new Argument("object", Object.class));
- MethodBody checkingMethodBody = new MethodBody(checkingMethod);
- checkingMethod.setMethodBody(checkingMethodBody);
- checkingMethodBody.addStatement(new EmptinessCheckingMethodBodyStatement());
-
- rendererClass.addMethod(checkingMethod);
- }
+ checkingMethod.addModifier(JavaModifier.PRIVATE);
+ checkingMethod.addModifier(JavaModifier.FINAL);
+
+ MethodBody checkingMethodBody = new MethodBody(checkingMethod);
+ checkingMethod.setMethodBody(checkingMethodBody);
+ checkingMethodBody.addStatement(new EmptinessCheckingMethodBodyStatement());
+
+ rendererClass.addMethod(checkingMethod);
+ }
}
-
+
private String compileEl(String expression, Class<?> type) {
- try {
- ELVisitor elVisitor = new ELVisitor();
- elVisitor.parse(expression, localsTypesMap);
- String parsedExpression = elVisitor.getParsedExpression();
-
- if (elVisitor.isUseConversionToString()) {
- addMethodForConversionToString();
- }
-
- if (elVisitor.isUseEmptinessCheck()) {
- addMethodForCheckingEmptiness();
- }
-
- return parsedExpression + "/* " + expression.trim() + " */";
- } catch (ParsingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- throw new RuntimeException(e.getMessage());
- }
+ try {
+ ELVisitor elVisitor = new ELVisitor();
+ elVisitor.parse(expression, localsTypesMap);
+ String parsedExpression = elVisitor.getParsedExpression();
+
+ if (elVisitor.isUseConversionToString()) {
+ addMethodForConversionToString();
+ }
+
+ if (elVisitor.isUseEmptinessCheck()) {
+ addMethodForCheckingEmptiness();
+ }
+
+ return parsedExpression + "/* " + expression.trim() + "
*/";
+ } catch (ParsingException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ throw new RuntimeException(e.getMessage());
+ }
//
// if (Boolean.class.isAssignableFrom(type)) {
// //TODO just a stub!
@@ -245,63 +253,63 @@
//
// return quote(expression) + " /* " + expression.trim() + "
*/";
}
-
- private String getElExpressionContainerType(String value) {
- // TODO Auto-generated method stub
- return Object.class.getName();
- }
- private String getElExpressionType(String value) {
- // TODO Auto-generated method stub
- return String.class.getName();
- }
-
+ private String getElExpressionContainerType(String value) {
+ // TODO Auto-generated method stub
+ return Object.class.getName();
+ }
+
+ private String getElExpressionType(String value) {
+ // TODO Auto-generated method stub
+ return String.class.getName();
+ }
+
private boolean isDefaultNamespace(String namespaceURI) {
- //TODO - another namespaces
- if (namespaceURI == null || namespaceURI.length() == 0) {
- return true;
- }
-
- if (DEFAULT_NAMESPACES.contains(namespaceURI)) {
- return true;
- }
-
- return false;
+ //TODO - another namespaces
+ if (namespaceURI == null || namespaceURI.length() == 0) {
+ return true;
+ }
+
+ if (DEFAULT_NAMESPACES.contains(namespaceURI)) {
+ return true;
+ }
+
+ return false;
}
private void createMethodContext() {
- this.currentStatement = new MethodBody();
- this.localsTypesMap = new HashMap<String, Type>();
- localsTypesMap.put(FACES_CONTEXT_VARIABLE, FacesContext.class);
- localsTypesMap.put(RESPONSE_WRITER_VARIABLE, ResponseWriter.class);
- localsTypesMap.put(CLIENT_ID_VARIABLE, String.class);
-
- //TODO: try load component class
- localsTypesMap.put(COMPONENT_VARIABLE, UIComponent.class);
- //TODO: try load renderer class
- localsTypesMap.put(THIS_VARIABLE, Renderer.class);
+ this.currentStatement = new MethodBody();
+ this.localsTypesMap = new HashMap<String, Type>();
+ localsTypesMap.put(FACES_CONTEXT_VARIABLE, FacesContext.class);
+ localsTypesMap.put(RESPONSE_WRITER_VARIABLE, ResponseWriter.class);
+ localsTypesMap.put(CLIENT_ID_VARIABLE, String.class);
+
+ //TODO: try load component class
+ localsTypesMap.put(COMPONENT_VARIABLE, UIComponent.class);
+ //TODO: try load renderer class
+ localsTypesMap.put(THIS_VARIABLE, Renderer.class);
}
-
+
private void flushToEncodeMethod(String encodeMethodName) {
- if (!this.currentStatement.isEmpty()) {
- Argument facesContextArgument = new Argument(FACES_CONTEXT_VARIABLE,
FacesContext.class);
- Argument componentArgument = new Argument(COMPONENT_VARIABLE,
UIComponent.class);
-
- JavaMethod javaMethod = new JavaMethod(encodeMethodName, facesContextArgument,
componentArgument);
- javaMethod.addModifier(JavaModifier.PUBLIC);
- javaMethod.addAnnotation(Override.class);
- javaMethod.getExceptions().add(IOException.class);
-
- MethodBody methodBody = (MethodBody) currentStatement;
- javaMethod.setMethodBody(methodBody);
-
- methodBody.addStatement(0, new EncodeMethodPrefaceStatement());
- rendererClass.addMethod(javaMethod);
- }
+ if (!this.currentStatement.isEmpty()) {
+ Argument facesContextArgument = new Argument(FACES_CONTEXT_VARIABLE,
FacesContext.class);
+ Argument componentArgument = new Argument(COMPONENT_VARIABLE,
UIComponent.class);
- createMethodContext();
+ JavaMethod javaMethod = new JavaMethod(encodeMethodName,
facesContextArgument, componentArgument);
+ javaMethod.addModifier(JavaModifier.PUBLIC);
+ javaMethod.addAnnotation(Override.class);
+ javaMethod.getExceptions().add(IOException.class);
+
+ MethodBody methodBody = (MethodBody) currentStatement;
+ javaMethod.setMethodBody(methodBody);
+
+ methodBody.addStatement(0, new EncodeMethodPrefaceStatement());
+ rendererClass.addMethod(javaMethod);
+ }
+
+ createMethodContext();
}
-
+
private JavaClass createJavaClassByName(String fullName) {
String simpleName = null;
String packageName = "";
@@ -316,144 +324,143 @@
return new JavaClass(simpleName, new JavaPackage(packageName));
}
-
+
//TODO handle arrays and generics
- private Class<?> getClasByObjectTypeName(String type) {
- Class<?> result = null;
-
- int dotIndex = type.indexOf('.');
- if (dotIndex < 0) {
- //guess type
- for (String guessPackage : GUESS_PACKAGES) {
- try {
- result = classLoader.loadClass(guessPackage + "." + type);
- break;
- } catch (ClassNotFoundException e) {
- //ignore
- }
- }
- }
-
- if (result == null) {
- try {
- classLoader.loadClass(type);
- } catch (ClassNotFoundException e) {
- //ignore
- }
- }
+ private Class<?> getClasByObjectTypeName(String type) {
+ Class<?> result = null;
- if (result == null) {
- result = Object.class;
- }
+ int dotIndex = type.indexOf('.');
+ if (dotIndex < 0) {
+ //guess type
+ for (String guessPackage : GUESS_PACKAGES) {
+ try {
+ result = classLoader.loadClass(guessPackage + "." + type);
+ break;
+ } catch (ClassNotFoundException e) {
+ //ignore
+ }
+ }
+ }
- return result;
- }
+ if (result == null) {
+ try {
+ classLoader.loadClass(type);
+ } catch (ClassNotFoundException e) {
+ //ignore
+ }
+ }
- private void defineObject(String type, String name, String initializationExpression) {
- currentStatement.addStatement(new DefineObjectStatement(type, name,
initializationExpression));
- localsTypesMap.put(name, getClasByObjectTypeName(type));
- }
-
+ if (result == null) {
+ result = Object.class;
+ }
+ return result;
+ }
+
+ private void defineObject(String type, String name, String initializationExpression)
{
+ currentStatement.addStatement(new DefineObjectStatement(type, name,
initializationExpression));
+ localsTypesMap.put(name, getClasByObjectTypeName(type));
+ }
+
protected void pushStatement(MethodBodyStatementsContainer container) {
- currentStatement.addStatement(container);
- statements.push(currentStatement);
- currentStatement = container;
+ currentStatement.addStatement(container);
+ statements.push(currentStatement);
+ currentStatement = container;
}
-
+
protected void popStatement() {
- currentStatement = statements.pop();
+ currentStatement = statements.pop();
}
- public RendererClassVisitor(CompositeInterface compositeInterface, ClassLoader
classLoader) {
- this.compositeInterface = compositeInterface;
- this.classLoader = classLoader;
- }
-
/**
* <p class="changed_added_4_0"></p>
+ *
* @return the rendererClass
*/
public JavaClass getRendererClass() {
return this.rendererClass;
}
-
+
/* (non-Javadoc)
- * @see
org.richfaces.cdk.templatecompiler.model.TemplateVisitor#startElement(org.richfaces.cdk.templatecompiler.model.CdkBodyElement)
- */
+ * @see org.richfaces.cdk.templatecompiler.model.TemplateVisitor
+ * #startElement(org.richfaces.cdk.templatecompiler.model.CdkBodyElement)
+ */
@Override
public void startElement(CdkBodyElement cdkBodyElement) throws CdkException {
- flushToEncodeMethod("encodeBegin");
+ flushToEncodeMethod("encodeBegin");
}
/* (non-Javadoc)
- * @see
org.richfaces.cdk.templatecompiler.model.TemplateVisitor#endElement(org.richfaces.cdk.templatecompiler.model.CdkBodyElement)
+ * @see org.richfaces.cdk.templatecompiler.model.TemplateVisitor
+ * #endElement(org.richfaces.cdk.templatecompiler.model.CdkBodyElement)
*/
@Override
public void endElement(CdkBodyElement cdkBodyElement) throws CdkException {
- flushToEncodeMethod("encodeChildren");
+ flushToEncodeMethod("encodeChildren");
}
/* (non-Javadoc)
- * @see
org.richfaces.cdk.templatecompiler.model.TemplateVisitor#startElement(org.richfaces.cdk.templatecompiler.model.AnyElement)
+ * @see org.richfaces.cdk.templatecompiler.model.TemplateVisitor
+ * #startElement(org.richfaces.cdk.templatecompiler.model.AnyElement)
*/
@Override
public void startElement(AnyElement anyElement) throws CdkException {
QName elementName = anyElement.getName();
Map<QName, Object> elementAttributes = anyElement.getAttributes();
-
+
if (!isDefaultNamespace(elementName.getNamespaceURI())) {
- //TODO: add support
+ //TODO: add support
}
-
+
currentStatement.addStatement(new
StartElementStatement(elementName.getLocalPart()));
-
+
if (elementAttributes != null) {
for (Map.Entry<QName, Object> attribute : elementAttributes.entrySet())
{
- QName attributeName = attribute.getKey();
- Object attributeValue = attribute.getValue();
-
- if (!isDefaultNamespace(attributeName.getNamespaceURI())) {
- //TODO: add support
-
- //TODO: optimize batch attributes encoding
- if (Template.CDK_NAMESPACE.equals(attributeName.getNamespaceURI())
&&
-
"passThroughWithExclusions".equals(attributeName.getLocalPart())) {
-
- //TODO check element namespace
- Set<String> attributeSet =
ELEMENTS_ATTRIBUTES.get(elementName.getLocalPart());
- if (attributeSet != null) {
- //make a copy of original set
- TreeSet<String> actualAttributesSet = new
TreeSet<String>(attributeSet);
-
- if (attributeValue != null) {
- String[] exclusions =
attributeValue.toString().split("\\s+");
- for (String exclusion : exclusions) {
- actualAttributesSet.remove(exclusion);
- }
- }
-
- if (!actualAttributesSet.isEmpty()) {
- currentStatement.addStatement(new
WriteAttributesSetStatement(actualAttributesSet));
- }
- }
- }
-
- //TODO: cdk:passThrough
+ QName attributeName = attribute.getKey();
+ Object attributeValue = attribute.getValue();
+
+ if (!isDefaultNamespace(attributeName.getNamespaceURI())) {
+ //TODO: add support
+
+ //TODO: optimize batch attributes encoding
+ if (Template.CDK_NAMESPACE.equals(attributeName.getNamespaceURI())
+ &&
"passThroughWithExclusions".equals(attributeName.getLocalPart())) {
+
+ //TODO check element namespace
+ Set<String> attributeSet =
ELEMENTS_ATTRIBUTES.get(elementName.getLocalPart());
+ if (attributeSet != null) {
+ //make a copy of original set
+ TreeSet<String> actualAttributesSet = new
TreeSet<String>(attributeSet);
+
+ if (attributeValue != null) {
+ String[] exclusions =
attributeValue.toString().split("\\s+");
+ for (String exclusion : exclusions) {
+ actualAttributesSet.remove(exclusion);
+ }
+ }
+
+ if (!actualAttributesSet.isEmpty()) {
+ currentStatement.addStatement(new
WriteAttributesSetStatement(actualAttributesSet));
+ }
+ }
+ }
+
+ //TODO: cdk:passThrough
} else {
- currentStatement.addStatement(new
WriteAttributeStatement(attributeName.getLocalPart(),
- compileEl(attributeValue.toString(), String.class)));
+ currentStatement.addStatement(new
WriteAttributeStatement(attributeName.getLocalPart(),
+ compileEl(attributeValue.toString(), String.class)));
}
- }
+ }
}
}
/* (non-Javadoc)
- * @see
org.richfaces.cdk.templatecompiler.model.TemplateVisitor#endElement(org.richfaces.cdk.templatecompiler.model.AnyElement)
+ * @see org.richfaces.cdk.templatecompiler.model.TemplateVisitor
+ * #endElement(org.richfaces.cdk.templatecompiler.model.AnyElement)
*/
@Override
public void endElement(AnyElement anyElement) throws CdkException {
- QName elementName = anyElement.getName();
+ QName elementName = anyElement.getName();
currentStatement.addStatement(new
EndElementStatement(elementName.getLocalPart()));
}
@@ -462,148 +469,160 @@
*/
@Override
public void visitElement(String text) throws CdkException {
- if (text != null) {
- String trimmedText = text.trim();
- if (trimmedText.length() != 0) {
- currentStatement.addStatement(new WriteTextStatement(compileEl(trimmedText,
String.class)));
- }
- }
+ if (text != null) {
+ String trimmedText = text.trim();
+ if (trimmedText.length() != 0) {
+ currentStatement.addStatement(new
WriteTextStatement(compileEl(trimmedText, String.class)));
+ }
+ }
}
/* (non-Javadoc)
- * @see
org.richfaces.cdk.templatecompiler.model.TemplateVisitor#visitElement(org.richfaces.cdk.templatecompiler.model.CdkCallElement)
+ * @see org.richfaces.cdk.templatecompiler.model.TemplateVisitor
+ * #visitElement(org.richfaces.cdk.templatecompiler.model.CdkCallElement)
*/
@Override
public void visitElement(CdkCallElement cdkCallElement) throws CdkException {
- currentStatement.addStatement(cdkCallElement.getExpression() + ";");
+ currentStatement.addStatement(cdkCallElement.getExpression() + ";");
}
/* (non-Javadoc)
- * @see
org.richfaces.cdk.templatecompiler.model.TemplateVisitor#startElement(org.richfaces.cdk.templatecompiler.model.CdkIfElement)
- */
- @Override
- public void startElement(CdkIfElement cdkIfElement) {
- String compiledTestExpression = compileEl(cdkIfElement.getTest(), Boolean.class);
-
- pushStatement(new IfElseStatement());
- pushStatement(new IfStatement(compiledTestExpression));
- }
+ * @see org.richfaces.cdk.templatecompiler.model.TemplateVisitor
+ * #startElement(org.richfaces.cdk.templatecompiler.model.CdkIfElement)
+ */
+ @Override
+ public void startElement(CdkIfElement cdkIfElement) {
+ String compiledTestExpression = compileEl(cdkIfElement.getTest(),
Boolean.class);
- /* (non-Javadoc)
- * @see
org.richfaces.cdk.templatecompiler.model.TemplateVisitor#endElement(org.richfaces.cdk.templatecompiler.model.CdkIfElement)
- */
- @Override
- public void endElement(CdkIfElement cdkIfElement) {
- popStatement();
- popStatement();
- }
-
- /* (non-Javadoc)
- * @see
org.richfaces.cdk.templatecompiler.model.TemplateVisitor#startElement(org.richfaces.cdk.templatecompiler.model.CdkChooseElement)
- */
- @Override
- public void startElement(CdkChooseElement cdkChooseElement) {
- pushStatement(new IfElseStatement());
- }
+ pushStatement(new IfElseStatement());
+ pushStatement(new IfStatement(compiledTestExpression));
+ }
- /* (non-Javadoc)
- * @see
org.richfaces.cdk.templatecompiler.model.TemplateVisitor#endElement(org.richfaces.cdk.templatecompiler.model.CdkChooseElement)
- */
- @Override
- public void endElement(CdkChooseElement cdkChooseElement) {
- popStatement();
- }
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.templatecompiler.model.TemplateVisitor
+ * #endElement(org.richfaces.cdk.templatecompiler.model.CdkIfElement)
+ */
+ @Override
+ public void endElement(CdkIfElement cdkIfElement) {
+ popStatement();
+ popStatement();
+ }
- /* (non-Javadoc)
- * @see
org.richfaces.cdk.templatecompiler.model.TemplateVisitor#startElement(org.richfaces.cdk.templatecompiler.model.CdkWhenElement)
- */
- @Override
- public void startElement(CdkWhenElement cdkWhenElement) {
- String compiledTestExpression = compileEl(cdkWhenElement.getTest(), Boolean.class);
-
- pushStatement(new IfStatement(compiledTestExpression));
- }
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.templatecompiler.model.TemplateVisitor
+ * #startElement(org.richfaces.cdk.templatecompiler.model.CdkChooseElement)
+ */
+ @Override
+ public void startElement(CdkChooseElement cdkChooseElement) {
+ pushStatement(new IfElseStatement());
+ }
- /* (non-Javadoc)
- * @see
org.richfaces.cdk.templatecompiler.model.TemplateVisitor#endElement(org.richfaces.cdk.templatecompiler.model.CdkWhenElement)
- */
- @Override
- public void endElement(CdkWhenElement cdkWhenElement) {
- popStatement();
- }
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.templatecompiler.model.TemplateVisitor
+ * #endElement(org.richfaces.cdk.templatecompiler.model.CdkChooseElement)
+ */
+ @Override
+ public void endElement(CdkChooseElement cdkChooseElement) {
+ popStatement();
+ }
- /* (non-Javadoc)
- * @see
org.richfaces.cdk.templatecompiler.model.TemplateVisitor#startElement(org.richfaces.cdk.templatecompiler.model.CdkOtherwiseElement)
- */
- @Override
- public void startElement(CdkOtherwiseElement cdkOtherwiseElement) {
- pushStatement(new IfStatement(""));
- }
-
- /* (non-Javadoc)
- * @see
org.richfaces.cdk.templatecompiler.model.TemplateVisitor#endElement(org.richfaces.cdk.templatecompiler.model.CdkOtherwiseElement)
- */
- @Override
- public void endElement(CdkOtherwiseElement cdkOtherwiseElement) {
- popStatement();
- }
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.templatecompiler.model.TemplateVisitor
+ * #startElement(org.richfaces.cdk.templatecompiler.model.CdkWhenElement)
+ */
+ @Override
+ public void startElement(CdkWhenElement cdkWhenElement) {
+ String compiledTestExpression = compileEl(cdkWhenElement.getTest(),
Boolean.class);
- /* (non-Javadoc)
- * @see
org.richfaces.cdk.templatecompiler.model.TemplateVisitor#visitElement(org.richfaces.cdk.templatecompiler.model.CdkObjectElement)
- */
- @Override
- public void visitElement(CdkObjectElement cdkObjectElement) {
- String name = cdkObjectElement.getName();
-
- String value = cdkObjectElement.getValue();
- if (value == null || value.length() == 0) {
- value = cdkObjectElement.getBodyValue();
- }
-
- String type = cdkObjectElement.getType();
+ pushStatement(new IfStatement(compiledTestExpression));
+ }
- if (value != null && value.length() != 0) {
- if (type == null || type.length() == 0) {
- type = getElExpressionType(value);
- }
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.templatecompiler.model.TemplateVisitor
+ * #endElement(org.richfaces.cdk.templatecompiler.model.CdkWhenElement)
+ */
+ @Override
+ public void endElement(CdkWhenElement cdkWhenElement) {
+ popStatement();
+ }
- value = compileEl(value, Object.class);
- }
-
- defineObject(type, name, value);
- }
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.templatecompiler.model.TemplateVisitor
+ * #startElement(org.richfaces.cdk.templatecompiler.model.CdkOtherwiseElement)
+ */
+ @Override
+ public void startElement(CdkOtherwiseElement cdkOtherwiseElement) {
+ pushStatement(new IfStatement(""));
+ }
- /* (non-Javadoc)
- * @see
org.richfaces.cdk.templatecompiler.model.TemplateVisitor#startElement(org.richfaces.cdk.templatecompiler.model.CdkForEachElement)
- */
- @Override
- public void startElement(CdkForEachElement cdkForEachElement) {
- String items = cdkForEachElement.getItems();
- String itemsExpression = compileEl(items, Iterable.class);
- pushStatement(new ForEachStatement(itemsExpression, cdkForEachElement.getVar(),
- getElExpressionContainerType(items)));
- }
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.templatecompiler.model.TemplateVisitor
+ * #endElement(org.richfaces.cdk.templatecompiler.model.CdkOtherwiseElement)
+ */
+ @Override
+ public void endElement(CdkOtherwiseElement cdkOtherwiseElement) {
+ popStatement();
+ }
- /* (non-Javadoc)
- * @see
org.richfaces.cdk.templatecompiler.model.TemplateVisitor#endElement(org.richfaces.cdk.templatecompiler.model.CdkForEachElement)
- */
- @Override
- public void endElement(CdkForEachElement cdkForEachElement) {
- popStatement();
- }
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.templatecompiler.model.TemplateVisitor
+ * #visitElement(org.richfaces.cdk.templatecompiler.model.CdkObjectElement)
+ */
+ @Override
+ public void visitElement(CdkObjectElement cdkObjectElement) {
+ String name = cdkObjectElement.getName();
- /**
- *
- */
- public void preProcess() {
+ String value = cdkObjectElement.getValue();
+ if (value == null || value.length() == 0) {
+ value = cdkObjectElement.getBodyValue();
+ }
+
+ String type = cdkObjectElement.getType();
+
+ if (value != null && value.length() != 0) {
+ if (type == null || type.length() == 0) {
+ type = getElExpressionType(value);
+ }
+
+ value = compileEl(value, Object.class);
+ }
+
+ defineObject(type, name, value);
+ }
+
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.templatecompiler.model.TemplateVisitor
+ * #startElement(org.richfaces.cdk.templatecompiler.model.CdkForEachElement)
+ */
+ @Override
+ public void startElement(CdkForEachElement cdkForEachElement) {
+ String items = cdkForEachElement.getItems();
+ String itemsExpression = compileEl(items, Iterable.class);
+ pushStatement(new ForEachStatement(itemsExpression, cdkForEachElement.getVar(),
+ getElExpressionContainerType(items)));
+ }
+
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.templatecompiler.model.TemplateVisitor
+ * #endElement(org.richfaces.cdk.templatecompiler.model.CdkForEachElement)
+ */
+ @Override
+ public void endElement(CdkForEachElement cdkForEachElement) {
+ popStatement();
+ }
+
+ /**
+ *
+ */
+ public void preProcess() {
initializeJavaClass();
- }
+ }
- /**
- *
- */
- public void postProcess() {
- flushToEncodeMethod("encodeEnd");
- }
+ /**
+ *
+ */
+ public void postProcess() {
+ flushToEncodeMethod("encodeEnd");
+ }
}