package com.asayama.gwt.angular.rebind;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.JMethod;
public class DefaultInstantiableCreatorGenerator extends AbstractFactoryGenerator {
private static final String CLASS = DefaultInstantiableCreatorGenerator.class.getName();
private static final Logger LOG = Logger.getLogger(CLASS);
@Override
String getFilename() {
return "com/asayama/gwt/angular/rebind/CreatorFactory.vm";
}
@Override
protected String generate(TreeLogger logger, GeneratorContext context,
VelocityGenerator velocity, String packageName, String className) {
JClassType classType = getClassType(context, packageName + "." + className);
String creatorReturnType = getCreatorReturnType(classType);
velocity.put("creatorReturnType", creatorReturnType);
return super
.generate(logger, context, velocity, packageName, className);
}
protected String getCreatorReturnType(JClassType classType) {
final String METHOD = "getCreatorReturnType(JClassType)";
String creatorReturnType = null;
JMethod[] methods = classType.getMethods();
for (JMethod method : methods) {
creatorReturnType = method.getReturnType().getQualifiedSourceName();
if (creatorReturnType != null) {
break;// we expect to see only one creator method
}
}
if (creatorReturnType == null) {
LOG.logp(Level.WARNING, CLASS, METHOD,
"Unable to identify creatorReturnType.");
}
return creatorReturnType;
}
}