Author: nbelaevski
Date: 2008-10-13 15:53:31 -0400 (Mon, 13 Oct 2008)
New Revision: 10733
Modified:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/generator/AbstractClassStubBuilder.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/generator/ResourcesConfigGenerator.java
Log:
https://jira.jboss.org/jira/browse/RF-4601
Modified:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/generator/AbstractClassStubBuilder.java
===================================================================
---
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/generator/AbstractClassStubBuilder.java 2008-10-13
15:34:55 UTC (rev 10732)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/generator/AbstractClassStubBuilder.java 2008-10-13
19:53:31 UTC (rev 10733)
@@ -48,59 +48,65 @@
public class AbstractClassStubBuilder {
public static <T> T buildStub(final Class<T> clazz, MethodInterceptor
interceptor,
ClassLoader classLoader) {
- Enhancer enhancer = new Enhancer() {
- @Override
- public void generateClass(ClassVisitor v) throws Exception {
- ClassEmitter ce = new ClassEmitter(v);
- ce.begin_class(Constants.V1_4,
- Constants.ACC_PUBLIC,
- getClassName(),
- Type.getType(clazz),
- null,
- null);
- EmitUtils.null_constructor(ce);
- List methods = new ArrayList();
- getMethods(clazz, null, methods);
-
- for (Iterator iterator = methods.iterator(); iterator
- .hasNext();) {
- Method method = (Method) iterator.next();
-
- if (Modifier.isAbstract(method.getModifiers())) {
- MethodInfo methodInfo = ReflectUtils.getMethodInfo(method);
- Signature signature = methodInfo.getSignature();
- Type returnType = signature.getReturnType();
+ Class<T> instrumentedClass;
+
+ if ((Modifier.ABSTRACT & clazz.getModifiers()) != 0) {
+ Enhancer enhancer = new Enhancer() {
+ @Override
+ public void generateClass(ClassVisitor v) throws Exception {
+ ClassEmitter ce = new ClassEmitter(v);
+ ce.begin_class(Constants.V1_5,
+ Constants.ACC_PUBLIC,
+ getClassName(),
+ Type.getType(clazz),
+ null,
+ null);
+ EmitUtils.null_constructor(ce);
+ List methods = new ArrayList();
+ getMethods(clazz, null, methods);
+
+ for (Iterator iterator = methods.iterator(); iterator
+ .hasNext();) {
+ Method method = (Method) iterator.next();
- CodeEmitter e = ce.begin_method(method.getModifiers() & ~Modifier.ABSTRACT,
- signature, methodInfo.getExceptionTypes(),
- methodInfo.getAttribute());
-
- e.zero_or_null(returnType);
- e.return_value();
+ if (Modifier.isAbstract(method.getModifiers())) {
+ MethodInfo methodInfo = ReflectUtils.getMethodInfo(method);
+ Signature signature = methodInfo.getSignature();
+ Type returnType = signature.getReturnType();
+
+ CodeEmitter e = ce.begin_method(method.getModifiers() & ~Modifier.ABSTRACT,
+ signature, methodInfo.getExceptionTypes(),
+ methodInfo.getAttribute());
+
+ e.zero_or_null(returnType);
+ e.return_value();
- Type[] argumentTypes = methodInfo.getSignature().getArgumentTypes();
- int size = 0;
- if (argumentTypes != null) {
- for (int i = 0; i < argumentTypes.length; i++) {
- size += argumentTypes[i].getSize();
+ Type[] argumentTypes = methodInfo.getSignature().getArgumentTypes();
+ int size = 0;
+ if (argumentTypes != null) {
+ for (int i = 0; i < argumentTypes.length; i++) {
+ size += argumentTypes[i].getSize();
+ }
}
+
+ // 1 is for this
+ e.visitMaxs(returnType.getSize(), size + 1);
+
+ e.end_method();
}
-
- // 1 is for this
- e.visitMaxs(returnType.getSize(), size + 1);
-
- e.end_method();
- }
- }
-
- ce.end_class();
- }
- };
- enhancer.setSuperclass(clazz);
- enhancer.setCallbackType(MethodInterceptor.class);
- enhancer.setClassLoader(classLoader != null ?
- classLoader : clazz.getClassLoader());
- Class<T> instrumentedClass = enhancer.createClass();
+ }
+
+ ce.end_class();
+ }
+ };
+ enhancer.setSuperclass(clazz);
+ enhancer.setCallbackType(MethodInterceptor.class);
+ enhancer.setClassLoader(classLoader != null ?
+ classLoader : clazz.getClassLoader());
+ instrumentedClass = enhancer.createClass();
+ } else {
+ instrumentedClass = clazz;
+ }
Enhancer enhancer2 = new Enhancer();
enhancer2.setSuperclass(instrumentedClass);
Modified:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/generator/ResourcesConfigGenerator.java
===================================================================
---
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/generator/ResourcesConfigGenerator.java 2008-10-13
15:34:55 UTC (rev 10732)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/generator/ResourcesConfigGenerator.java 2008-10-13
19:53:31 UTC (rev 10733)
@@ -90,103 +90,114 @@
CompilationContext compilationContext = rootElement.getComponentBean();
- String classname = renderer.getClassname();
- int idx = classname.lastIndexOf('.');
- if (idx != -1) {
- packageName = classname.substring(0, idx);
- } else {
- packageName = "";
- }
-
- ClassLoader loader = builderConfig.getLoader();
- Class cl = null;
-
- try {
- cl = loader.loadClass(classname);
- } catch (ClassNotFoundException e) {
- String superclass = compilationContext.getBaseclassPackageName() + "." +
compilationContext.getBaseclassName();
- if (superclass != null) {
- cl = loader.loadClass(superclass);
+ addResource(configBean, renderer, builderConfig,
+ compilationContext);
+ } else if (templateElement instanceof HeaderResourceElement) {
+ HeaderResourceElement resourceElement = (HeaderResourceElement) templateElement;
+ String[] paths = resourceElement.getResourcePaths();
+ if (paths != null) {
+ for (int i = 0; i < paths.length; i++) {
+ String string = paths[i];
+
+ addResource(string, packageName, configBean);
}
}
+ }
+
+ ArrayList<TemplateElement> subElements = templateElement.getSubElements();
+ for (TemplateElement element : subElements) {
+ addResources(configBean, element, packageName, renderer, builderConfig);
+ }
+ }
- if (cl != null) {
+ private String addResource(ResourcesConfigGeneratorBean configBean,
+ RendererBean renderer, BuilderConfig builderConfig,
+ CompilationContext compilationContext)
+ throws ClassNotFoundException {
+ String packageName;
+ String classname = renderer.getClassname();
+ int idx = classname.lastIndexOf('.');
+ if (idx != -1) {
+ packageName = classname.substring(0, idx);
+ } else {
+ packageName = "";
+ }
+
+ ClassLoader loader = builderConfig.getLoader();
+ Class cl = null;
+
+ try {
+ cl = loader.loadClass(classname);
+ } catch (ClassNotFoundException e) {
+ String superclass = compilationContext.getBaseclassPackageName() + "." +
compilationContext.getBaseclassName();
+ if (superclass != null) {
+ cl = loader.loadClass(superclass);
+ }
+ }
+
+ if (cl != null) {
+ try {
GetResourceInterceptor interceptor = new GetResourceInterceptor();
+
Object instance = AbstractClassStubBuilder.buildStub(cl, interceptor,
builderConfig.getLoader());
+
+ Method method = null;
+ Object object = null;
- try {
- Method method = null;
- Object object = null;
-
- Class<?> cl1 = instance.getClass();
- while (cl1 != null && method == null) {
- try {
- method = cl1.getDeclaredMethod("getStyles", null);
- } catch (NoSuchMethodException e) {
- cl1 = cl1.getSuperclass();
- }
+ Class<?> cl1 = instance.getClass();
+ while (cl1 != null && method == null) {
+ try {
+ method = cl1.getDeclaredMethod("getStyles", null);
+ } catch (NoSuchMethodException e) {
+ cl1 = cl1.getSuperclass();
}
-
- if (method != null) {
- method.setAccessible(true);
- object = method.invoke(instance, null);
- List<String> list = interceptor.getList();
- if (list != null) {
- for (String name : list) {
- addResource(name, packageName, configBean);
- }
+ }
+
+ if (method != null) {
+ method.setAccessible(true);
+ object = method.invoke(instance, null);
+ List<String> list = interceptor.getList();
+ if (list != null) {
+ for (String name : list) {
+ addResource(name, packageName, configBean);
}
}
-
- interceptor.clearList();
+ }
+
+ interceptor.clearList();
- method = null;
- cl1 = instance.getClass();
- while (cl1 != null && method == null) {
- try {
- method = cl1.getDeclaredMethod("getScripts", null);
- } catch (NoSuchMethodException e) {
- cl1 = cl1.getSuperclass();
- }
+ method = null;
+ cl1 = instance.getClass();
+ while (cl1 != null && method == null) {
+ try {
+ method = cl1.getDeclaredMethod("getScripts", null);
+ } catch (NoSuchMethodException e) {
+ cl1 = cl1.getSuperclass();
}
-
- if (method != null) {
- method.setAccessible(true);
- object = method.invoke(instance, null);
- List<String> list = interceptor.getList();
- if (list != null) {
- for (String name : list) {
- addResource(name, packageName, configBean);
- }
+ }
+
+ if (method != null) {
+ method.setAccessible(true);
+ object = method.invoke(instance, null);
+ List<String> list = interceptor.getList();
+ if (list != null) {
+ for (String name : list) {
+ addResource(name, packageName, configBean);
}
}
- } catch (SecurityException e) {
- builderConfig.getLog().error(e.getMessage(), e);
- } catch (IllegalArgumentException e) {
- builderConfig.getLog().error(e.getMessage(), e);
- } catch (IllegalAccessException e) {
- builderConfig.getLog().error(e.getMessage(), e);
- } catch (InvocationTargetException e) {
- builderConfig.getLog().error(e.getMessage(), e);
}
+ } catch (SecurityException e) {
+ builderConfig.getLog().error(e.getMessage(), e);
+ } catch (IllegalArgumentException e) {
+ builderConfig.getLog().error(e.getMessage(), e);
+ } catch (IllegalAccessException e) {
+ builderConfig.getLog().error(e.getMessage(), e);
+ } catch (InvocationTargetException e) {
+ builderConfig.getLog().error(e.getMessage(), e);
}
- } else if (templateElement instanceof HeaderResourceElement) {
- HeaderResourceElement resourceElement = (HeaderResourceElement) templateElement;
- String[] paths = resourceElement.getResourcePaths();
- if (paths != null) {
- for (int i = 0; i < paths.length; i++) {
- String string = paths[i];
-
- addResource(string, packageName, configBean);
- }
- }
}
-
- ArrayList<TemplateElement> subElements = templateElement.getSubElements();
- for (TemplateElement element : subElements) {
- addResources(configBean, element, packageName, renderer, builderConfig);
- }
+ return packageName;
}
private void addResource(String name, String packageName,
@@ -236,34 +247,40 @@
}
private void addResources(ResourcesConfigGeneratorBean configBean, RendererBean
renderer, BuilderConfig builderConfig) throws CompilationException, IOException,
ClassNotFoundException {
- if (null != renderer && renderer.isGenerate()
- && null != renderer.getTemplate()) {
-
- File template;
- if (null != getTemplates()) {
- template = new File(getTemplates(), renderer.getTemplate());
- } else {
- template = new File(renderer.getTemplate());
- }
- CompilationContext rendererBean = new RendererCompilationContext(
+ if (null != renderer) {
+ CompilationContext compilationContext = new RendererCompilationContext(
getLog(), getClassLoader(),getConfig());
- TemplateCompiler templateCompiler = new TemplateCompiler();
- InputStream templateStream = new FileInputStream(template);
- templateCompiler.processing(templateStream, rendererBean);
-
- TemplateElement root = rendererBean.getTree();
-
- String classname = renderer.getClassname();
- String packageName;
- int idx = classname.lastIndexOf('.');
- if (idx != -1) {
- packageName = classname.substring(0, idx);
+ if (renderer.isGenerate()) {
+ String templateString = renderer.getTemplate();
+ if (templateString != null) {
+ File template;
+ if (null != getTemplates()) {
+ template = new File(getTemplates(), templateString);
+ } else {
+ template = new File(templateString);
+ }
+
+ TemplateCompiler templateCompiler = new TemplateCompiler();
+ InputStream templateStream = new FileInputStream(template);
+ templateCompiler.processing(templateStream, compilationContext);
+
+ TemplateElement root = compilationContext.getTree();
+
+ String classname = renderer.getClassname();
+ String packageName;
+ int idx = classname.lastIndexOf('.');
+ if (idx != -1) {
+ packageName = classname.substring(0, idx);
+ } else {
+ packageName = "";
+ }
+
+ addResources(configBean, root, packageName, renderer, builderConfig);
+ }
} else {
- packageName = "";
+ addResource(configBean, renderer, builderConfig, compilationContext);
}
-
- addResources(configBean, root, packageName, renderer, builderConfig);
}
}