diff --git a/api/src/main/groovy/com/jessebrault/ssg/SimpleBuildTasksConverter.groovy b/api/src/main/groovy/com/jessebrault/ssg/SimpleBuildTasksConverter.groovy index 08dab3d..32070f6 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/SimpleBuildTasksConverter.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/SimpleBuildTasksConverter.groovy @@ -12,7 +12,7 @@ final class SimpleBuildTasksConverter implements BuildTasksConverter { Result> convert(Build build) { def taskSpec = new TaskSpec( build.name, - build.outputDirFunction.apply(build).file, + build.outputDirFunction.apply(build).asFile(), build.siteSpec, build.globals ) diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/OutputDir.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/OutputDir.groovy index 20ae5d1..f094e77 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/OutputDir.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/OutputDir.groovy @@ -1,24 +1,41 @@ package com.jessebrault.ssg.buildscript import groovy.transform.EqualsAndHashCode -import org.jetbrains.annotations.Nullable +import groovy.transform.NullCheck +@NullCheck @EqualsAndHashCode final class OutputDir { - @Nullable final String path - OutputDir(@Nullable String path) { + OutputDir(String path) { this.path = path } OutputDir(File file) { - this.path = file.path + this(file.path) } - File getFile() { - this.path ? new File(this.path) : new File('') + File asFile() { + new File(this.path) + } + + String asString() { + this.path + } + + Object asType(Class clazz) { + switch (clazz) { + case File -> this.asFile() + case String -> this.asString() + default -> throw new IllegalArgumentException('cannot cast to a class other than File or String') + } + } + + @Override + String toString() { + "OutputDir(path: ${ this.path })" } } diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/OutputDirFunctions.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/OutputDirFunctions.groovy index cf820dd..b82f302 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/OutputDirFunctions.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/OutputDirFunctions.groovy @@ -1,7 +1,5 @@ package com.jessebrault.ssg.buildscript -import org.jetbrains.annotations.Nullable - import java.util.function.Function final class OutputDirFunctions { @@ -19,7 +17,7 @@ final class OutputDirFunctions { return { new OutputDir(dir) } } - static Function of(@Nullable String path) { + static Function of(String path) { return { new OutputDir(path) } } diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/dsl/BuildDelegate.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/dsl/BuildDelegate.groovy index 01d010e..7e38823 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/dsl/BuildDelegate.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/dsl/BuildDelegate.groovy @@ -3,7 +3,6 @@ package com.jessebrault.ssg.buildscript.dsl import com.jessebrault.ssg.buildscript.Build import com.jessebrault.ssg.buildscript.OutputDir import com.jessebrault.ssg.buildscript.OutputDirFunctions -import org.jetbrains.annotations.Nullable import java.util.function.Function @@ -31,7 +30,7 @@ final class BuildDelegate extends AbstractBuildDelegate { this.outputDirFunction = OutputDirFunctions.of(file) } - void setOutputDir(@Nullable String path) { + void setOutputDir(String path) { this.outputDirFunction = OutputDirFunctions.of(path) }