com.github.gkutiel.flip.processor.MethodVisitor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of flip-processor Show documentation
Show all versions of flip-processor Show documentation
A new way to build web applications
package com.github.gkutiel.flip.processor;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.annotation.processing.Messager;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.Name;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.SimpleElementVisitor7;
import javax.tools.Diagnostic.Kind;
import com.github.gkutiel.flip.processor.Method.Param;
class MethodVisitor extends SimpleElementVisitor7 {
private final Element element;
private TypeMirror returnType;
private Name name;
private List params;
private final Messager messager;
public MethodVisitor(final Messager messager, final Element element) {
this.messager = messager;
this.element = element;
}
private void checkModifiers(final ExecutableElement e) {
final Set modifiers = e.getModifiers();
if (!modifiers.contains(Modifier.PUBLIC)) messager.printMessage(Kind.ERROR, "method must be public", e);
}
public Method getMethod() {
return element.accept(this, null);
}
public String getName() {
return name.toString();
}
private List params(final ExecutableElement e) {
final List params = new ArrayList<>();
for (final VariableElement param : e.getParameters())
params.add(new Param(param.asType(), param.getSimpleName()));
return params;
}
@Override
public Method visitExecutable(final ExecutableElement e, final Void p) {
checkModifiers(e);
returnType = e.getReturnType();
name = e.getSimpleName();
params = params(e);
return new Method(returnType, name, params);
}
}