writeFile(tagInfo, stringTemplate);
}
if (componentTag.generate()) {
StringTemplate componentStringTemplate = componentStringTemplateGroup.getInstanceOf("component");
ComponentInfo componentInfo
= new ComponentInfo(declaration.getQualifiedName(), componentTag.uiComponent(), componentTag.rendererType());
/*
String p = componentTag.uiComponentBaseClass();
String c = componentTag.uiComponent();
String m = c.substring(0, 36) + "Abstract" + c.substring(36);
if (p.equals(m)) {
getEnv().getMessager().printNotice("*********** ok " + c);
} else {
getEnv().getMessager().printNotice("*********** diff " + c + " " + p);
}
*/
componentInfo.setSuperClass(componentTag.uiComponentBaseClass());
componentInfo.setComponentFamily(componentTag.componentFamily());
componentInfo.setDescription(getDescription(declaration));
componentInfo.setDeprecated(declaration.getAnnotation(Deprecated.class) != null);
List<String> elMethods = Collections.emptyList();
if (isUnifiedEL()) {
elMethods = checkForElMethods(componentInfo, componentTag.interfaces());
}
for (String interfaces : componentTag.interfaces()) {
componentInfo.addInterface(interfaces);
}
if (componentTag.componentType().length() > 0) {
componentInfo.setComponentType(componentTag.componentType());
} else {
componentInfo.setComponentType(componentTag.uiComponent().replace(".component.UI", "."));
}
try {
Class componentBaseClass = Class.forName(componentTag.uiComponentBaseClass());
int index = 0;
for (PropertyInfo info : properties.values()) {
String methodName
= (info.getType().equals("java.lang.Boolean") ? "is" : "get") + info.getUpperCamelCaseName();
String possibleUnifiedElAlternative = "set" + info.getUpperCamelCaseName() + "Expression";
try {
Method method = componentBaseClass.getMethod(methodName);
if (Modifier.isAbstract(method.getModifiers())) {
ComponentPropertyInfo property = addPropertyToComponent(componentInfo, info, index, false);
if (elMethods.contains(possibleUnifiedElAlternative)) {
addPropertyToComponent(componentInfo, info, index, true);
property.setElAlternativeAvailable(true);
}
index++;
}
} catch (NoSuchMethodException e) {
ComponentPropertyInfo property = addPropertyToComponent(componentInfo, info, index, false);
if (elMethods.contains(possibleUnifiedElAlternative)) {
addPropertyToComponent(componentInfo, info, index, true);
property.setElAlternativeAvailable(true);
}
index++;
}
}
boolean found = false;
for (Method method : componentBaseClass.getMethods()) {
if ("invokeOnComponent".equals(method.getName())) {
found = true;
}
}
if (!found) {
componentInfo.setInvokeOnComponent(true);
componentInfo.addImport("javax.faces.context.FacesContext");
componentInfo.addImport("javax.faces.FacesException");
componentInfo.addImport("javax.faces.component.ContextCallback");
componentInfo.addImport("org.apache.myfaces.tobago.compat.FacesUtils");
componentInfo.addInterface("org.apache.myfaces.tobago.compat.InvokeOnComponent");
}
} catch (ClassNotFoundException e) {
Map<String, PropertyInfo> baseClassProperties = getBaseClassProperties(componentTag.uiComponentBaseClass());
int index = 0;