mirror of
https://github.com/collinsmith/riiablo.git
synced 2025-02-23 21:21:28 +07:00
Added type and constructor checking for Schema
This commit is contained in:
parent
dc733d29a5
commit
c90b96a22a
@ -4,7 +4,10 @@ import com.squareup.javapoet.ClassName;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
import javax.lang.model.element.Element;
|
||||
import javax.lang.model.element.ExecutableElement;
|
||||
import javax.lang.model.element.Modifier;
|
||||
import javax.lang.model.element.TypeElement;
|
||||
import javax.lang.model.element.VariableElement;
|
||||
import javax.lang.model.type.TypeMirror;
|
||||
@ -16,6 +19,24 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
final class SchemaElement {
|
||||
static SchemaElement get(final Context context, Element element) {
|
||||
TypeElement typeElement = (TypeElement) element;
|
||||
Set<Modifier> modifiers = typeElement.getModifiers();
|
||||
if (!modifiers.contains(Modifier.PUBLIC)) {
|
||||
context.error(typeElement, "{element} must be declared {}", Modifier.PUBLIC);
|
||||
return null;
|
||||
} else if (modifiers.contains(Modifier.ABSTRACT)) {
|
||||
context.error(typeElement, "{element} must be a concrete type");
|
||||
return null;
|
||||
}
|
||||
|
||||
ExecutableElement defaultConstructor = defaultConstructor(context, typeElement);
|
||||
if (defaultConstructor == null) {
|
||||
context.error(typeElement, "{element} must contain a default constructor");
|
||||
return null;
|
||||
} else if (!defaultConstructor.getModifiers().contains(Modifier.PUBLIC)) {
|
||||
context.error(defaultConstructor, "{element} must be declared {}", Modifier.PUBLIC);
|
||||
return null;
|
||||
}
|
||||
|
||||
Collection<FieldElement> fields = collectFieldElements(context, typeElement);
|
||||
|
||||
final FieldElement primaryKeyFieldElement;
|
||||
@ -51,6 +72,24 @@ final class SchemaElement {
|
||||
return new SchemaElement(typeElement, tableElement, serializerElement, primaryKeyFieldElement);
|
||||
}
|
||||
|
||||
static ExecutableElement defaultConstructor(
|
||||
Context context,
|
||||
TypeElement typeElement
|
||||
) {
|
||||
for (Element e : typeElement.getEnclosedElements()) {
|
||||
switch (e.getKind()) {
|
||||
case CONSTRUCTOR:
|
||||
ExecutableElement constructor = (ExecutableElement) e;
|
||||
if (constructor.getParameters().isEmpty()) {
|
||||
return constructor;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
static Collection<FieldElement> collectFieldElements(Context context, TypeElement typeElement) {
|
||||
Collection<FieldElement> fields = new ArrayList<>();
|
||||
TypeElement superclassElement = typeElement;
|
||||
|
Loading…
Reference in New Issue
Block a user