All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.zerobuilder.compiler.analyse.GoalModifiers Maven / Gradle / Ivy

package net.zerobuilder.compiler.analyse;

import net.zerobuilder.AccessLevel;
import net.zerobuilder.GoalName;
import net.zerobuilder.Level;
import net.zerobuilder.Recycle;
import net.zerobuilder.compiler.generate.Access;
import net.zerobuilder.compiler.generate.DtoContext;

import javax.lang.model.element.ExecutableElement;

import static net.zerobuilder.compiler.analyse.DtoGoalElement.goalType;
import static net.zerobuilder.compiler.generate.ZeroUtil.downcase;
import static net.zerobuilder.compiler.generate.ZeroUtil.simpleName;

final class GoalModifiers {

  final Access access;
  final DtoContext.ContextLifecycle lifecycle;
  final String goalName;

  private GoalModifiers(Access access, DtoContext.ContextLifecycle lifecycle, String goalName) {
    this.access = access;
    this.lifecycle = lifecycle;
    this.goalName = goalName;
  }

  private static Access getAccess(ExecutableElement element) {
    AccessLevel accessLevel = element.getAnnotation(AccessLevel.class);
    if (accessLevel != null &&
        accessLevel.value() == Level.PACKAGE) {
      return Access.PACKAGE;
    }
    return Access.PUBLIC;
  }

  static GoalModifiers create(ExecutableElement element) {
    Access access = getAccess(element);
    DtoContext.ContextLifecycle lifecycle = element.getAnnotation(Recycle.class) == null ?
        DtoContext.ContextLifecycle.NEW_INSTANCE :
        DtoContext.ContextLifecycle.REUSE_INSTANCES;
    String goalName = element.getAnnotation(GoalName.class) == null ?
        downcase(simpleName(goalType(element))) :
        element.getAnnotation(GoalName.class).value();
    return new GoalModifiers(access, lifecycle, goalName);
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy