Class AbstractBuilder<T extends Builder<T>>

java.lang.Object
io.github.chrimle.classforge.AbstractBuilder<T>
All Implemented Interfaces:
Builder<T>
Direct Known Subclasses:
ClassBuilder, EnumBuilder

public abstract sealed class AbstractBuilder<T extends Builder<T>> extends Object implements Builder<T> permits ClassBuilder, EnumBuilder
Abstract class for building and generating Java classes.
Since:
0.1.0
Author:
Chrimle
  • Field Details

    • reservedClassNames

      protected final Set<String> reservedClassNames
      The collection of previously committed classes.
    • semVer

      protected SemVer semVer
      The semVer of the previously committed class. Starts at 0.0.0.
    • versionPlacement

      protected Builder.VersionPlacement versionPlacement
      The versionPlacement of the currently uncommitted class.
    • directory

      protected String directory
      The directory of the currently uncommitted class.
    • packageName

      protected String packageName
      The packageName of the currently uncommitted class.
    • className

      protected String className
      The className of the currently uncommitted class.
  • Constructor Details

    • AbstractBuilder

      public AbstractBuilder()
  • Method Details

    • setSemVer

      @Contract("null -> fail; _ -> this") public T setSemVer(SemVer semVer)
      Sets the semVer of the currently uncommitted class.

      NOTE: the semVer will be updated when committing the changes.

      Specified by:
      setSemVer in interface Builder<T extends Builder<T>>
      Parameters:
      semVer - for the class.
      Returns:
      this Builder.
    • setVersionPlacement

      public T setVersionPlacement(Builder.VersionPlacement versionPlacement)
      Sets the versionPlacement of the currently uncommitted class.

      Default: Builder.VersionPlacement.NONE.

      Specified by:
      setVersionPlacement in interface Builder<T extends Builder<T>>
      Parameters:
      versionPlacement - for the class.
      Returns:
      this Builder.
    • updateDirectory

      public T updateDirectory(String directory)
      Updates the directory of the currently uncommitted class.
      Specified by:
      updateDirectory in interface Builder<T extends Builder<T>>
      Parameters:
      directory - of the class.
      Returns:
      this Builder.
    • updatePackageName

      public T updatePackageName(String packageName)
      Updates the packageName of the currently uncommitted class.
      Specified by:
      updatePackageName in interface Builder<T extends Builder<T>>
      Parameters:
      packageName - of the class.
      Returns:
      this Builder.
    • updateClassName

      public T updateClassName(String className)
      Updates the className of the currently uncommitted class.
      Specified by:
      updateClassName in interface Builder<T extends Builder<T>>
      Parameters:
      className - of the class.
      Returns:
      this Builder.
    • commit

      public T commit()
      Commits the currently uncommitted changes as a new class. The semVer of the new class will be set automatically.
      Specified by:
      commit in interface Builder<T extends Builder<T>>
      Returns:
      this Builder.
    • commit

      public T commit(SemVer.Change change)
      Commits the currently uncommitted changes as a new class. The semVer of the new class will be set according to the given change.
      Specified by:
      commit in interface Builder<T extends Builder<T>>
      Parameters:
      change - for the new semVer.
      Returns:
      this Builder
    • determineSemVerChange

      protected SemVer.Change determineSemVerChange()
      Determines the SemVer.Change for the currently uncommitted changes.
      Returns:
      the Change.
    • self

      protected abstract T self()
      Returns this as AbstractBuilder.
      Returns:
      this.
    • validateAdditionalPredicates

      protected void validateAdditionalPredicates()
      Validates additional Predicates for determining the validity of the currently uncommitted class.
    • generateFileContent

      protected abstract String generateFileContent(SemVer semVer)
      Generates the complete file contents for a .java file for the currently uncommitted class.
      Parameters:
      semVer - for the new class.
      Returns:
      the file contents as a String.
    • generateClassFile

      protected void generateClassFile(SemVer semVer)
      Generates a .java class file for the currently uncommitted class.
      Parameters:
      semVer - for the new class.
    • resolveFullyQualifiedClassName

      protected String resolveFullyQualifiedClassName(SemVer semVer)
      Resolves the Fully Qualified Class Name (FQCN) for the currently uncommitted class.

      Example: module.sub_module.ExampleClass or AnotherExampleClass.

      Parameters:
      semVer - for the new class.
      Returns:
      the FQCN.
    • resolveEffectivePackageName

      protected String resolveEffectivePackageName(SemVer semVer)
      Resolves the effective package name for the currently uncommitted class.
      Parameters:
      semVer - for the class.
      Returns:
      the effective package name.