Class BaseCommandProcessor

java.lang.Object
javax.annotation.processing.AbstractProcessor
io.github.projectunified.craftcommand.processor.BaseCommandProcessor
All Implemented Interfaces:
Processor
Direct Known Subclasses:
BukkitCommandProcessor, PaperCommandProcessor, StandaloneCommandProcessor

public abstract class BaseCommandProcessor extends AbstractProcessor
Lightweight, human-readable base annotation processor for CraftCommand. Supports custom validation annotations, parameter resolvers, deep subcommand nesting, and SPI extensions.
  • Field Details

    • typeSupport

      protected final TypeSupport typeSupport
  • Constructor Details

    • BaseCommandProcessor

      public BaseCommandProcessor()
  • Method Details

    • getUsage

      protected static String getUsage(MethodModel method, CommandModel classModel)
    • getSimpleName

      public static String getSimpleName(com.palantir.javapoet.TypeName typeName)
    • getSubcommandNames

      protected static String getSubcommandNames(CommandModel model)
    • findAnnotationUp

      protected static <A extends Annotation> A findAnnotationUp(Element element, Class<A> annotationType)
    • isI18nKey

      protected static boolean isI18nKey(String message)
    • i18nKey

      protected static String i18nKey(String message)
    • typeSupport

      public TypeSupport typeSupport()
    • init

      public void init(ProcessingEnvironment processingEnv)
      Specified by:
      init in interface Processor
      Overrides:
      init in class AbstractProcessor
    • process

      public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv)
      Specified by:
      process in interface Processor
      Specified by:
      process in class AbstractProcessor
    • registerTypes

      protected void registerTypes(TypeSupport types)
    • getWrapperClassSuffix

      protected abstract String getWrapperClassSuffix()
    • getSenderTypeName

      protected abstract com.palantir.javapoet.ClassName getSenderTypeName()
    • getManagerType

      protected abstract com.palantir.javapoet.TypeName getManagerType()
    • configureClass

      protected void configureClass(com.palantir.javapoet.TypeSpec.Builder typeSpec, CommandModel model)
    • addPlatformFields

      protected void addPlatformFields(com.palantir.javapoet.TypeSpec.Builder typeSpec, CommandModel model)
    • addConstructorStatements

      protected void addConstructorStatements(com.palantir.javapoet.MethodSpec.Builder constructorBuilder, CommandModel model)
    • generateEntryMethods

      protected abstract void generateEntryMethods(com.palantir.javapoet.TypeSpec.Builder typeSpec, CommandModel model, TypeElement typeElement)
    • generatePlatformHelpers

      protected void generatePlatformHelpers(com.palantir.javapoet.TypeSpec.Builder typeSpec, CommandModel model)
    • onBeforeExecute

      protected void onBeforeExecute(com.palantir.javapoet.MethodSpec.Builder methodSpec, Element element, String returnStatement)
    • generateUnknownSubcommandMessage

      protected void generateUnknownSubcommandMessage(com.palantir.javapoet.MethodSpec.Builder methodSpec, CommandModel model)
    • getSenderExpression

      protected com.palantir.javapoet.CodeBlock getSenderExpression(String senderVar)
    • buildWrapperClass

      protected void buildWrapperClass(CommandModel model, TypeElement typeElement) throws IOException
      Throws:
      IOException
    • generateHelpers

      protected void generateHelpers(com.palantir.javapoet.TypeSpec.Builder typeSpec, CommandModel model)
    • generateSubcommandFieldsAndConstructors

      protected void generateSubcommandFieldsAndConstructors(CommandModel model, com.palantir.javapoet.TypeSpec.Builder typeSpec, com.palantir.javapoet.MethodSpec.Builder constructor, String parentFieldName)
    • getSubcommandFieldName

      protected String getSubcommandFieldName(CommandModel child)
    • getInstanceVarExpression

      public String getInstanceVarExpression(CommandModel classModel, CommandModel rootModel)
    • getResolverInstanceExpr

      public String getResolverInstanceExpr(ExecutableElement resolver, CommandModel classModel, CommandModel rootModel)
    • generateExecuteMethodBody

      public void generateExecuteMethodBody(com.palantir.javapoet.MethodSpec.Builder executeSpec, CommandModel model, String returnStatement)
    • generateSubcommandClassExecutors

      protected void generateSubcommandClassExecutors(com.palantir.javapoet.TypeSpec.Builder typeSpec, CommandModel model, CommandModel rootModel)
    • buildExecutionRouting

      protected void buildExecutionRouting(com.palantir.javapoet.MethodSpec.Builder methodSpec, CommandModel model, String argsVar, String instanceVar, CommandModel rootModel, String returnStatement)
    • buildMethodExecution

      protected void buildMethodExecution(com.palantir.javapoet.MethodSpec.Builder methodSpec, CommandModel classModel, MethodModel method, String argsVar, int initialOffset, String instanceVar, CommandModel rootModel)
    • resolveSender

      public void resolveSender(com.palantir.javapoet.MethodSpec.Builder methodSpec, CommandModel classModel, MethodModel method, CommandModel rootModel, String senderVarName, ParameterModel senderParam, com.palantir.javapoet.TypeName senderParamTypeName)
    • resolveParameter

      public void resolveParameter(com.palantir.javapoet.MethodSpec.Builder methodSpec, CommandModel classModel, MethodModel method, CommandModel rootModel, ParameterModel p, String varName, String senderVarName, String argsVar, String argIdxVar, boolean hasDynamic, int paramIndex)
    • resolveResolverParameters

      public void resolveResolverParameters(com.palantir.javapoet.MethodSpec.Builder methodSpec, CommandModel classModel, MethodModel method, CommandModel rootModel, MethodModel resolverModel, String varName, String senderVarName, String argsVar, String argIdxVar, ParameterModel parentParam, boolean hasDynamic, int paramIndex)
    • generateResolverInvocation

      public void generateResolverInvocation(com.palantir.javapoet.MethodSpec.Builder methodSpec, ExecutableElement localResolver, CommandModel classModel, CommandModel rootModel, com.palantir.javapoet.TypeName pTypeName, String varName, String senderVarName, List<String> resolverArgVarNames, boolean includeSender)
    • isParamDirectSuggestionAvailable

      public boolean isParamDirectSuggestionAvailable(ParameterModel p, CommandModel classModel)
    • isResolverParamSuggestionAvailable

      public boolean isResolverParamSuggestionAvailable(VariableElement rp)
    • isParamSuggestionAvailable

      public boolean isParamSuggestionAvailable(ParameterModel p, CommandModel classModel)
    • hasAnySuggestions

      public boolean hasAnySuggestions(MethodModel method, CommandModel classModel)
    • buildSuggestionRouting

      public void buildSuggestionRouting(com.palantir.javapoet.MethodSpec.Builder methodSpec, CommandModel model, String argsVar, String instanceVar, CommandModel rootModel)
    • buildSubcommandSuggestionRouting

      protected void buildSubcommandSuggestionRouting(com.palantir.javapoet.MethodSpec.Builder methodSpec, CommandModel classModel, MethodModel method, String argsVar)
    • buildParameterSuggestions

      protected void buildParameterSuggestions(com.palantir.javapoet.TypeSpec.Builder typeSpec, CommandModel model, CommandModel rootModel)
    • getParameterSuggestionMethodName

      protected String getParameterSuggestionMethodName(CommandModel classModel, MethodModel method, int index)
    • getResolverParamSuggestionMethodName

      protected String getResolverParamSuggestionMethodName(CommandModel classModel, MethodModel method, String resolverName, int index)
    • buildResolverParamSuggestionHelper

      protected com.palantir.javapoet.MethodSpec buildResolverParamSuggestionHelper(CommandModel classModel, MethodModel method, ParameterModel rp, String helperName, CommandModel rootModel)
    • buildParameterSuggestionHelper

      protected com.palantir.javapoet.MethodSpec buildParameterSuggestionHelper(CommandModel classModel, MethodModel method, ParameterModel p, int index, CommandModel rootModel)
    • buildBooleanSuggestionHelper

      protected void buildBooleanSuggestionHelper(com.palantir.javapoet.TypeSpec.Builder typeSpec, CommandModel model)
    • buildSenderCastHelpers

      protected void buildSenderCastHelpers(com.palantir.javapoet.TypeSpec.Builder typeSpec, CommandModel model)
    • buildCommandInfo

      protected void buildCommandInfo(com.palantir.javapoet.TypeSpec.Builder typeSpec, CommandModel model)
    • findLocalResolver

      public ExecutableElement findLocalResolver(CommandModel classModel, ParameterModel p, CommandModel rootModel)
    • findSuggestMethod

      protected ExecutableElement findSuggestMethod(TypeElement typeElement, String name)
    • isField

      protected boolean isField(TypeElement typeElement, String name)
    • findModelForClass

      public CommandModel findModelForClass(CommandModel current, TypeElement targetClass)
    • getBuiltInWidth

      public int getBuiltInWidth(com.palantir.javapoet.TypeName typeName)
    • isPlatformBuiltInType

      public boolean isPlatformBuiltInType(com.palantir.javapoet.TypeName typeName)
    • isSenderType

      public boolean isSenderType(com.palantir.javapoet.TypeName typeName)
    • isSenderBaseType

      public boolean isSenderBaseType(com.palantir.javapoet.TypeName typeName)
    • isSenderParam

      public boolean isSenderParam(com.palantir.javapoet.TypeName typeName, MethodModel method)
    • senderTypeRegistry

      protected SenderTypeRegistry senderTypeRegistry()
    • firstParamIsSender

      public boolean firstParamIsSender(ExecutableElement method)
    • firstParamIsSender

      public boolean firstParamIsSender(ExecutableElement resolverMethod, MethodModel commandMethod)
    • getLocalResolverMinWidth

      public int getLocalResolverMinWidth(ExecutableElement resolverMethod, MethodModel commandMethod)
    • getLocalResolverMaxWidth

      public int getLocalResolverMaxWidth(ExecutableElement resolverMethod, MethodModel commandMethod)
    • getResolverSenderExpression

      public String getResolverSenderExpression(ExecutableElement localResolver, String rawSourceExpr, String castSenderVar, com.palantir.javapoet.TypeName commandSenderType)
    • buildAliasesExpression

      protected com.palantir.javapoet.CodeBlock buildAliasesExpression(CommandModel model)
    • runParameterAnnotationHandlers

      public void runParameterAnnotationHandlers(VariableElement param, String varName, String instanceExpr, String senderVar, com.palantir.javapoet.MethodSpec.Builder methodSpec)