package net.karneim.pojobuilder.model; 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 MethodM { private String name; private Set<Modifier> modifiers; private TypeM declaringClass; public MethodM(String name, Set<Modifier> modifiers) { super(); this.name = name; this.modifiers = modifiers; } public String getName() { return name; } public Set<Modifier> getModifiers() { return modifiers; } public TypeM getDeclaringClass() { return declaringClass; } public MethodM declaredIn(TypeM type) { this.declaringClass = type; return this; } public boolean isAccessibleFor(TypeM accessingClass) { if (accessingClass == null) { throw new NullPointerException("accessingClass==null!"); } if (declaringClass == null) { throw new IllegalStateException(String.format("Missing declaringClass in MethodM %s", name)); } // TODO check modifiers PROTECTED or package protected etc. if (modifiers.contains(PRIVATE)) { return false; } if (modifiers.contains(PROTECTED)) { return accessingClass.isInPackage(declaringClass.getPackageName()); } if (modifiers.contains(PUBLIC)) { return true; } return accessingClass.isInPackage(declaringClass.getPackageName()); } @Override public String toString() { return "MethodM [name=" + name + ", modifiers=" + modifiers + ", declaringClass=" + declaringClass + "]"; } }