Author: nbelaevski
Date: 2010-02-07 18:53:17 -0500 (Sun, 07 Feb 2010)
New Revision: 16426
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererClassVisitor.java
Log:
https://jira.jboss.org/jira/browse/RF-7732
Service methods rendering code refactored
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 2010-02-07
23:24:12 UTC (rev 16425)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererClassVisitor.java 2010-02-07
23:53:17 UTC (rev 16426)
@@ -26,6 +26,7 @@
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
+import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
@@ -45,6 +46,7 @@
import org.richfaces.builder.model.JavaMethod;
import org.richfaces.builder.model.JavaModifier;
import org.richfaces.builder.model.MethodBody;
+import org.richfaces.builder.model.MethodBodyStatement;
import org.richfaces.builder.model.MethodBodyStatementsContainer;
import org.richfaces.cdk.CdkException;
import org.richfaces.cdk.Logger;
@@ -102,8 +104,8 @@
*/
static final String THIS_VARIABLE = "this";
/**
- *
- */
+ *
+ */
static final String SUPER_VARIABLE = "super";
/**
*
@@ -121,6 +123,81 @@
private static final Set<String> DEFAULT_NAMESPACES =
ImmutableSet.of(Template.XHTML_EL_NAMESPACE,Template.XHTML_NAMESPACE);
+ private enum ServiceMethods {
+ EMPTY_CHECK("isEmpty", boolean.class, new Argument("object",
Object.class)) {
+
+ @Override
+ public MethodBodyStatement createMethodBodyStatement() {
+ return new EmptinessCheckingMethodBodyStatement();
+ }
+
+ @Override
+ public boolean isServiceMethodRequired(ELVisitor visitor) {
+ return visitor.isUseEmptinessCheck();
+ }
+
+ },
+
+ TO_STRING_CONVERSION("convertToString", String.class, new
Argument("object",
+ Object.class)) {
+
+ @Override
+ public MethodBodyStatement createMethodBodyStatement() {
+ return new ConversionToStringMethodBodyStatement();
+ }
+
+ @Override
+ public boolean isServiceMethodRequired(ELVisitor visitor) {
+ return visitor.isUseConversionToString();
+ }
+
+ },
+
+ EQUALS_CHECK("isEqual", boolean.class, new Argument("o1",
Object.class),
+ new Argument("o2", Object.class)) {
+
+ @Override
+ public MethodBodyStatement createMethodBodyStatement() {
+ return new EqualsCheckingMethodBodyStatement();
+ }
+
+ @Override
+ public boolean isServiceMethodRequired(ELVisitor visitor) {
+ return visitor.isUseEqualsCheck();
+ }
+
+ };
+
+ private String name;
+
+ private Class<?> returnType;
+
+ private Argument[] arguments;
+
+ private ServiceMethods(String name, Class<?> returnType, Argument...
arguments) {
+ this.name = name;
+ this.returnType = returnType;
+ this.arguments = arguments;
+ }
+
+ abstract MethodBodyStatement createMethodBodyStatement();
+
+ abstract boolean isServiceMethodRequired(ELVisitor visitor);
+
+ void createMethod(JavaClass generatedClass) {
+ JavaMethod conversionMethod = new JavaMethod(name, returnType, arguments);
+
+ conversionMethod.addModifier(JavaModifier.PRIVATE);
+ conversionMethod.addModifier(JavaModifier.FINAL);
+
+ MethodBody conversionMethodBody = new MethodBody(conversionMethod);
+ conversionMethod.setMethodBody(conversionMethodBody);
+ conversionMethodBody.addStatement(createMethodBodyStatement());
+
+ generatedClass.addMethod(conversionMethod);
+ }
+ }
+
private final Logger log;
@@ -134,10 +211,9 @@
private Map<String, Type> localsTypesMap;
private ClassLoader classLoader;
- private boolean isAddedMethodForConversionToString;
- private boolean isAddedMethodForCheckingEmptiness;
- private boolean isAddedMethodForCheckingEquals;
-
+
+ private Set<ServiceMethods> addedServiceMethods =
EnumSet.noneOf(ServiceMethods.class);
+
private Type lastCompiledExpressionType;
private int passThroughCounter;
private Map<String, Property> attributes;
@@ -170,59 +246,12 @@
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);
-
- MethodBody conversionMethodBody = new MethodBody(conversionMethod);
- conversionMethod.setMethodBody(conversionMethodBody);
- conversionMethodBody.addStatement(new
ConversionToStringMethodBodyStatement());
-
- generatedClass.addMethod(conversionMethod);
+ private void addServiceMethod(ServiceMethods serviceMethod) {
+ if (addedServiceMethods.add(serviceMethod)) {
+ serviceMethod.createMethod(generatedClass);
}
}
- private void addMethodForCheckingEmptiness() {
- if (!isAddedMethodForCheckingEmptiness) {
- isAddedMethodForCheckingEmptiness = true;
-
- JavaMethod checkingMethod = new JavaMethod("isEmpty",
boolean.class, new Argument("object", Object.class));
-
- checkingMethod.addModifier(JavaModifier.PRIVATE);
- checkingMethod.addModifier(JavaModifier.FINAL);
-
- MethodBody checkingMethodBody = new MethodBody(checkingMethod);
- checkingMethod.setMethodBody(checkingMethodBody);
- checkingMethodBody.addStatement(new EmptinessCheckingMethodBodyStatement());
-
- generatedClass.addMethod(checkingMethod);
- }
- }
-
- private void addMethodForCheckingEquals() {
- if (!isAddedMethodForCheckingEquals) {
- isAddedMethodForCheckingEquals = true;
-
- JavaMethod checkingMethod = new JavaMethod("isEqual",
boolean.class, new Argument("o1", Object.class),
- new Argument("o2", Object.class));
-
- checkingMethod.addModifier(JavaModifier.PRIVATE);
- checkingMethod.addModifier(JavaModifier.FINAL);
-
- MethodBody checkingMethodBody = new MethodBody(checkingMethod);
- checkingMethod.setMethodBody(checkingMethodBody);
- checkingMethodBody.addStatement(new EqualsCheckingMethodBodyStatement());
-
- generatedClass.addMethod(checkingMethod);
- }
- }
-
private String compileEl(String expression, Class<?> type) {
try {
ELVisitor elVisitor = new ELVisitor();
@@ -231,18 +260,12 @@
lastCompiledExpressionType = elVisitor.getVariableType();
String parsedExpression = elVisitor.getParsedExpression();
- if (elVisitor.isUseConversionToString()) {
- addMethodForConversionToString();
+ for (ServiceMethods serviceMethod : ServiceMethods.values()) {
+ if (serviceMethod.isServiceMethodRequired(elVisitor)) {
+ addServiceMethod(serviceMethod);
+ }
}
- if (elVisitor.isUseEmptinessCheck()) {
- addMethodForCheckingEmptiness();
- }
-
- if (elVisitor.isUseEqualsCheck()) {
- addMethodForCheckingEquals();
- }
-
return parsedExpression + "/* " + expression.trim() + "
*/";
} catch (ParsingException e) {
// TODO Auto-generated catch block
@@ -322,7 +345,8 @@
public String apply(EventName from) {
return from.getName();
}
- });
+ }
+ );
sb.append(StringUtils.getEscapedStringsArray(eventNamesStrings));