Author: alexsmirnov
Date: 2011-01-11 15:06:50 -0500 (Tue, 11 Jan 2011)
New Revision: 20955
Modified:
trunk/cdk/generator/src/main/java/org/richfaces/cdk/generate/freemarker/FreeMakerUtils.java
trunk/cdk/generator/src/main/java/org/richfaces/cdk/generate/freemarker/LibraryModelWrapper.java
trunk/cdk/generator/src/main/resources/META-INF/templates/_attribute_accessors.ftl
trunk/cdk/generator/src/main/resources/META-INF/templates/_attributes.ftl
trunk/cdk/generator/src/main/resources/META-INF/templates/_state-holder-methods.ftl
trunk/cdk/generator/src/main/resources/META-INF/templates/component.ftl
trunk/cdk/maven-cdk-plugin/src/it/annotated-component/src/main/java/org/richfaces/cdk/test/component/AbstractTestComponent.java
Log:
RESOLVED - issue RF-8898: CDK could generate object names that conflict with Java
keywords.
https://issues.jboss.org/browse/RF-8898
Modified:
trunk/cdk/generator/src/main/java/org/richfaces/cdk/generate/freemarker/FreeMakerUtils.java
===================================================================
---
trunk/cdk/generator/src/main/java/org/richfaces/cdk/generate/freemarker/FreeMakerUtils.java 2011-01-11
19:38:55 UTC (rev 20954)
+++
trunk/cdk/generator/src/main/java/org/richfaces/cdk/generate/freemarker/FreeMakerUtils.java 2011-01-11
20:06:50 UTC (rev 20955)
@@ -28,8 +28,10 @@
import org.richfaces.cdk.util.Strings;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
import freemarker.template.SimpleScalar;
+import freemarker.template.TemplateBooleanModel;
import freemarker.template.TemplateHashModel;
import freemarker.template.TemplateMethodModel;
import freemarker.template.TemplateMethodModelEx;
@@ -43,6 +45,17 @@
*/
public class FreeMakerUtils implements TemplateHashModel {
+ private static final ImmutableSet<String> KEYWORDS =
ImmutableSet.of("abstract", "continue", "for",
"new", "switch",
+ "assert", "default", "goto",
"package", "synchronized",
+ "boolean", "do", "if", "private",
"this",
+ "break", "double", "implements",
"protected", "throw",
+ "byte", "else", "import",
"public", "throws",
+ "case", "enum", "instanceof",
"return", "transient",
+ "catch", "extends", "int", "short",
"try",
+ "char", "final", "interface",
"static", "void",
+ "class", "finally", "long",
"strictfp", "volatile",
+ "const", "float", "native", "super",
"while" );
+
private static final ImmutableMap<String, ? extends TemplateMethodModel>
FUNCTIONS = ImmutableMap.<String, TemplateMethodModel>builder().
put("version", new TemplateMethodModelEx() {
@SuppressWarnings("unchecked")
@@ -62,6 +75,17 @@
}
}
}).
+ put("isKeyword", new TemplateMethodModel() {
+ @SuppressWarnings("unchecked")
+ @Override
+ public Object exec(List arguments) throws TemplateModelException {
+ if (arguments.size() == 1) {
+ return
KEYWORDS.contains(arguments.get(0).toString())?TemplateBooleanModel.TRUE:TemplateBooleanModel.FALSE;
+ } else {
+ return null;
+ }
+ }
+ }).
build();
/* (non-Javadoc)
* @see freemarker.template.TemplateHashModel#get(java.lang.String)
Modified:
trunk/cdk/generator/src/main/java/org/richfaces/cdk/generate/freemarker/LibraryModelWrapper.java
===================================================================
---
trunk/cdk/generator/src/main/java/org/richfaces/cdk/generate/freemarker/LibraryModelWrapper.java 2011-01-11
19:38:55 UTC (rev 20954)
+++
trunk/cdk/generator/src/main/java/org/richfaces/cdk/generate/freemarker/LibraryModelWrapper.java 2011-01-11
20:06:50 UTC (rev 20955)
@@ -54,7 +54,7 @@
public LibraryModelWrapper() {
super();
- setStrict(true);
+// setStrict(true);
setSimpleMapWrapper(true);
// setNullModel(TemplateScalarModel.EMPTY_STRING);
setUseCache(true);
Modified:
trunk/cdk/generator/src/main/resources/META-INF/templates/_attribute_accessors.ftl
===================================================================
---
trunk/cdk/generator/src/main/resources/META-INF/templates/_attribute_accessors.ftl 2011-01-11
19:38:55 UTC (rev 20954)
+++
trunk/cdk/generator/src/main/resources/META-INF/templates/_attribute_accessors.ftl 2011-01-11
20:06:50 UTC (rev 20955)
@@ -4,17 +4,21 @@
<#else>
<#assign propertyKey=attribute.name>
</#if>
+<#if utils.isKeyword(propertyKey) >
+ <#assign propertyKey>${propertyKey}Value</#assign>
+</#if>
public ${attribute.typeName} ${attribute.getterName}() {
<#if attribute.bindingAttribute || attribute.literal >
- return (${attribute.typeForCasting})
getStateHelper().get(Properties.${propertyKey});
+ ${attribute.typeForCasting} value = (${attribute.typeForCasting})
getStateHelper().get(Properties.${propertyKey});
<#else>
- return (${attribute.typeForCasting})
getStateHelper().eval(Properties.${propertyKey}<#if attribute.defaultValue?exists>,
${attribute.defaultValue}</#if>);
+ ${attribute.typeForCasting} value = (${attribute.typeForCasting})
getStateHelper().eval(Properties.${propertyKey}<#if attribute.defaultValue?exists>,
${attribute.defaultValue}</#if>);
</#if>
+ return value;
}
<#if ! attribute.readOnly >
- public void ${attribute.setterName}(${attribute.typeName} ${attribute.name}) {
- getStateHelper().put(Properties.${propertyKey}, ${attribute.name});
+ public void ${attribute.setterName}(${attribute.typeName} ${propertyKey}) {
+ getStateHelper().put(Properties.${propertyKey}, ${propertyKey});
}
</#if>
\ No newline at end of file
Modified: trunk/cdk/generator/src/main/resources/META-INF/templates/_attributes.ftl
===================================================================
--- trunk/cdk/generator/src/main/resources/META-INF/templates/_attributes.ftl 2011-01-11
19:38:55 UTC (rev 20954)
+++ trunk/cdk/generator/src/main/resources/META-INF/templates/_attributes.ftl 2011-01-11
20:06:50 UTC (rev 20955)
@@ -1,16 +1,21 @@
+<#assign hasKeyword=false/>
protected enum Properties {
- <#list generatedAttributes as attribute>${attribute.name}<#if
attribute_has_next>${",\n "}</#if></#list>
+ <@util.concat seq=generatedAttributes delimiter=",\n ";
attribute>${attribute.name}<#if
utils.isKeyword(attribute.name)>Value("${attribute.name}")<#assign
hasKeyword=true/></#if></(a)util.concat>
+ <#if hasKeyword>;
+ String toString;
+
+ Properties(String toString) {
+ this.toString = toString;
}
+ Properties() {
+ }
+
+ public String toString() {
+ return ((this.toString != null) ? this.toString : super.toString());
+ }</#if>
+ }
+
<#list generatedAttributes as attribute>
<#include "_attribute_accessors.ftl">
</#list>
-
- private StateHelper stateHelper = null;
-
- protected StateHelper getStateHelper() {
- if (stateHelper == null) {
- stateHelper = new PartialStateHolderHelper(this);
- }
- return stateHelper;
- }
\ No newline at end of file
Modified:
trunk/cdk/generator/src/main/resources/META-INF/templates/_state-holder-methods.ftl
===================================================================
---
trunk/cdk/generator/src/main/resources/META-INF/templates/_state-holder-methods.ftl 2011-01-11
19:38:55 UTC (rev 20954)
+++
trunk/cdk/generator/src/main/resources/META-INF/templates/_state-holder-methods.ftl 2011-01-11
20:06:50 UTC (rev 20955)
@@ -1,3 +1,12 @@
+ private StateHelper stateHelper = null;
+
+ protected StateHelper getStateHelper() {
+ if (stateHelper == null) {
+ stateHelper = new PartialStateHolderHelper(this);
+ }
+ return stateHelper;
+ }
+
// ----------------------------------------------------- StateHolder Methods
@Override
public Object saveState(FacesContext context) {
Modified: trunk/cdk/generator/src/main/resources/META-INF/templates/component.ftl
===================================================================
--- trunk/cdk/generator/src/main/resources/META-INF/templates/component.ftl 2011-01-11
19:38:55 UTC (rev 20954)
+++ trunk/cdk/generator/src/main/resources/META-INF/templates/component.ftl 2011-01-11
20:06:50 UTC (rev 20955)
@@ -1,6 +1,3 @@
-<#macro concat seq delimiter=",">
-<#list seq as item><#nested item/><#if
item_has_next>${delimiter}</#if></#list>
-</#macro>
<#include "_copyright.ftl">
package ${targetClass.package};
@@ -26,7 +23,7 @@
**/
@Generated({"RichFaces CDK", "4.0.0-SNAPSHOT"})
public class ${targetClass.simpleName} extends ${baseClass.simpleName}
- <#if (implemented?size > 0)>implements <@concat seq=implemented ;
interface>${interface.simpleName}</@concat></#if> {
+ <#if (implemented?size > 0)>implements <@util.concat seq=implemented ;
interface>${interface.simpleName}</(a)util.concat></#if> {
public static final String COMPONENT_TYPE="${id}";
@@ -46,7 +43,7 @@
<#if (eventNames?size > 0)>
private static final Collection<String> EVENT_NAMES =
Collections.unmodifiableCollection(Arrays.asList(
- <@concat seq=eventNames delimiter=",\n ";
event>"${event.name}"</@concat>
+ <@util.concat seq=eventNames delimiter=",\n ";
event>"${event.name}"</(a)util.concat>
));
public Collection<String> getEventNames() {
@@ -58,13 +55,9 @@
return <#if
defaultEvent?exists>"${defaultEvent.name}"<#else>null</#if>;
}</#if>
- protected static enum Properties {
- <@concat seq=generatedAttributes delimiter=",\n ";
attribute>${attribute.name}</@concat>
- }
- <#list generatedAttributes as attribute>
- <#include "_attribute_accessors.ftl">
- </#list>
+ <#include "_attributes.ftl">
+
<#list events as event>
<#include "_event_source_accessors.ftl">
</#list>
Modified:
trunk/cdk/maven-cdk-plugin/src/it/annotated-component/src/main/java/org/richfaces/cdk/test/component/AbstractTestComponent.java
===================================================================
---
trunk/cdk/maven-cdk-plugin/src/it/annotated-component/src/main/java/org/richfaces/cdk/test/component/AbstractTestComponent.java 2011-01-11
19:38:55 UTC (rev 20954)
+++
trunk/cdk/maven-cdk-plugin/src/it/annotated-component/src/main/java/org/richfaces/cdk/test/component/AbstractTestComponent.java 2011-01-11
20:06:50 UTC (rev 20955)
@@ -90,6 +90,11 @@
public abstract List<String> getTestValue();
/**
+ * Keyword Attribute
+ */
+ @Attribute
+ public abstract String getFor();
+ /**
* Bar Attribute
*/
@Attribute