
br.com.objectos.way.pojo.plugin.FieldPojoProperty Maven / Gradle / Ivy
/*
* Copyright 2014-2015 Objectos, Fábrica de Software LTDA.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package br.com.objectos.way.pojo.plugin;
import java.util.Objects;
import javax.lang.model.element.Modifier;
import br.com.objectos.way.code.MethodInfo;
import br.com.objectos.way.code.SimpleTypeInfo;
import com.squareup.javapoet.CodeBlock;
import com.squareup.javapoet.FieldSpec;
import com.squareup.javapoet.TypeName;
import com.squareup.javapoet.TypeSpec;
/**
* @author [email protected] (Marcio Endo)
*/
class FieldPojoProperty extends PojoProperty implements PojoPropertyFieldBuilder {
private final Property property;
private CodeBlock initializer;
private Modifier[] modifiers = new Modifier[] {};
private String name;
private TypeName type;
public FieldPojoProperty(Property property) {
this.property = property;
name();
type();
}
@Override
public PojoProperty build() {
return this;
}
@Override
public PojoPropertyFieldBuilder initializer(String template, Object... args) {
initializer = CodeBlock.builder()
.add(template, args)
.build();
return this;
}
@Override
public PojoPropertyFieldBuilder modifiers(Modifier... modifiers) {
this.modifiers = modifiers;
return this;
}
@Override
public PojoPropertyFieldBuilder name() {
name = property.name();
return this;
}
@Override
public PojoPropertyFieldBuilder type() {
MethodInfo methodInfo = property.methodInfo();
SimpleTypeInfo returnTypeInfo = methodInfo.returnTypeInfo();
type = returnTypeInfo.typeName();
return this;
}
@Override
public PojoPropertyFieldBuilder type(TypeName type) {
Objects.requireNonNull(type);
this.type = type;
return this;
}
@Override
void accept(TypeSpec.Builder type) {
FieldSpec.Builder field = FieldSpec.builder(this.type, name)
.addModifiers(modifiers);
if (initializer != null) {
field.initializer(initializer);
}
type.addField(field.build());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy