Author: nbelaevski
Date: 2009-12-16 10:50:42 -0500 (Wed, 16 Dec 2009)
New Revision: 16153
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/Type.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AbstractMethodTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/ParameterizedTypeImpl.java
Removed:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/NullType.java
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkClassLoader.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkContextBase.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/DummyBuilder.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/ModelBuilder.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/AptBuilder.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessor.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/SourceUtils.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/freemarker/ComponentTemplateModel.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/freemarker/LibraryModelWrapper.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ComponentLibrary.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ModelCollection.java
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/node/AbstractBinaryOperationTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AbstractTreeNode.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/AstChoiceTreeNode.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/AstEmptyTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstFloatingPointTreeNode.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/AstIntegerTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstLiteralTreeNode.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/AstNegativeTreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstNotTreeNode.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/AstStringTreeNode.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/parser/el/node/ITreeNode.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/DefineObjectStatement.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererClassGenerator.java
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/RendererTemplateParser.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/model/CdkObjectElement.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigGenerator.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigParser.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FragmentParser.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/JAXBBinding.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/AdapterBase.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/BehaviorRendererAdapter.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/BehaviorRendererBean.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ClassAdapter.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ClassBean.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ComponentAdapter.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ComponentBean.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/DescriptionGroupBean.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/EventAdapter.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/EventBean.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacesConfigAdapter.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacesConfigBean.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacetAdapter.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacetBean.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/Fragment.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/PropertyBase.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/RenderKitAdapter.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/RenderKitBean.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/RendererAdapter.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/RendererBean.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/package-info.java
Log:
https://jira.jboss.org/jira/browse/RF-7732
Fixed NPE in CDK
Fixed CheckStyle errors in CDK
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkClassLoader.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkClassLoader.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkClassLoader.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -27,7 +27,6 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
-import java.util.Collection;
import java.util.Set;
import com.google.common.collect.ImmutableSet;
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkContextBase.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkContextBase.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkContextBase.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -25,14 +25,12 @@
package org.richfaces.cdk;
-import com.google.common.collect.ClassToInstanceMap;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.MutableClassToInstanceMap;
+import java.io.File;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
-import org.richfaces.cdk.CdkContext.SourceType;
-import org.richfaces.cdk.CdkContext.OutputType;
import org.richfaces.cdk.generate.java.ComponentClassGenerator;
import org.richfaces.cdk.model.ComponentLibrary;
import org.richfaces.cdk.templatecompiler.RendererClassGenerator;
@@ -40,13 +38,12 @@
import org.richfaces.cdk.xmlconfig.FacesConfigGenerator;
import org.richfaces.cdk.xmlconfig.FacesConfigParser;
-import java.io.File;
-import java.io.IOException;
+import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.MutableClassToInstanceMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
/**
* <p class="changed_added_4_0">Base CDK context class. Particular build
tool ( Ant, Maven ) should extend that class with
* tool-specific methods.</p>
@@ -54,14 +51,7 @@
*
*/
public class CdkContextBase implements CdkContext {
- private Map<String, String> options = Maps.newHashMap();
- private Map<SourceType, Iterable<File>> sources = Maps.newHashMap();
- private Map<OutputType, File> outputs = Maps.newHashMap();
- private Map<SourceType, Iterable<File>> inputFolders =
Maps.newHashMap();
- private ClassToInstanceMap<CdkWorker> workers =
MutableClassToInstanceMap.create();
- private List<CdkProcessingException> errors = Lists.newArrayList();
- private final CdkClassLoader loader;
- private ComponentLibrary library;
+
/* Map contains writer classes for standard outputs.
*/
static final ImmutableMap<OutputType, Class<? extends CdkWriter>> WRITERS
=
@@ -77,6 +67,15 @@
FacesConfigParser.class).put(StandardSources.RENDERER_TEMPLATES,
RendererTemplateParser.class).build();
+ private Map<String, String> options = Maps.newHashMap();
+ private Map<SourceType, Iterable<File>> sources = Maps.newHashMap();
+ private Map<OutputType, File> outputs = Maps.newHashMap();
+ private Map<SourceType, Iterable<File>> inputFolders =
Maps.newHashMap();
+ private ClassToInstanceMap<CdkWorker> workers =
MutableClassToInstanceMap.create();
+ private List<CdkProcessingException> errors = Lists.newArrayList();
+ private final CdkClassLoader loader;
+ private ComponentLibrary library;
+
public CdkContextBase(CdkClassLoader loader) {
this.loader = loader;
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/DummyBuilder.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/DummyBuilder.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/DummyBuilder.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -25,7 +25,6 @@
package org.richfaces.cdk;
-import org.richfaces.cdk.model.ComponentLibrary;
/**
* <p class="changed_added_4_0">This is dummy model builder class for not
yet implemented source types</p>
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/ModelBuilder.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/ModelBuilder.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/ModelBuilder.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -21,27 +21,32 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-
-
package org.richfaces.cdk;
-import org.richfaces.cdk.model.ComponentLibrary;
-
/**
- * <p class="changed_added_4_0">Interface for {@link ComponentLibrary}
model builder.</p>
+ * <p class="changed_added_4_0">
+ * Interface for {@link org.richfaces.cdk.model.ComponentLibrary.ComponentLibrary} model
builder.
+ * </p>
+ *
* @author asmirnov(a)exadel.com
- *
+ *
*/
public interface ModelBuilder extends CdkWorker {
/**
- * <p class="changed_added_4_0">Initialize builder.</p>
+ * <p class="changed_added_4_0">
+ * Initialize builder.
+ * </p>
+ *
* @param context
*/
public void init(CdkContext context);
/**
- * <p class="changed_added_4_0">Build library model.</p>
+ * <p class="changed_added_4_0">
+ * Build library model.
+ * </p>
+ *
* @throws CdkException
*/
public void build() throws CdkException;
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/AptBuilder.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/AptBuilder.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/AptBuilder.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -27,10 +27,6 @@
import java.io.File;
import java.io.IOException;
-
-import java.net.URL;
-import java.net.URLClassLoader;
-
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -38,7 +34,6 @@
import java.util.Locale;
import javax.annotation.processing.Processor;
-
import javax.tools.Diagnostic;
import javax.tools.DiagnosticListener;
import javax.tools.JavaCompiler;
@@ -53,13 +48,10 @@
import org.richfaces.cdk.CdkContext;
import org.richfaces.cdk.CdkException;
import org.richfaces.cdk.CdkWorker;
-import org.richfaces.cdk.LibraryBuilder;
import org.richfaces.cdk.Logger;
import org.richfaces.cdk.LoggerFactory;
-import org.richfaces.cdk.ModelBuilder;
import org.richfaces.cdk.StandardOutputs;
import org.richfaces.cdk.StandardSources;
-import org.richfaces.cdk.model.ComponentLibrary;
import com.google.common.collect.Lists;
@@ -111,16 +103,16 @@
StandardJavaFileManager stdFileManager =
javaCompiler.getStandardFileManager(null, null, null);
try {
- stdFileManager.setLocation(StandardLocation.CLASS_PATH,
classPathLoader.getFiles());
- File outputFolder = context.getOutputFolder(StandardOutputs.COMPONENT_CLASSES);
- if (null != outputFolder) {
-
stdFileManager.setLocation(StandardLocation.SOURCE_OUTPUT,Collections.singleton(outputFolder));
- }
- Iterable<File> sourceFolders =
context.getSourceFolders(StandardSources.JAVA_SOURCES);
+ stdFileManager.setLocation(StandardLocation.CLASS_PATH,
classPathLoader.getFiles());
+ File outputFolder =
context.getOutputFolder(StandardOutputs.COMPONENT_CLASSES);
+ if (null != outputFolder) {
+
stdFileManager.setLocation(StandardLocation.SOURCE_OUTPUT,Collections.singleton(outputFolder));
+ }
+ Iterable<File> sourceFolders =
context.getSourceFolders(StandardSources.JAVA_SOURCES);
- if (null != sourceFolders && sourceFolders.iterator().hasNext()) {
- stdFileManager.setLocation(StandardLocation.SOURCE_PATH, sourceFolders);
- }
+ if (null != sourceFolders && sourceFolders.iterator().hasNext()) {
+ stdFileManager.setLocation(StandardLocation.SOURCE_PATH, sourceFolders);
+ }
} catch (IOException e) {
throw new CdkException(e);
}
@@ -160,15 +152,15 @@
Iterable<? extends JavaFileObject> sourceObjects =
getFileManager().getJavaFileObjectsFromFiles(sources);
- CompilationTask task = getJavaCompiler().getTask(null, getFileManager(),
listener, getOptions(), null,
- sourceObjects);
+ CompilationTask task = getJavaCompiler().getTask(null, getFileManager(),
listener, getOptions(), null,
+ sourceObjects);
- task.setProcessors(Arrays.asList(processors));
- task.setLocale(locale);
+ task.setProcessors(Arrays.asList(processors));
+ task.setLocale(locale);
- if (!task.call()) {
- throw new AptException("Compilation error: " + messages);
- }
+ if (!task.call()) {
+ throw new AptException("Compilation error: " + messages);
+ }
}
/**
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessor.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessor.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessor.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -25,40 +25,29 @@
package org.richfaces.cdk.apt;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Sets;
+import java.lang.annotation.Annotation;
+import java.util.Collections;
+import java.util.Set;
+import javax.annotation.processing.AbstractProcessor;
+import javax.annotation.processing.RoundEnvironment;
+import javax.faces.component.FacesComponent;
+import javax.lang.model.SourceVersion;
+import javax.lang.model.element.TypeElement;
+
import org.richfaces.cdk.CdkContext;
import org.richfaces.cdk.CdkException;
import org.richfaces.cdk.CdkProcessingException;
import org.richfaces.cdk.CdkWorker;
-import org.richfaces.cdk.NamingConventions;
import org.richfaces.cdk.StandardOutputs;
import org.richfaces.cdk.StandardSources;
import org.richfaces.cdk.CdkContext.OutputType;
import org.richfaces.cdk.annotations.Behavior;
import org.richfaces.cdk.annotations.Component;
-import org.richfaces.cdk.model.ComponentLibrary;
-import org.richfaces.cdk.model.InvalidNameException;
import org.richfaces.cdk.util.Pair;
-import org.richfaces.cdk.util.PropertyUtils;
-import org.richfaces.cdk.xmlconfig.FragmentParser;
-import javax.annotation.processing.AbstractProcessor;
-import javax.annotation.processing.RoundEnvironment;
-import javax.faces.component.FacesComponent;
+import com.google.common.collect.ImmutableList;
-import javax.lang.model.SourceVersion;
-import javax.lang.model.element.*;
-import javax.lang.model.type.TypeKind;
-import javax.lang.model.type.TypeMirror;
-
-import java.lang.annotation.Annotation;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-
/**
* <p class="changed_added_4_0">
* Base class for all CDK Annotation processors. That class provides access to
@@ -69,13 +58,13 @@
*
*/
public class CdkProcessor extends AbstractProcessor implements CdkWorker {
-
+
private static final Set<String> ANY_ANNOTATION =
Collections.singleton("*");
- private static final ImmutableList<Pair<? extends Class<? extends
Annotation>, ? extends Class<? extends CdkAnnotationProcessor>>> processors
= ImmutableList
- .of(Pair.of(Component.class, ComponentProcessor.class),
- Pair.of(FacesComponent.class, FacesComponentProcessor.class),
- Pair.of(Behavior.class, BehaviorProcessor.class));
+ private static final ImmutableList<Pair<? extends Class<? extends
Annotation>, ? extends Class<? extends CdkAnnotationProcessor>>> PROCESSORS
= ImmutableList
+ .of(Pair.of(Component.class, ComponentProcessor.class),
+ Pair.of(FacesComponent.class, FacesComponentProcessor.class),
+ Pair.of(Behavior.class, BehaviorProcessor.class));
/**
* <p class="changed_added_4_0">
@@ -96,7 +85,7 @@
this.context = context;
}
-
+
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
roundEnv) {
SourceUtils sourceUtils = new SourceUtils(this.processingEnv,roundEnv);
@@ -104,7 +93,7 @@
getContext().setWorker(SourceUtils.class, sourceUtils);
if(!roundEnv.processingOver()){
// Process annotations.
- for (Pair<? extends Class<? extends Annotation>, ? extends
Class<? extends CdkAnnotationProcessor>> process : processors) {
+ for (Pair<? extends Class<? extends Annotation>, ? extends
Class<? extends CdkAnnotationProcessor>> process : PROCESSORS) {
processAnnotation(process.getFirst(), process.getSecond());
}
// parse non-java sources
@@ -136,7 +125,7 @@
protected void sendError(TypeElement componentElement, CdkProcessingException e) {
// rise error and continue.
processingEnv.getMessager().printMessage(javax.tools.Diagnostic.Kind.ERROR,
e.getMessage(),
- componentElement);
+ componentElement);
getContext().sendError(e);
}
/**
@@ -148,7 +137,7 @@
protected CdkContext getContext() {
return context;
}
-
+
@Override
public Set<String> getSupportedAnnotationTypes() {
return ANY_ANNOTATION;
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -25,12 +25,35 @@
package org.richfaces.cdk.apt;
-import com.google.common.collect.Lists;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.faces.event.FacesEvent;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.MirroredTypesException;
+import javax.lang.model.type.TypeMirror;
+
import org.richfaces.cdk.CdkContext;
import org.richfaces.cdk.CdkException;
import org.richfaces.cdk.NamingConventions;
-import org.richfaces.cdk.annotations.*;
+import org.richfaces.cdk.annotations.Attribute;
+import org.richfaces.cdk.annotations.Attributes;
+import org.richfaces.cdk.annotations.Component;
+import org.richfaces.cdk.annotations.DefaultValue;
+import org.richfaces.cdk.annotations.DisplayName;
+import org.richfaces.cdk.annotations.EventName;
+import org.richfaces.cdk.annotations.EventNames;
+import org.richfaces.cdk.annotations.Facet;
+import org.richfaces.cdk.annotations.Facets;
+import org.richfaces.cdk.annotations.Family;
+import org.richfaces.cdk.annotations.Fires;
+import org.richfaces.cdk.annotations.Generate;
+import org.richfaces.cdk.annotations.Icon;
+import org.richfaces.cdk.annotations.Signature;
+import org.richfaces.cdk.annotations.SuggestedValue;
import org.richfaces.cdk.apt.SourceUtils.BeanProperty;
import org.richfaces.cdk.apt.SourceUtils.SuperTypeVisitor;
import org.richfaces.cdk.model.ClassDescription;
@@ -42,21 +65,8 @@
import org.richfaces.cdk.xmlconfig.CdkEntityResolver;
import org.richfaces.cdk.xmlconfig.FragmentParser;
-import javax.annotation.processing.RoundEnvironment;
-import javax.annotation.processing.SupportedAnnotationTypes;
+import com.google.common.collect.Lists;
-import javax.faces.event.FacesEvent;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.MirroredTypesException;
-import javax.lang.model.type.TypeMirror;
-import javax.lang.model.util.ElementFilter;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
/**
* <p class="changed_added_4_0">That class process component-related
annotations such as {@link Component} or
* {@link javax.faces.component.FacesComponent} and stores information in model.
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/SourceUtils.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/SourceUtils.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/SourceUtils.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -40,12 +40,10 @@
import javax.lang.model.util.ElementFilter;
import org.richfaces.cdk.CdkContext;
-import org.richfaces.cdk.CdkException;
import org.richfaces.cdk.CdkWorker;
import org.richfaces.cdk.model.InvalidNameException;
import org.richfaces.cdk.util.PropertyUtils;
-import com.google.common.base.Function;
import com.google.common.collect.Sets;
/**
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/freemarker/ComponentTemplateModel.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/freemarker/ComponentTemplateModel.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/freemarker/ComponentTemplateModel.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -26,8 +26,6 @@
package org.richfaces.cdk.freemarker;
import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
@@ -37,14 +35,11 @@
import org.richfaces.cdk.model.Property;
import com.google.common.base.Predicate;
-import com.google.common.collect.Collections2;
import com.google.common.collect.Iterables;
-import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import freemarker.ext.beans.BeanModel;
import freemarker.ext.beans.BeansWrapper;
-
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
@@ -135,7 +130,7 @@
private TemplateModel attributes() throws TemplateModelException {
ArrayList<PropertyModel> models = new ArrayList<PropertyModel>();
for (Map.Entry<String, Property> entry :
component.getAttributes().entrySet()) {
- models.add(new PropertyModel(entry.getKey(), entry.getValue(),
wrapper));
+ models.add(new PropertyModel(entry.getKey(), entry.getValue(), wrapper));
}
return wrapper.wrap(models);
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/freemarker/LibraryModelWrapper.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/freemarker/LibraryModelWrapper.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/freemarker/LibraryModelWrapper.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -25,15 +25,13 @@
package org.richfaces.cdk.freemarker;
-import freemarker.ext.beans.BeansWrapper;
+import org.richfaces.cdk.model.Component;
+import freemarker.ext.beans.BeansWrapper;
import freemarker.template.ObjectWrapper;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
-import org.richfaces.cdk.model.Component;
-import org.richfaces.cdk.model.Property;
-
/**
* <p class="changed_added_4_0"></p>
* @author asmirnov(a)exadel.com
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ComponentLibrary.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ComponentLibrary.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ComponentLibrary.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -28,12 +28,9 @@
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
-
import java.io.Serializable;
-
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-
import java.util.Collection;
import java.util.Map;
import java.util.NoSuchElementException;
@@ -45,9 +42,6 @@
import org.richfaces.cdk.CdkException;
import org.richfaces.cdk.model.RenderKit.Id;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-
/**
* <p class="changed_added_4_0">
* That class contains model of all JSF components asscoiated with that project
@@ -81,9 +75,9 @@
* </p>
*/
private final ModelMap<RenderKit.Id,RenderKit> renderKits =
ModelMap.<RenderKit.Id,RenderKit>create();
-
+
private final ModelCollection<Converter> converters =
ModelCollection.<Converter>create();
-
+
private final ModelCollection<Validator> validators =
ModelCollection.<Validator>create();
private final ModelCollection<Listener> listeners =
ModelCollection.<Listener>create();
private long lastModified = Long.MIN_VALUE;
@@ -96,7 +90,7 @@
private final ModelCollection<Event> events =
ModelCollection.<Event>create();
private final ModelCollection<Behavior> behaviors =
ModelCollection.<Behavior>create();
-
+
private ConfigExtension extension;
/**
@@ -139,7 +133,7 @@
*/
public RenderKit addRenderKit(String renderKitId) {
RenderKit.Id renderKitType = new RenderKit.Id(renderKitId);
-
+
RenderKit renderKit = renderKits.get(renderKitType);
if(null == renderKit){
@@ -254,13 +248,13 @@
static <T extends ModelElement<T>> void merge(Collection<T> target,
Collection<T> source) {
for (T element : source) {
T targetElement = null;
-
+
try {
// TODO - lookup for equivalent element in target collection.
-// find(target, element.getKey());
+ // find(target, element.getKey());
} catch (NoSuchElementException e) {
- // TODO: handle exception
- }
+ // TODO: handle exception
+ }
if (null == targetElement) {
target.add(element);
@@ -304,7 +298,7 @@
}
static <R, P, T extends ModelElement<T>> R accept(Iterable<T>
components, LibraryVisitor<R, P> visitor, P param,
- R result) throws CdkException {
+ R result) throws CdkException {
if (null == result) {
for (T t : components) {
R accept = t.accept(visitor, param);
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ModelCollection.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ModelCollection.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ModelCollection.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -25,13 +25,13 @@
package org.richfaces.cdk.model;
-import org.richfaces.cdk.CdkException;
-
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
+import org.richfaces.cdk.CdkException;
+
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
@@ -45,10 +45,10 @@
*
*/
public class ModelCollection<E extends ModelElement<? super E>>
- implements Collection<E>, Visitable {
-
+ implements Collection<E>, Visitable {
+
private final List<E> elements = Lists.newArrayList();
-
+
public static <T extends ModelElement<? super T>>
ModelCollection<T> create(){
return new ModelCollection<T>();
}
@@ -128,7 +128,7 @@
@Override
public boolean retainAll(Collection<?> c) {
- return elements.retainAll(c);
+ return elements.retainAll(c);
}
@Override
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-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/ELParserUtils.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -29,19 +29,15 @@
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.text.MessageFormat;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
-import java.util.WeakHashMap;
import org.jboss.el.parser.AstAnd;
import org.jboss.el.parser.AstBracketSuffix;
@@ -96,6 +92,7 @@
import org.richfaces.cdk.parser.el.node.BinaryBooleanOperationTreeNode;
import org.richfaces.cdk.parser.el.node.ConstantValueTreeNode;
import org.richfaces.cdk.parser.el.node.ITreeNode;
+import org.richfaces.cdk.parser.el.types.TypesFactory;
/**
* Class, that encapsulate all functionality, related to Reflection calls, such as
loading classes, get property
@@ -152,14 +149,10 @@
}
private static Map<Class<?>, ClassDataHolder> classDataCache =
- new WeakHashMap<Class<?>, ClassDataHolder>();
+ Collections.synchronizedMap(new HashMap<Class<?>,
ClassDataHolder>());
private ELParserUtils() { }
- public static void verifyClassPropertiesAndMethods(Class<?> initialClass)
throws ParsingException {
- resolveClassPropertiesAndMethods(initialClass);
- }
-
private static ClassDataHolder resolveClassPropertiesAndMethods(Class<?>
initialClass) throws ParsingException {
ClassDataHolder classDataHolder = classDataCache.get(initialClass);
if (classDataHolder == null) {
@@ -273,25 +266,6 @@
}
/**
- * 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
- * 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);
- } else {
- return inClazz;
- }
- }
-
- /**
* <p>Retrieve the property descriptors for the specified class,
* introspecting and caching them the first time a particular bean class
* is encountered.</p>
@@ -361,7 +335,7 @@
Type[] parameterTypes) throws ParsingException {
if (clazz == null) {
- return Object.class;
+ return TypesFactory.getType(Object.class);
}
ClassDataHolder classDataHolder = resolveClassPropertiesAndMethods(clazz);
@@ -370,8 +344,6 @@
// 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)) {
@@ -383,14 +355,14 @@
}
// compare parameters
- Class<?>[] methodsParams = resolvedMethod.getParameterTypes();
+ Type[] methodsParams =
TypesFactory.getTypesArray(resolvedMethod.getParameterTypes());
int methodParamSize = methodsParams.length;
if (methodParamSize == paramSize) {
boolean match = true;
for (int n = 0; n < methodParamSize; n++) {
- if (!isAssignmentCompatible(methodsParams[n], parameterTypes[n])) {
+ if (!methodsParams[n].isAssignableFrom(parameterTypes[n])) {
match = false;
break;
@@ -398,181 +370,21 @@
}
if (match) {
- myCost = getTotalTransformationCost(methodsParams, parameterTypes);
-
- if (myCost < bestMatchCost) {
- bestMatch = resolvedMethod;
- bestMatchCost = myCost;
- }
+ //TODO handle overriden methods
+ bestMatch = resolvedMethod;
+ break;
}
}
}
if (bestMatch != null) {
- return bestMatch.getGenericReturnType();
+ return TypesFactory.getType(bestMatch.getGenericReturnType());
} else {
- return Object.class;
+ return TypesFactory.getType(Object.class);
}
}
- /**
- * Returns the sum of the object transformation cost for each class in the source
- * argument list.
- * @param srcArgs The source arguments
- * @param destArgs The destination arguments
- * @return The total transformation cost
- */
- private static float getTotalTransformationCost(Type[] destArgs, Type[] srcArgs) {
- float totalCost = 0.0f;
- for (int i = 0; i < srcArgs.length; i++) {
- Type destType = destArgs[i];
- Type srcType = srcArgs[i];
-
- totalCost += getObjectTransformationCost(destType, srcType);
- }
-
- return totalCost;
- }
-
- private static Set<Class<?>> getAllInterfaces(Class<?> clazz)
throws ParsingException {
- final Set<Class<?>> result = new
LinkedHashSet<Class<?>>();
-
- new ClassWalkingLogic(clazz).walk(new ClassVisitor() {
-
- @Override
- public void visit(Class<?> clazz) throws ParsingException {
- if (clazz.isInterface()) {
- result.add(clazz);
- }
- }
-
- });
-
- return result;
- }
-
- /**
- * 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 destClass The destination class
- * @return The cost of transforming an object
- */
- private static float getObjectTransformationCost(Type destType, Type srcType) {
- float cost = 0.0f;
-
- //no need to check if destType is primitive because the check has already been
done
- //by isAssignmentCompatible() method
- if (isNullType(srcType)) {
- return cost;
- }
-
- Class<?> srcClass = getWrapperClass(getRawType(srcType));
- Class<?> destClass = getWrapperClass(getRawType(destType));
- if (srcClass != null && !srcClass.equals(destClass)) {
- boolean interfaceMatched = false;
- try {
- Set<Class<?>> interfaces = getAllInterfaces(srcClass);
- for (Class<?> iface : interfaces) {
- if (isAssignmentCompatible(destClass, iface)) {
- // 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;
- interfaceMatched = true;
-
- break;
- }
- }
- } catch (ParsingException e) {
- // TODO: handle exception
- }
-
- if (!interfaceMatched) {
- while (srcClass != null && !srcClass.equals(destClass)) {
- 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;
- }
- }
- }
-
-
- return cost;
- }
-
- /**
- * <p>Determine whether a type can be used as a parameter in a method
invocation.
- * This method handles primitive conversions correctly.</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>,
- * a <code>Integer</code> to a <code>int</code>,
- * and a <code>Double</code> to a <code>double</code>.
- * 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 parameterization the type of parameter being tested
- *
- * @return true if the assignement is compatible.
- */
- public static boolean isAssignmentCompatible(Type parameterType, Type
parameterization) {
- Class<?> parameterClass = getRawType(parameterType);
-
- if (isNullType(parameterization)) {
- //null value can be assigned to any class except primitive
- return !parameterClass.isPrimitive();
- } else {
- Class<?> parameterWrappedClass = getWrapperClass(parameterClass);
- Class<?> parameterizationWrappedClass =
getWrapperClass(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
- */
- private static Class<?> getPrimitiveWrapper(Class<?> primitiveType) {
-
- // does anyone know a better strategy than comparing names?
- if (boolean.class.equals(primitiveType)) {
- return Boolean.class;
- } else if (float.class.equals(primitiveType)) {
- return Float.class;
- } else if (long.class.equals(primitiveType)) {
- return Long.class;
- } else if (int.class.equals(primitiveType)) {
- return Integer.class;
- } else if (short.class.equals(primitiveType)) {
- return Short.class;
- } else if (byte.class.equals(primitiveType)) {
- return Byte.class;
- } else if (double.class.equals(primitiveType)) {
- return Double.class;
- } else if (char.class.equals(primitiveType)) {
- return Character.class;
- } else {
- throw new IllegalArgumentException(
- MessageFormat.format("Type {0} is not primitive!",
primitiveType.getName()));
- }
- }
-
interface ClassVisitor {
public void visit(Class<?> clazz) throws ParsingException;
}
@@ -626,35 +438,8 @@
visitedClasses.clear();
}
}
-
- public static boolean isNullType(Type type) {
- return type instanceof NullType;
+
+ public static void clearCaches() {
+ classDataCache.clear();
}
-
- public static Type getLastTypeArgument(Type type) {
- //TODO: generic arrays support
- 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 Class<?> getRawType(Type type) {
- //TODO: generic arrays support
- 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-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/ELVisitor.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -21,7 +21,6 @@
package org.richfaces.cdk.parser.el;
-import java.lang.reflect.Type;
import java.util.Map;
import org.jboss.el.parser.AstCompositeExpression;
Deleted:
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-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/NullType.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -1,35 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2009, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-package org.richfaces.cdk.parser.el;
-
-import java.lang.reflect.Type;
-
-/**
- * @author Nick Belaevski
- */
-public final class NullType implements Type {
-
- public static final NullType INSTANCE = new NullType();
-
- private NullType() {
- }
-}
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/Type.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/Type.java
(rev 0)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/Type.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -0,0 +1,47 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2009, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.richfaces.cdk.parser.el;
+
+import java.util.Collection;
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public interface Type {
+
+ public String getCode();
+
+ public Collection<Class<?>> getImportsList();
+
+ public boolean isNullType();
+
+ public boolean isArray();
+
+ public Class<?> getRawType();
+
+ public Type getContainerType();
+
+ public Type[] getTypeArguments();
+
+ public boolean isAssignableFrom(Type anotherType);
+}
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-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AbstractBinaryOperationTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -21,13 +21,13 @@
*/
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
import java.util.Map;
import org.jboss.el.parser.Node;
import org.richfaces.cdk.parser.el.ELNodeConstants;
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
/**
* <p>Abstract class for all binary (having two operands) operation expression
nodes</p>
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AbstractMethodTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AbstractMethodTreeNode.java
(rev 0)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AbstractMethodTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -0,0 +1,80 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2009, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.richfaces.cdk.parser.el.node;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.jboss.el.parser.Node;
+import org.richfaces.cdk.parser.el.ELNodeConstants;
+import org.richfaces.cdk.parser.el.ELParserUtils;
+import org.richfaces.cdk.parser.el.ELVisitor;
+import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public abstract class AbstractMethodTreeNode extends AbstractTreeNode {
+
+ private static final Type[] EMPTY_TYPES_ARRAY = new Type[0];
+
+ /**
+ * @param node
+ */
+ public AbstractMethodTreeNode(Node node) {
+ super(node);
+ }
+
+ protected void visitMethod(StringBuilder sb, Map<String, Type> context,
ELVisitor visitor, String methodName)
+ throws ParsingException {
+
+ Class<?> methodHolderClass = visitor.getVariableType().getRawType();
+ List<Type> argumentTypes = new ArrayList<Type>();
+
+ sb.append(ELNodeConstants.DOT);
+ sb.append(methodName);
+ sb.append(ELNodeConstants.LEFT_BRACKET);
+
+ int childrenCount = getChildrenCount();
+
+ for (int k = 0; k < childrenCount; k++) {
+ if (k != 0) {
+ sb.append(ELNodeConstants.COMMA);
+ }
+ 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(methodHolderClass, methodName,
argumentTypes
+ .toArray(EMPTY_TYPES_ARRAY));
+
+ visitor.setVariableType(returnType);
+ }
+}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AbstractTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AbstractTreeNode.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AbstractTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -19,34 +19,33 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-
-
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
+import java.text.MessageFormat;
import java.util.Map;
import org.jboss.el.parser.Node;
import org.richfaces.cdk.parser.el.ELParserUtils;
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
/**
* This abstract class implement some methods of ITreeNode interface to using in
subclasses.
- *
+ *
* @author amarkhel
- *
+ *
*/
public abstract class AbstractTreeNode implements ITreeNode {
+
private Node node;
public AbstractTreeNode(Node node) {
this.node = node;
}
-
+
/**
- * Collects output from visiting child of the current node with the specified index
and returns
- * collected string.
+ * Collects output from visiting child of the current node with the specified index
and returns collected string.
*
* @param childIndex
* @param context
@@ -54,19 +53,31 @@
* @return
* @throws ParsingException
*/
- protected String getChildOutput(int childIndex, Map<String, Type> context,
- ELVisitor visitor) throws ParsingException {
-
- StringBuilder sb = new StringBuilder();
- getChild(childIndex).visit(sb, context, visitor);
-
- return sb.toString();
+ protected String getChildOutput(int childIndex, Map<String, Type> context,
ELVisitor visitor)
+ throws ParsingException {
+
+ StringBuilder sb = new StringBuilder();
+ getChild(childIndex).visit(sb, context, visitor);
+
+ return sb.toString();
}
+ protected Type getIdentifierFromContext(Map<String, Type> context, String
identifierName) throws ParsingException {
+ Type identifierType = context.get(identifierName);
+
+ if (identifierType == null) {
+ throw new ParsingException(MessageFormat.format(
+ "No type found in context for identifier ''{0}'',
handling as generic Object", identifierName));
+ }
+
+ return identifierType;
+ }
+
/**
* Return node of current wrapper.
+ *
* @return instance of org.jboss.el.parser.Node
- *
+ *
*/
public Node getNode() {
return node;
@@ -74,12 +85,17 @@
/**
* Visit current node. Generate Java code, that represent current node.
- * @param stringBuilder instance to collect information.
- * @param context - context to resolve beans
- * @param visitor - ELVisitor
- * @throws ParsingException - if error occurred during parsing process.
+ *
+ * @param stringBuilder
+ * instance to collect information.
+ * @param context
+ * - context to resolve beans
+ * @param visitor
+ * - ELVisitor
+ * @throws ParsingException
+ * - if error occurred during parsing process.
* @return instance of org.jboss.el.parser.Node
- *
+ *
*/
public ITreeNode getChild(int index) throws ParsingException {
Node childNode = getNode().jjtGetChild(index);
@@ -95,20 +111,23 @@
/**
* Returns count of children for this node
+ *
* @return children count
*/
public int getChildrenCount() {
- return getNode().jjtGetNumChildren();
+ return getNode().jjtGetNumChildren();
}
-
+
/**
* Return child of wrapped node by specified index. Abstract operation to override in
subclasses.
- * @param index - index of child.
- * @throws ParsingException - if error occurred(child not found).
+ *
+ * @param index
+ * - index of child.
+ * @throws ParsingException
+ * - if error occurred(child not found).
* @return wrapper for child
- *
+ *
*/
- public abstract void visit(StringBuilder sb, Map<String, Type> context,
ELVisitor visitor)
- throws ParsingException;
-
+ public abstract void visit(StringBuilder sb, Map<String, Type> context,
ELVisitor visitor) throws ParsingException;
+
}
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-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstBracketSuffixTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -21,15 +21,14 @@
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
-import java.util.List;
import java.util.Map;
import org.jboss.el.parser.Node;
import org.richfaces.cdk.parser.el.ELNodeConstants;
-import org.richfaces.cdk.parser.el.ELParserUtils;
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
+import org.richfaces.cdk.parser.el.types.TypesFactory;
/**
* This class extend AbstractTreeNode and wrap AstBracketSuffix node.
@@ -43,37 +42,25 @@
@Override
public void visit(StringBuilder sb, Map<String, Type> context, ELVisitor
visitor) throws ParsingException {
- Type lastVariableType = visitor.getVariableType();
- Class<?> rawType = ELParserUtils.getRawType(lastVariableType);
-
+ Type variableType = visitor.getVariableType();
String suffixValue = getChildOutput(0, context, visitor);
- if (rawType != null && rawType.isArray()) {
+ if (variableType.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());
} else {
- Type collectionValueType = null;
- if (rawType != null &&
- (List.class.isAssignableFrom(rawType) ||
Map.class.isAssignableFrom(rawType))) {
-
- collectionValueType =
ELParserUtils.getLastTypeArgument(lastVariableType);
- }
-
- if (collectionValueType == null) {
- 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);
+ Type containerType = variableType.getContainerType();
+ if (containerType == null) {
+ containerType = TypesFactory.getType(Object.class);
}
+ visitor.setVariableType(containerType);
}
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstChoiceTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstChoiceTreeNode.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstChoiceTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,14 +23,13 @@
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
import java.util.Map;
import org.jboss.el.parser.Node;
import org.richfaces.cdk.parser.el.ELNodeConstants;
-import org.richfaces.cdk.parser.el.ELParserUtils;
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
/**
* This class extend AbstractTreeNode and wrap AstChoice node.
@@ -62,7 +61,7 @@
sb.append(ELNodeConstants.RIGHT_BRACKET);
- if (!ELParserUtils.isNullType(correctConditionBranchType)) {
+ if (!correctConditionBranchType.isNullType()) {
visitor.setVariableType(correctConditionBranchType);
} else {
visitor.setVariableType(incorrectConditionBranchType);
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-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstDeferredOrDynamicExpressionTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -21,14 +21,14 @@
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
import java.util.Map;
import org.jboss.el.parser.Node;
-
import org.richfaces.cdk.parser.el.ELNodeConstants;
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
+import org.richfaces.cdk.parser.el.types.TypesFactory;
/**
* This class extend AbstractTreeNode and wrap AstDeferredExpression node.
@@ -57,7 +57,7 @@
if (visitor.isUseConversionToString()) {
sb.append(ELNodeConstants.RIGHT_BRACKET);
- visitor.setVariableType(String.class);
+ visitor.setVariableType(TypesFactory.getType(String.class));
} /* otherwise variableType will be set in child's visit invocation */
}
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstEmptyTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstEmptyTreeNode.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstEmptyTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,14 +23,14 @@
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
import java.util.Map;
import org.jboss.el.parser.Node;
-
import org.richfaces.cdk.parser.el.ELNodeConstants;
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
+import org.richfaces.cdk.parser.el.types.TypesFactory;
/**
* This class extend AbstractTreeNode and wrap AstEmpty node.
@@ -55,6 +55,6 @@
sb.append(ELNodeConstants.RIGHT_BRACKET);
- visitor.setVariableType(Boolean.TYPE);
+ visitor.setVariableType(TypesFactory.getType(Boolean.TYPE));
}
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstFloatingPointTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstFloatingPointTreeNode.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstFloatingPointTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,13 +23,14 @@
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
import java.util.Map;
import org.jboss.el.parser.Node;
import org.richfaces.cdk.parser.el.ELNodeConstants;
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
+import org.richfaces.cdk.parser.el.types.TypesFactory;
/**
* This class extend AbstractTreeNode and wrap AstFloatingPoint node.
@@ -49,6 +50,6 @@
sb.append(getNode().getImage());
sb.append(ELNodeConstants.RIGHT_BRACKET);
- visitor.setVariableType(Double.TYPE);
+ visitor.setVariableType(TypesFactory.getType(Double.TYPE));
}
}
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-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstFunctionTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,15 +23,15 @@
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
import java.util.Map;
import org.jboss.el.parser.AstFunction;
import org.jboss.el.parser.Node;
-
import org.richfaces.cdk.parser.el.ELNodeConstants;
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
+import org.richfaces.cdk.util.Strings;
/**
* This class extend AbstractTreeNode and wrap AstFunction node.
@@ -39,7 +39,8 @@
* @author amarkhel
*
*/
-public class AstFunctionTreeNode extends AbstractTreeNode {
+public class AstFunctionTreeNode extends AbstractMethodTreeNode {
+
public AstFunctionTreeNode(Node node) {
super(node);
}
@@ -50,34 +51,19 @@
String functionPrefix = functionNode.getPrefix();
String functionName = functionNode.getLocalName();
- String variableName;
- if (functionPrefix != null && functionPrefix.length() != 0) {
- //TODO: this should be a property getter, not property name
- //TODO: support "super" keyword
- variableName = functionPrefix;
+ String identifierName;
+ if (!Strings.isEmpty(functionPrefix)) {
+ //TODO: this should be a property getter, not property name. NB:
'this' & 'super' keywords
+ identifierName = functionPrefix;
} else {
- variableName = ELNodeConstants.THIS_PREFIX;
+ identifierName = ELNodeConstants.THIS_PREFIX;
}
- sb.append(variableName);
- visitor.setVariableType(context.get(variableName));
+ sb.append(identifierName);
+
+ Type identifierType = getIdentifierFromContext(context, identifierName);
+ visitor.setVariableType(identifierType);
- sb.append(ELNodeConstants.DOT);
-
- sb.append(functionName);
- sb.append(ELNodeConstants.LEFT_BRACKET);
-
- int childrenCount = getChildrenCount();
-
- for (int i = 0; i < childrenCount; i++) {
- if (i != 0) {
- sb.append(ELNodeConstants.COMMA);
- }
-
- String childOutput = getChildOutput(i, context, visitor);
- sb.append(childOutput);
- }
-
- sb.append(ELNodeConstants.RIGHT_BRACKET);
+ visitMethod(sb, context, visitor, functionName);
}
}
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-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstIdentifierTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -21,12 +21,12 @@
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
import java.util.Map;
import org.jboss.el.parser.Node;
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
/**
* This class extend AbstractTreeNode and wrap AstIdentifier node.
@@ -34,21 +34,19 @@
* @author amarkhel
*/
public class AstIdentifierTreeNode extends AbstractTreeNode {
+
public AstIdentifierTreeNode(Node node) {
super(node);
}
@Override
public void visit(StringBuilder sb, Map<String, Type> context, ELVisitor
visitor) throws ParsingException {
- String variableName = getNode().getImage();
+ String identifierName = getNode().getImage();
- Type variableType = context.get(variableName);
- if (variableType == null) {
- throw new ParsingException("No instance found in context for identifier
" + variableName);
- }
+ Type identifierType = getIdentifierFromContext(context, identifierName);
//TODO: implement variable mapper like "utils" ->
"this.getUtils()"
- visitor.setVariableType(variableType);
- sb.append(variableName);
+ visitor.setVariableType(identifierType);
+ sb.append(identifierName);
}
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstIntegerTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstIntegerTreeNode.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstIntegerTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,13 +23,13 @@
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
import java.util.Map;
import org.jboss.el.parser.Node;
-
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
+import org.richfaces.cdk.parser.el.types.TypesFactory;
/**
* This class extend AbstractTreeNode and wrap AstInteger node.
@@ -45,6 +45,6 @@
@Override
public void visit(StringBuilder sb, Map<String, Type> context, ELVisitor
visitor) throws ParsingException {
sb.append(getNode().getImage());
- visitor.setVariableType(Integer.TYPE);
+ visitor.setVariableType(TypesFactory.getType(Integer.TYPE));
}
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstLiteralTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstLiteralTreeNode.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstLiteralTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,7 +23,6 @@
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
import java.util.Map;
import org.jboss.el.parser.Node;
@@ -31,6 +30,8 @@
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
import org.richfaces.cdk.parser.el.StringUtils;
+import org.richfaces.cdk.parser.el.Type;
+import org.richfaces.cdk.parser.el.types.TypesFactory;
/**
* This class extend AbstractTreeNode and wrap AstLiteral node.
@@ -50,7 +51,7 @@
sb.append(StringUtils.getEscapedString(getNode().getImage()));
sb.append(ELNodeConstants.QUOTE);
- visitor.setVariableType(String.class);
+ visitor.setVariableType(TypesFactory.getType(String.class));
}
}
}
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-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstMethodSuffixTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -21,26 +21,20 @@
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Map;
import org.jboss.el.parser.Node;
-import org.richfaces.cdk.parser.el.ELNodeConstants;
-import org.richfaces.cdk.parser.el.ELParserUtils;
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
/**
* This class extend AbstractTreeNode and wrap AstMethodSuffix node.
*
* @author amarkhel
*/
-public class AstMethodSuffixTreeNode extends AbstractTreeNode {
+public class AstMethodSuffixTreeNode extends AbstractMethodTreeNode {
- private static final Type[] EMPTY_TYPES_ARRAY = new Type[0];
-
public AstMethodSuffixTreeNode(Node node) {
super(node);
}
@@ -49,31 +43,6 @@
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(ELNodeConstants.LEFT_BRACKET);
-
- int childrenCount = getChildrenCount();
-
- for (int k = 0; k < childrenCount; k++) {
- if (k != 0) {
- sb.append(ELNodeConstants.COMMA);
- }
- 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));
-
- visitor.setVariableType(returnType);
+ visitMethod(sb, context, visitor, methodName);
}
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstNegativeTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstNegativeTreeNode.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstNegativeTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,14 +23,13 @@
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
import java.util.Map;
import org.jboss.el.parser.Node;
-
import org.richfaces.cdk.parser.el.ELNodeConstants;
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
/**
* This class extend AbstractTreeNode and wrap AstNegative node.
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstNotTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstNotTreeNode.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstNotTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,13 +23,13 @@
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
import java.util.Map;
import org.jboss.el.parser.Node;
import org.richfaces.cdk.parser.el.ELNodeConstants;
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
/**
* This class extend AbstractTreeNode and wrap AstNot node.
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-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstPropertySuffixTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,7 +23,6 @@
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
-import java.lang.reflect.Type;
import java.util.Map;
import org.jboss.el.parser.Node;
@@ -31,6 +30,8 @@
import org.richfaces.cdk.parser.el.ELParserUtils;
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
+import org.richfaces.cdk.parser.el.types.TypesFactory;
/**
* This class extend AbstractTreeNode and wrap AstPropertySuffix node.
@@ -67,7 +68,7 @@
String propertyName = getNode().getImage();
Type variableType = visitor.getVariableType();
- Class<?> clazz = ELParserUtils.getRawType(variableType);
+ Class<?> clazz = variableType.getRawType();
String readMethodName;
Type readMethodReturnType;
@@ -75,10 +76,10 @@
Method readMethod = getReadMethod(clazz, propertyName);
if (readMethod != null) {
readMethodName = readMethod.getName();
- readMethodReturnType = readMethod.getGenericReturnType();
+ readMethodReturnType =
TypesFactory.getType(readMethod.getGenericReturnType());
} else {
readMethodName = ELNodeConstants.GETTER_PREFIX + capitalize(propertyName);
- readMethodReturnType = Object.class;
+ readMethodReturnType = TypesFactory.getType(Object.class);
}
visitor.setVariableType(readMethodReturnType);
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstStringTreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstStringTreeNode.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstStringTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,7 +23,6 @@
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
import java.util.Map;
import org.jboss.el.parser.AstString;
@@ -32,6 +31,8 @@
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
import org.richfaces.cdk.parser.el.StringUtils;
+import org.richfaces.cdk.parser.el.Type;
+import org.richfaces.cdk.parser.el.types.TypesFactory;
/**
* This class extend AbstractTreeNode and wrap AstString node.
@@ -50,6 +51,6 @@
sb.append(StringUtils.getEscapedString(((AstString) getNode()).getString()));
sb.append(ELNodeConstants.QUOTE);
- visitor.setVariableType(String.class);
+ visitor.setVariableType(TypesFactory.getType(String.class));
}
}
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-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/AstValueTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -21,12 +21,12 @@
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
import java.util.Map;
import org.jboss.el.parser.Node;
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
/**
* This class extend AbstractTreeNode and wrap AstValue node.
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-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/BinaryArithmeticIntegerOperationTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -21,9 +21,10 @@
*/
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
import org.jboss.el.parser.Node;
+import org.richfaces.cdk.parser.el.Type;
+import org.richfaces.cdk.parser.el.types.TypesFactory;
/**
* @author Nick Belaevski
@@ -45,7 +46,7 @@
@Override
protected Type getOperationType(Type firstArgumentType,
Type secondArgumentType) {
- return Integer.TYPE;
+ return TypesFactory.getType(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-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/BinaryArithmeticOperationTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -21,10 +21,9 @@
*/
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
-
import org.jboss.el.parser.Node;
-import org.richfaces.cdk.parser.el.ELParserUtils;
+import org.richfaces.cdk.parser.el.Type;
+import org.richfaces.cdk.parser.el.types.TypesFactory;
/**
* @author Nick Belaevski
@@ -47,13 +46,15 @@
protected Type getOperationType(Type firstArgumentType,
Type secondArgumentType) {
- if (ELParserUtils.isAssignmentCompatible(firstArgumentType, Double.class) ||
- ELParserUtils.isAssignmentCompatible(secondArgumentType, Double.class)) {
+ Type doubleType = TypesFactory.getType(Double.class);
+
+ if (doubleType.isAssignableFrom(firstArgumentType) ||
+ doubleType.isAssignableFrom(secondArgumentType)) {
- return Double.TYPE;
+ return TypesFactory.getType(Double.TYPE);
}
- return Integer.TYPE;
+ return TypesFactory.getType(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-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/BinaryBooleanOperationTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -21,9 +21,9 @@
*/
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
-
import org.jboss.el.parser.Node;
+import org.richfaces.cdk.parser.el.Type;
+import org.richfaces.cdk.parser.el.types.TypesFactory;
/**
* @author Nick Belaevski
@@ -45,7 +45,7 @@
@Override
protected Type getOperationType(Type firstArgumentType,
Type secondArgumentType) {
- return Boolean.TYPE;
+ return TypesFactory.getType(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-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/ConstantValueTreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -21,13 +21,13 @@
*/
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
import java.util.Map;
import org.richfaces.cdk.parser.el.ELNodeConstants;
import org.richfaces.cdk.parser.el.ELVisitor;
-import org.richfaces.cdk.parser.el.NullType;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
+import org.richfaces.cdk.parser.el.types.TypesFactory;
/**
* @author Nick Belaevski
@@ -37,13 +37,13 @@
// XXX what class to use for null object: Void.class or null - special NullType be
used
public static final ConstantValueTreeNode NULL_NODE = new
ConstantValueTreeNode(ELNodeConstants.NULL_VALUE,
- NullType.INSTANCE);
+ TypesFactory.getNullType());
public static final ConstantValueTreeNode TRUE_NODE = new
ConstantValueTreeNode(ELNodeConstants.TRUE_VALUE,
- Boolean.TYPE);
+ TypesFactory.getType(Boolean.TYPE));
public static final ConstantValueTreeNode FALSE_NODE = new
ConstantValueTreeNode(ELNodeConstants.FALSE_VALUE,
- Boolean.TYPE);
+ TypesFactory.getType(Boolean.TYPE));
private final String value;
@@ -64,7 +64,6 @@
*/
@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/parser/el/node/ITreeNode.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/ITreeNode.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/parser/el/node/ITreeNode.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -21,12 +21,12 @@
package org.richfaces.cdk.parser.el.node;
-import java.lang.reflect.Type;
import java.util.Map;
import org.jboss.el.parser.Node;
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
/**
* Interface for all wrappers of org.jboss.el.parser.Node class.
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/DefineObjectStatement.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/DefineObjectStatement.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/DefineObjectStatement.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -21,18 +21,20 @@
*/
package org.richfaces.cdk.templatecompiler;
+import org.richfaces.cdk.parser.el.Type;
+
/**
* @author Nick Belaevski
*/
public class DefineObjectStatement extends AbstractTemplateMethodBodyStatement {
- private String type;
+ private Type type;
private String name;
private String initializationExpression;
- public DefineObjectStatement(String type, String name, String
initializationExpression) {
+ public DefineObjectStatement(Type type, String name, String initializationExpression)
{
super("define-object");
this.type = type;
@@ -43,7 +45,7 @@
/**
* @return the type
*/
- public String getType() {
+ public Type getType() {
return type;
}
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/ParameterizedTypeImpl.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/ParameterizedTypeImpl.java
(rev 0)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/ParameterizedTypeImpl.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -0,0 +1,109 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2009, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.richfaces.cdk.templatecompiler;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.Arrays;
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+class ParameterizedTypeImpl implements ParameterizedType {
+
+ private Type rawType;
+
+ private Type[] actualTypeArguments;
+
+ public ParameterizedTypeImpl(Type rawType, Type[] actualTypeArguments) {
+ super();
+ this.rawType = rawType;
+ this.actualTypeArguments = actualTypeArguments;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.reflect.ParameterizedType#getActualTypeArguments()
+ */
+ @Override
+ public Type[] getActualTypeArguments() {
+ return actualTypeArguments;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.reflect.ParameterizedType#getOwnerType()
+ */
+ @Override
+ public Type getOwnerType() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.reflect.ParameterizedType#getRawType()
+ */
+ @Override
+ public Type getRawType() {
+ return rawType;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + Arrays.hashCode(actualTypeArguments);
+ result = prime * result + ((rawType == null) ? 0 : rawType.hashCode());
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ ParameterizedTypeImpl other = (ParameterizedTypeImpl) obj;
+ if (!Arrays.equals(actualTypeArguments, other.actualTypeArguments)) {
+ return false;
+ }
+ if (rawType == null) {
+ if (other.rawType != null) {
+ return false;
+ }
+ } else if (!rawType.equals(other.rawType)) {
+ return false;
+ }
+ return true;
+ }
+
+}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererClassGenerator.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererClassGenerator.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererClassGenerator.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -87,13 +87,19 @@
for (Renderer renderer : renderKit.getRenderers()) {
Template template = renderer.getTemplate();
if (null != template) {
- // TODO - put real parameters.
RendererClassVisitor visitor = new RendererClassVisitor(
template.getInterface(), context.getLoader());
- visitor.preProcess();
- template.getImplementation().visit(visitor);
- visitor.postProcess();
- JavaClass javaClass = visitor.getRendererClass();
+
+ try {
+ // TODO - put real parameters.
+ visitor.preProcess();
+ template.getImplementation().visit(visitor);
+ visitor.postProcess();
+ } finally {
+ RendererClassVisitor.clearCaches();
+ }
+
+ JavaClass javaClass = visitor.getGeneratedClass();
String fullName = javaClass.getFullName();
File outFile = context.createOutputFile(
StandardOutputs.RENDERER_CLASSES, fullName.replace(
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-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererClassVisitor.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -26,7 +26,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
-import java.lang.reflect.Type;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
@@ -37,10 +36,8 @@
import javax.annotation.Generated;
import javax.faces.component.UIComponent;
-import javax.faces.component.behavior.Behavior;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
-import javax.faces.convert.Converter;
import javax.faces.render.Renderer;
import javax.xml.namespace.QName;
@@ -52,8 +49,13 @@
import org.richfaces.builder.model.MethodBody;
import org.richfaces.builder.model.MethodBodyStatementsContainer;
import org.richfaces.cdk.CdkException;
+import org.richfaces.cdk.Logger;
+import org.richfaces.cdk.LoggerFactory;
+import org.richfaces.cdk.parser.el.ELParserUtils;
import org.richfaces.cdk.parser.el.ELVisitor;
import org.richfaces.cdk.parser.el.ParsingException;
+import org.richfaces.cdk.parser.el.Type;
+import org.richfaces.cdk.parser.el.types.TypesFactory;
import org.richfaces.cdk.templatecompiler.model.AnyElement;
import org.richfaces.cdk.templatecompiler.model.CdkBodyElement;
import org.richfaces.cdk.templatecompiler.model.CdkCallElement;
@@ -66,6 +68,7 @@
import org.richfaces.cdk.templatecompiler.model.CompositeInterface;
import org.richfaces.cdk.templatecompiler.model.Template;
import org.richfaces.cdk.templatecompiler.model.TemplateVisitor;
+import org.richfaces.cdk.util.Strings;
import com.google.common.collect.Lists;
@@ -89,6 +92,10 @@
*/
static final String THIS_VARIABLE = "this";
/**
+ *
+ */
+ static final String SUPER_VARIABLE = "super";
+ /**
*
*/
static final String FACES_CONTEXT_VARIABLE = "facesContext";
@@ -103,6 +110,8 @@
static final String RENDERER_UTILS_CLASS_NAME =
"org.ajax4jsf.renderkit.RendererUtils";
+ private static final Logger LOG = LoggerFactory.getLogger();
+
private static final Set<String> DEFAULT_NAMESPACES = new
HashSet<String>();
static {
@@ -110,30 +119,11 @@
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 JavaClass generatedClass;
private CompositeInterface compositeInterface;
private final LinkedList<MethodBodyStatementsContainer> statements =
Lists.newLinkedList();
@@ -143,6 +133,8 @@
private boolean isAddedMethodForConversionToString;
private boolean isAddedMethodForCheckingEmptiness;
+ private Type lastCompiledExpressionType;
+
static {
InputStream serializedAttributesStream =
RendererClassVisitor.class.getResourceAsStream("/META-INF/schema/attributes.ser");
@@ -173,19 +165,19 @@
}
private void initializeJavaClass() {
- this.rendererClass = createJavaClassByName(compositeInterface.getJavaClass());
- this.rendererClass.addModifier(JavaModifier.PUBLIC);
-
this.rendererClass.setSuperClass(createJavaClassByName(compositeInterface.getBaseClass()));
+ this.generatedClass = createJavaClassByName(compositeInterface.getJavaClass());
+ this.generatedClass.addModifier(JavaModifier.PUBLIC);
+
this.generatedClass.setSuperClass(createJavaClassByName(compositeInterface.getBaseClass()));
- this.rendererClass.addImport(FacesContext.class);
- this.rendererClass.addImport(ResponseWriter.class);
- this.rendererClass.addImport(UIComponent.class);
- this.rendererClass.addImport(RENDERER_UTILS_CLASS_NAME);
+ this.generatedClass.addImport(FacesContext.class);
+ this.generatedClass.addImport(ResponseWriter.class);
+ this.generatedClass.addImport(UIComponent.class);
+ this.generatedClass.addImport(RENDERER_UTILS_CLASS_NAME);
- this.rendererClass.addAnnotation(Generated.class, "\"RichFaces
CDK\"");
+ this.generatedClass.addAnnotation(Generated.class, "\"RichFaces
CDK\"");
//TODO remove this after improving Java model
- this.rendererClass.addImport(Generated.class);
-
+ this.generatedClass.addImport(Generated.class);
+
this.createMethodContext();
}
@@ -203,7 +195,7 @@
conversionMethod.setMethodBody(conversionMethodBody);
conversionMethodBody.addStatement(new
ConversionToStringMethodBodyStatement());
- rendererClass.addMethod(conversionMethod);
+ generatedClass.addMethod(conversionMethod);
}
}
@@ -221,7 +213,7 @@
checkingMethod.setMethodBody(checkingMethodBody);
checkingMethodBody.addStatement(new EmptinessCheckingMethodBodyStatement());
- rendererClass.addMethod(checkingMethod);
+ generatedClass.addMethod(checkingMethod);
}
}
@@ -229,6 +221,8 @@
try {
ELVisitor elVisitor = new ELVisitor();
elVisitor.parse(expression, localsTypesMap);
+
+ lastCompiledExpressionType = elVisitor.getVariableType();
String parsedExpression = elVisitor.getParsedExpression();
if (elVisitor.isUseConversionToString()) {
@@ -245,28 +239,11 @@
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}
-//
-// if (Boolean.class.isAssignableFrom(type)) {
-// //TODO just a stub!
-// return "false /* " + expression.trim() + " */";
-// }
-//
-// 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 boolean isDefaultNamespace(String namespaceURI) {
//TODO - another namespaces
- if (namespaceURI == null || namespaceURI.length() == 0) {
+ if (Strings.isEmpty(namespaceURI)) {
return true;
}
@@ -280,14 +257,37 @@
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);
+ localsTypesMap.put(FACES_CONTEXT_VARIABLE,
TypesFactory.getType(FacesContext.class));
+ localsTypesMap.put(RESPONSE_WRITER_VARIABLE,
TypesFactory.getType(ResponseWriter.class));
+ localsTypesMap.put(CLIENT_ID_VARIABLE, TypesFactory.getType(String.class));
//TODO: try load component class
- localsTypesMap.put(COMPONENT_VARIABLE, UIComponent.class);
- //TODO: try load renderer class
- localsTypesMap.put(THIS_VARIABLE, Renderer.class);
+ localsTypesMap.put(COMPONENT_VARIABLE, TypesFactory.getType(UIComponent.class));
+
+ Type generatedClassSuperType = null;
+
+ JavaClass superClass = this.generatedClass.getSuperClass();
+ if (superClass != null) {
+ try {
+ //TODO use TypesFactory
+ Class<?> loadedSuperClass = Class.forName(superClass.getFullName(),
false, classLoader);
+ generatedClassSuperType = TypesFactory.getType(loadedSuperClass);
+ } catch (ClassNotFoundException e) {
+ LOG.warn(e.getMessage(), e);
+ } catch (LinkageError e) {
+ LOG.warn(e.getMessage(), e);
+ }
+ }
+
+ if (generatedClassSuperType == null) {
+ //fallback to Renderer.class
+ generatedClassSuperType = TypesFactory.getType(Renderer.class);
+ }
+
+ localsTypesMap.put(THIS_VARIABLE, generatedClassSuperType);
+
+ //TODO - different classes for 'this' and 'super'
+ localsTypesMap.put(SUPER_VARIABLE, generatedClassSuperType);
}
private void flushToEncodeMethod(String encodeMethodName) {
@@ -304,7 +304,18 @@
javaMethod.setMethodBody(methodBody);
methodBody.addStatement(0, new EncodeMethodPrefaceStatement());
- rendererClass.addMethod(javaMethod);
+ generatedClass.addMethod(javaMethod);
+
+ Collection<Type> variableTypes = localsTypesMap.values();
+ for (Type variableType : variableTypes) {
+
+ Collection<Class<?>> importsList =
variableType.getImportsList();
+ if (importsList != null) {
+ for (Class<?> importedClass : importsList) {
+ generatedClass.addImport(importedClass);
+ }
+ }
+ }
}
createMethodContext();
@@ -325,41 +336,9 @@
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
- }
- }
-
- if (result == null) {
- result = Object.class;
- }
-
- return result;
- }
-
- private void defineObject(String type, String name, String initializationExpression)
{
+ private void defineObject(Type type, String name, String initializationExpression) {
currentStatement.addStatement(new DefineObjectStatement(type, name,
initializationExpression));
- localsTypesMap.put(name, getClasByObjectTypeName(type));
+ localsTypesMap.put(name, type);
}
protected void pushStatement(MethodBodyStatementsContainer container) {
@@ -377,8 +356,8 @@
*
* @return the rendererClass
*/
- public JavaClass getRendererClass() {
- return this.rendererClass;
+ public JavaClass getGeneratedClass() {
+ return this.generatedClass;
}
/* (non-Javadoc)
@@ -471,7 +450,7 @@
public void visitElement(String text) throws CdkException {
if (text != null) {
String trimmedText = text.trim();
- if (trimmedText.length() != 0) {
+ if (!Strings.isEmpty(trimmedText)) {
currentStatement.addStatement(new
WriteTextStatement(compileEl(trimmedText, String.class)));
}
}
@@ -573,20 +552,32 @@
String name = cdkObjectElement.getName();
String value = cdkObjectElement.getValue();
- if (value == null || value.length() == 0) {
+ if (Strings.isEmpty(value)) {
value = cdkObjectElement.getBodyValue();
}
- String type = cdkObjectElement.getType();
-
- if (value != null && value.length() != 0) {
- if (type == null || type.length() == 0) {
- type = getElExpressionType(value);
+ String typeString = cdkObjectElement.getType();
+ String typeArgumentsString = cdkObjectElement.getTypeArguments();
+ if (!Strings.isEmpty(typeArgumentsString)) {
+ typeString += "<" + typeArgumentsString + ">";
+ }
+
+ Type type = null;
+ if (!Strings.isEmpty(typeString)) {
+ type = TypesFactory.getType(typeString, classLoader);
+ }
+
+ if (!Strings.isEmpty(value)) {
+ value = compileEl(value, Object.class);
+ if (type == null) {
+ type = lastCompiledExpressionType;
}
+ }
- value = compileEl(value, Object.class);
+ if (type == null) {
+ type = TypesFactory.getType(Object.class);
}
-
+
defineObject(type, name, value);
}
@@ -598,8 +589,15 @@
public void startElement(CdkForEachElement cdkForEachElement) {
String items = cdkForEachElement.getItems();
String itemsExpression = compileEl(items, Iterable.class);
- pushStatement(new ForEachStatement(itemsExpression, cdkForEachElement.getVar(),
- getElExpressionContainerType(items)));
+
+ //TODO - review
+ Class<?> collectionElementClass =
lastCompiledExpressionType.getContainerType().getRawType();
+ if (collectionElementClass == null) {
+ collectionElementClass = Object.class;
+ }
+
+ pushStatement(new ForEachStatement(itemsExpression, cdkForEachElement.getVar(),
+ collectionElementClass.getName()));
}
/* (non-Javadoc)
@@ -625,4 +623,8 @@
flushToEncodeMethod("encodeEnd");
}
+ public static void clearCaches() {
+ TypesFactory.clearCaches();
+ ELParserUtils.clearCaches();
+ }
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererTemplateParser.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererTemplateParser.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererTemplateParser.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,12 +23,13 @@
package org.richfaces.cdk.templatecompiler;
+import java.io.File;
+
import org.richfaces.cdk.CdkContext;
import org.richfaces.cdk.CdkException;
import org.richfaces.cdk.ModelBuilder;
import org.richfaces.cdk.StandardSources;
import org.richfaces.cdk.model.ClassDescription;
-import org.richfaces.cdk.model.Component;
import org.richfaces.cdk.model.ComponentLibrary;
import org.richfaces.cdk.model.RenderKit;
import org.richfaces.cdk.model.Renderer;
@@ -36,8 +37,6 @@
import org.richfaces.cdk.templatecompiler.model.Template;
import org.richfaces.cdk.xmlconfig.JAXBBinding;
-import java.io.File;
-
/**
* <p class="changed_added_4_0"></p>
*
@@ -56,15 +55,15 @@
ComponentLibrary library = context.getLibrary();
for (File file : getContext().getSources(StandardSources.RENDERER_TEMPLATES)) {
- Template template = parseTemplate(file);
- CompositeInterface compositeInterface = template.getInterface();
- // TODO - infer values ?
- RenderKit renderKit =
library.addRenderKit(compositeInterface.getRenderKitId());
- Renderer renderer = new Renderer(new
Renderer.Type(compositeInterface.getRendererType()));
- renderKit.getRenderers().add(renderer);
- String componentType = compositeInterface.getComponentType();
+ Template template = parseTemplate(file);
+ CompositeInterface compositeInterface = template.getInterface();
+ // TODO - infer values ?
+ RenderKit renderKit =
library.addRenderKit(compositeInterface.getRenderKitId());
+ Renderer renderer = new Renderer(new
Renderer.Type(compositeInterface.getRendererType()));
+ renderKit.getRenderers().add(renderer);
+ String componentType = compositeInterface.getComponentType();
-// component.getRenderers().add(renderer);
+ // component.getRenderers().add(renderer);
String family = compositeInterface.getComponentFamily();
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/model/CdkObjectElement.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/model/CdkObjectElement.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/model/CdkObjectElement.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -21,12 +21,12 @@
*/
package org.richfaces.cdk.templatecompiler.model;
-import org.richfaces.cdk.CdkException;
-
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlValue;
+import org.richfaces.cdk.CdkException;
+
/**
* @author Nick Belaevski
* @since 4.0
@@ -46,6 +46,9 @@
@XmlAttribute(required = true)
private String type;
+ @XmlAttribute(name = "type-arguments")
+ private String typeArguments;
+
/**
* @return the bodyValue
*/
@@ -102,6 +105,20 @@
this.type = type;
}
+ /**
+ * @return the typeArguments
+ */
+ public String getTypeArguments() {
+ return typeArguments;
+ }
+
+ /**
+ * @param typeArguments the typeArguments to set
+ */
+ public void setTypeArguments(String typeArguments) {
+ this.typeArguments = typeArguments;
+ }
+
@Override
public void visit(TemplateVisitor visitor) throws CdkException {
visitor.visitElement(this);
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigGenerator.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigGenerator.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigGenerator.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -25,6 +25,8 @@
package org.richfaces.cdk.xmlconfig;
+import java.io.File;
+
import org.richfaces.cdk.CdkContext;
import org.richfaces.cdk.CdkException;
import org.richfaces.cdk.CdkWriter;
@@ -32,8 +34,6 @@
import org.richfaces.cdk.model.ComponentLibrary;
import org.richfaces.cdk.xmlconfig.model.FacesConfigAdapter;
-import java.io.File;
-
/**
* <p class="changed_added_4_0">
* </p>
@@ -42,9 +42,11 @@
*
*/
public class FacesConfigGenerator implements CdkWriter {
+
+ public static final String FACES_SCHEMA_LOCATION =
ComponentLibrary.FACES_CONFIG_NAMESPACE + " "
+ + ComponentLibrary.FACES_CONFIG_SCHEMA_LOCATION;
+
private static final String FACES_CONFIG_XML =
"META-INF/faces-config.xml";
- public static final String FACES_SCHEMA_LOCATION =
ComponentLibrary.FACES_CONFIG_NAMESPACE + " "
- +
ComponentLibrary.FACES_CONFIG_SCHEMA_LOCATION;
private CdkContext context;
private JAXBBinding jaxbBinding;
private FacesConfigAdapter libraryAdapter;
@@ -89,7 +91,7 @@
ComponentLibrary library = context.getLibrary();
// TODO - check modification time.
File facesConfigXml = context.createOutputFile(StandardOutputs.FACES_CONFIG,
FACES_CONFIG_XML,
- library.lastModified());
+ library.lastModified());
if (null != facesConfigXml) {
try {
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigParser.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigParser.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigParser.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -41,10 +41,11 @@
*
*/
public class FacesConfigParser implements ModelBuilder {
+
+ private static final FacesConfigAdapter ADAPTER = new FacesConfigAdapter();
+
private CdkContext context;
private JAXBBinding jaxbBinding;
-
- private FacesConfigAdapter ADAPTER = new FacesConfigAdapter();
/**
* <p class="changed_added_4_0"></p>
@@ -66,14 +67,14 @@
FacesConfigBean unmarshal = unmarshalFacesConfig(file);
if(null != unmarshal){
ComponentLibrary facesConfig = ADAPTER.unmarshal(unmarshal);
- library.getComponents().addAll(facesConfig.getComponents());
- library.getRenderKits().putAll(facesConfig.getRenderKits());
- // TODO - merge changes into library.
-// library.getRenderers().addAll(unmarshal.getRenderers());
-// library.getValidators().addAll(unmarshal.getValidators);
-// library.getConverters().addAll(unmarshal.getConverters());
-// library.getBehaviors().addAll(unmarshal.getBehaviors());
-// library.setExtensions(unmarshal.getExtensions());
+ library.getComponents().addAll(facesConfig.getComponents());
+ library.getRenderKits().putAll(facesConfig.getRenderKits());
+ // TODO - merge changes into library.
+ // library.getRenderers().addAll(unmarshal.getRenderers());
+ // library.getValidators().addAll(unmarshal.getValidators);
+ // library.getConverters().addAll(unmarshal.getConverters());
+ // library.getBehaviors().addAll(unmarshal.getBehaviors());
+ // library.setExtensions(unmarshal.getExtensions());
}
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FragmentParser.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FragmentParser.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FragmentParser.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -25,7 +25,6 @@
package org.richfaces.cdk.xmlconfig;
-import java.util.Collection;
import java.util.Collections;
import java.util.Map;
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/JAXBBinding.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/JAXBBinding.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/JAXBBinding.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -27,7 +27,6 @@
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
-
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -35,13 +34,9 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
-
-import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
-
import java.net.URI;
import java.net.URISyntaxException;
-
import java.util.Collection;
import javax.xml.bind.JAXBContext;
@@ -56,15 +51,11 @@
import javax.xml.transform.stream.StreamResult;
import org.apache.cocoon.pipeline.component.sax.XIncludeTransformer;
-
import org.richfaces.cdk.CdkContext;
import org.richfaces.cdk.CdkException;
import org.richfaces.cdk.CdkWorker;
import org.richfaces.cdk.model.ConfigExtension;
import org.richfaces.cdk.model.Extensible;
-import org.richfaces.cdk.model.Key;
-import org.richfaces.cdk.model.ModelElement;
-
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/AdapterBase.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/AdapterBase.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/AdapterBase.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,28 +23,25 @@
package org.richfaces.cdk.xmlconfig.model;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+
import org.richfaces.cdk.CdkException;
import org.richfaces.cdk.model.ModelElement;
-import org.richfaces.cdk.model.Property;
import org.richfaces.cdk.xmlconfig.JAXBBinding;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-
/**
* <p class="changed_added_4_0"></p>
*
* @author asmirnov(a)exadel.com
*/
public abstract class AdapterBase<K,V> extends XmlAdapter<K, V> {
-
+
@Override
public K marshal(V model) throws CdkException {
K bean = JAXBBinding.createAdapter(getBeanClass(model), model);
@@ -73,27 +70,27 @@
protected <K, B extends MapEntry<K>, M extends ModelElement<? super
M>> List<B> marshalMap(Map<K,M> map,
AdapterBase<B, M> adapter) throws CdkException {
- List<B> result = Lists.newArrayList();
- if(null != map && map.size()>0){
- for (Map.Entry<K, M> entry : map.entrySet()) {
- B bean = adapter.marshal(entry.getValue());
- bean.setKey(entry.getKey());
- result.add(bean);
- }
+ List<B> result = Lists.newArrayList();
+ if(null != map && map.size()>0){
+ for (Map.Entry<K, M> entry : map.entrySet()) {
+ B bean = adapter.marshal(entry.getValue());
+ bean.setKey(entry.getKey());
+ result.add(bean);
}
- return result;
}
+ return result;
+ }
protected <K,B extends MapEntry<K>, M extends ModelElement<? super
M>> Map<K,M> unmarshalMap(List<B> list,
AdapterBase<B, M> adapter) throws CdkException {
- Map<K,M> map = Maps.newHashMap();
- if(null != list && list.size()>0){
- for (B bean : list) {
- M model = adapter.unmarshal(bean);
- map.put(bean.getKey(), model);
- }
+ Map<K,M> map = Maps.newHashMap();
+ if(null != list && list.size()>0){
+ for (B bean : list) {
+ M model = adapter.unmarshal(bean);
+ map.put(bean.getKey(), model);
}
- return map;
}
+ return map;
+ }
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/BehaviorRendererAdapter.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/BehaviorRendererAdapter.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/BehaviorRendererAdapter.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -24,10 +24,7 @@
package org.richfaces.cdk.xmlconfig.model;
import org.richfaces.cdk.model.BehaviorRenderer;
-import org.richfaces.cdk.xmlconfig.JAXBBinding;
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-
/**
* <p class="changed_added_4_0"></p>
*
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/BehaviorRendererBean.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/BehaviorRendererBean.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/BehaviorRendererBean.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,14 +23,14 @@
package org.richfaces.cdk.xmlconfig.model;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
import org.richfaces.cdk.model.ClassDescription;
import org.richfaces.cdk.model.ComponentLibrary;
import org.richfaces.cdk.model.ConfigExtension;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-
/**
* <p class="changed_added_4_0"></p>
*
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ClassAdapter.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ClassAdapter.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ClassAdapter.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,10 +23,10 @@
package org.richfaces.cdk.xmlconfig.model;
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+
import org.richfaces.cdk.model.ClassDescription;
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-
/**
* <p class="changed_added_4_0"></p>
*
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ClassBean.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ClassBean.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ClassBean.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,11 +23,11 @@
package org.richfaces.cdk.xmlconfig.model;
-import org.richfaces.cdk.model.ComponentLibrary;
-
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;
+import org.richfaces.cdk.model.ComponentLibrary;
+
/**
* <p class="changed_added_4_0"></p>
*
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ComponentAdapter.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ComponentAdapter.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ComponentAdapter.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -35,9 +35,9 @@
*/
public class ComponentAdapter extends AdapterBase<ComponentBean, Component> {
- private final AttributeAdapter ATTRIBUTE_ADAPTER = new AttributeAdapter();
+ private static final AttributeAdapter ATTRIBUTE_ADAPTER = new AttributeAdapter();
- private final FacetAdapter FACET_ADAPTER = new FacetAdapter();
+ private static final FacetAdapter FACET_ADAPTER = new FacetAdapter();
@Override
protected Class<? extends ComponentBean> getBeanClass(Component c) {
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ComponentBean.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ComponentBean.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ComponentBean.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,20 +23,20 @@
package org.richfaces.cdk.xmlconfig.model;
-import com.google.common.collect.Lists;
-import org.richfaces.cdk.model.ClassDescription;
-import org.richfaces.cdk.model.ComponentLibrary;
-import org.richfaces.cdk.model.ConfigExtension;
-import org.richfaces.cdk.model.Event;
-import org.richfaces.cdk.model.Facet;
-import org.richfaces.cdk.model.Property;
+import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import java.util.List;
+import org.richfaces.cdk.model.ClassDescription;
+import org.richfaces.cdk.model.ComponentLibrary;
+import org.richfaces.cdk.model.ConfigExtension;
+import org.richfaces.cdk.model.Event;
+
+import com.google.common.collect.Lists;
+
/**
* <p class="changed_added_4_0"></p>
*
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/DescriptionGroupBean.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/DescriptionGroupBean.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/DescriptionGroupBean.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -1,10 +1,10 @@
package org.richfaces.cdk.xmlconfig.model;
+import javax.xml.bind.annotation.XmlElement;
+
import org.richfaces.cdk.model.ComponentLibrary;
import org.richfaces.cdk.model.DescriptionGroup;
-import javax.xml.bind.annotation.XmlElement;
-
public class DescriptionGroupBean implements DescriptionGroup {
private String description;
private String displayname;
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/EventAdapter.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/EventAdapter.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/EventAdapter.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -24,10 +24,7 @@
package org.richfaces.cdk.xmlconfig.model;
import org.richfaces.cdk.model.Event;
-import org.richfaces.cdk.xmlconfig.JAXBBinding;
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-
/**
* <p class="changed_added_4_0"></p>
*
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/EventBean.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/EventBean.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/EventBean.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,13 +23,13 @@
package org.richfaces.cdk.xmlconfig.model;
-import org.richfaces.cdk.model.ClassDescription;
-import org.richfaces.cdk.model.ComponentLibrary;
-
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import org.richfaces.cdk.model.ClassDescription;
+import org.richfaces.cdk.model.ComponentLibrary;
+
/**
* <p class="changed_added_4_0"></p>
*
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacesConfigAdapter.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacesConfigAdapter.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacesConfigAdapter.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -24,10 +24,7 @@
package org.richfaces.cdk.xmlconfig.model;
import org.richfaces.cdk.model.ComponentLibrary;
-import org.richfaces.cdk.xmlconfig.JAXBBinding;
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-
/**
* <p class="changed_added_4_0"></p>
*
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacesConfigBean.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacesConfigBean.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacesConfigBean.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,19 +23,20 @@
package org.richfaces.cdk.xmlconfig.model;
-import com.google.common.collect.Lists;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
import org.richfaces.cdk.model.Component;
import org.richfaces.cdk.model.ComponentLibrary;
import org.richfaces.cdk.model.ConfigExtension;
import org.richfaces.cdk.model.Event;
import org.richfaces.cdk.model.Extensible;
-import org.richfaces.cdk.model.RenderKit;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import java.util.List;
+import com.google.common.collect.Lists;
/**
* <p class="changed_added_4_0"></p>
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacetAdapter.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacetAdapter.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacetAdapter.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -24,10 +24,7 @@
package org.richfaces.cdk.xmlconfig.model;
import org.richfaces.cdk.model.Facet;
-import org.richfaces.cdk.xmlconfig.JAXBBinding;
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-
/**
* <p class="changed_added_4_0"></p>
*
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacetBean.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacetBean.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacetBean.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,11 +23,11 @@
package org.richfaces.cdk.xmlconfig.model;
+import javax.xml.bind.annotation.XmlElement;
+
import org.richfaces.cdk.model.ComponentLibrary;
import org.richfaces.cdk.model.ConfigExtension;
-import javax.xml.bind.annotation.XmlElement;
-
/**
* <p class="changed_added_4_0"></p>
*
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/Fragment.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/Fragment.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/Fragment.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,19 +23,10 @@
package org.richfaces.cdk.xmlconfig.model;
-import com.google.common.collect.Maps;
+import javax.xml.bind.annotation.XmlRootElement;
import org.richfaces.cdk.model.ComponentLibrary;
-import org.richfaces.cdk.model.Property;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElements;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-
-import java.util.List;
-import java.util.Map;
-
/**
* <p class="changed_added_4_0"></p>
*
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/PropertyBase.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/PropertyBase.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/PropertyBase.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,18 +23,20 @@
package org.richfaces.cdk.xmlconfig.model;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
+import java.util.List;
+import java.util.Set;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
import org.richfaces.cdk.model.ClassDescription;
import org.richfaces.cdk.model.ComponentLibrary;
import org.richfaces.cdk.model.ConfigExtension;
import org.richfaces.cdk.model.EventName;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import java.util.List;
-import java.util.Set;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
/**
* <p class="changed_added_4_0"></p>
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/RenderKitAdapter.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/RenderKitAdapter.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/RenderKitAdapter.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -24,10 +24,7 @@
package org.richfaces.cdk.xmlconfig.model;
import org.richfaces.cdk.model.RenderKit;
-import org.richfaces.cdk.xmlconfig.JAXBBinding;
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-
/**
* <p class="changed_added_4_0"></p>
*
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/RenderKitBean.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/RenderKitBean.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/RenderKitBean.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,7 +23,12 @@
package org.richfaces.cdk.xmlconfig.model;
-import com.google.common.collect.Lists;
+import java.util.List;
+
+import javax.faces.render.RenderKitFactory;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
import org.richfaces.cdk.model.BehaviorRenderer;
import org.richfaces.cdk.model.ClassDescription;
import org.richfaces.cdk.model.ComponentLibrary;
@@ -32,10 +37,7 @@
import org.richfaces.cdk.model.Renderer;
import org.richfaces.cdk.model.RenderKit.Id;
-import javax.faces.render.RenderKitFactory;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import java.util.List;
+import com.google.common.collect.Lists;
/**
* <p class="changed_added_4_0"></p>
@@ -101,7 +103,13 @@
@Override
public void setKey(Id key) {
this.key = key;
- this.id = key.toString();
+
+ //TODO: Alex, please review fixed NPE
+ if (key != null) {
+ this.id = key.toString();
+ } else {
+ this.id = null;
+ }
}
/**
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/RendererAdapter.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/RendererAdapter.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/RendererAdapter.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -24,10 +24,7 @@
package org.richfaces.cdk.xmlconfig.model;
import org.richfaces.cdk.model.Renderer;
-import org.richfaces.cdk.xmlconfig.JAXBBinding;
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-
/**
* <p class="changed_added_4_0"></p>
*
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/RendererBean.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/RendererBean.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/RendererBean.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -23,17 +23,19 @@
package org.richfaces.cdk.xmlconfig.model;
-import com.google.common.collect.Lists;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
import org.richfaces.cdk.model.Attribute;
import org.richfaces.cdk.model.ClassDescription;
import org.richfaces.cdk.model.ComponentLibrary;
import org.richfaces.cdk.model.ConfigExtension;
import org.richfaces.cdk.model.Tag;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import java.util.List;
+import com.google.common.collect.Lists;
/**
* <p class="changed_added_4_0">
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/package-info.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/package-info.java 2009-12-16
15:48:23 UTC (rev 16152)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/package-info.java 2009-12-16
15:50:42 UTC (rev 16153)
@@ -16,13 +16,11 @@
})
package org.richfaces.cdk.xmlconfig.model;
-import org.richfaces.cdk.model.Attribute;
-import org.richfaces.cdk.model.ClassDescription;
-import org.richfaces.cdk.model.ComponentLibrary;
-import org.richfaces.cdk.model.Property;
-
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
+import org.richfaces.cdk.model.ClassDescription;
+import org.richfaces.cdk.model.ComponentLibrary;
+