package net.karneim.pojobuilder.model;
import static javax.lang.model.element.Modifier.FINAL;
import static javax.lang.model.element.Modifier.PRIVATE;
import static javax.lang.model.element.Modifier.PROTECTED;
import static javax.lang.model.element.Modifier.PUBLIC;
import java.util.Set;
import javax.lang.model.element.Modifier;
public class FieldAccessM implements WriteAccess {
private Set<Modifier> modifier;
private TypeM declaringClass;
public FieldAccessM(Set<Modifier> modifier) {
this.modifier = modifier;
}
public Set<Modifier> getModifier() {
return modifier;
}
public TypeM getDeclaringClass() {
return declaringClass;
}
public FieldAccessM declaredIn(TypeM type) {
this.declaringClass = type;
return this;
}
@Override
public boolean isVarArgs() {
return false;
}
@Override
public Type getType() {
return Type.FIELD;
}
public boolean isWritableFor(TypeM accessingClass) {
if (modifier.contains(FINAL)) {
return false;
}
if (modifier.contains(PRIVATE)) {
return false;
}
if (modifier.contains(PROTECTED)) {
return accessingClass.isInPackage(declaringClass.getPackageName());
}
if (modifier.contains(PUBLIC)) {
return true;
}
return accessingClass.isInPackage(declaringClass.getPackageName());
}
public boolean isReadableFor(TypeM accessingClass) {
if (modifier.contains(PRIVATE)) {
return false;
}
if (modifier.contains(PROTECTED)) {
return accessingClass.isInPackage(declaringClass.getPackageName());
}
if (modifier.contains(PUBLIC)) {
return true;
}
return accessingClass.isInPackage(declaringClass.getPackageName());
}
@Override
public String toString() {
return "FieldAccessM [modifier=" + modifier + ", declaringClass=" + declaringClass + "]";
}
}