Fixed null pointer bug with taskTypes.
This commit is contained in:
parent
acd59b4e3d
commit
ee98482e7e
@ -92,7 +92,7 @@ abstract class AbstractBuildCommand extends AbstractSubCommand {
|
||||
def context = new TaskExecutorContext(
|
||||
it,
|
||||
tasks,
|
||||
null,
|
||||
this.ssg.taskTypes,
|
||||
{ Collection<Diagnostic> diagnostics ->
|
||||
executionDiagnostics.addAll(diagnostics)
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package com.jessebrault.ssg
|
||||
|
||||
import com.jessebrault.ssg.task.SpecialPageToHtmlFileTaskFactory
|
||||
import com.jessebrault.ssg.task.TaskContainer
|
||||
import com.jessebrault.ssg.task.TaskTypeContainer
|
||||
import com.jessebrault.ssg.task.TextToHtmlFileTaskFactory
|
||||
import groovy.transform.NullCheck
|
||||
import org.slf4j.Logger
|
||||
@ -16,6 +17,14 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
||||
private static final Marker enter = MarkerFactory.getMarker('ENTER')
|
||||
private static final Marker exit = MarkerFactory.getMarker('EXIT')
|
||||
|
||||
private static final TextToHtmlFileTaskFactory textHtmlFactory = new TextToHtmlFileTaskFactory()
|
||||
private static final SpecialPageToHtmlFileTaskFactory specialPageHtmlFactory = new SpecialPageToHtmlFileTaskFactory()
|
||||
|
||||
@Override
|
||||
TaskTypeContainer getTaskTypes() {
|
||||
new TaskTypeContainer([textHtmlFactory.taskType, specialPageHtmlFactory.taskType])
|
||||
}
|
||||
|
||||
@Override
|
||||
Result<TaskContainer> generate(Build build) {
|
||||
logger.trace(enter, 'build: {}', build)
|
||||
@ -24,13 +33,11 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
||||
def tasks = new TaskContainer()
|
||||
def diagnostics = []
|
||||
|
||||
def textToHtmlFactory = new TextToHtmlFileTaskFactory()
|
||||
def textsResult = textToHtmlFactory.getTasks(build)
|
||||
def textsResult = textHtmlFactory.getTasks(build)
|
||||
tasks.addAll(textsResult.get())
|
||||
diagnostics.addAll(textsResult.diagnostics)
|
||||
|
||||
def specialPageToHtmlFactory = new SpecialPageToHtmlFileTaskFactory()
|
||||
def specialPagesResult = specialPageToHtmlFactory.getTasks(build)
|
||||
def specialPagesResult = specialPageHtmlFactory.getTasks(build)
|
||||
tasks.addAll(specialPagesResult.get())
|
||||
diagnostics.addAll(specialPagesResult.diagnostics)
|
||||
|
||||
|
@ -1,7 +1,9 @@
|
||||
package com.jessebrault.ssg
|
||||
|
||||
import com.jessebrault.ssg.task.TaskContainer
|
||||
import com.jessebrault.ssg.task.TaskTypeContainer
|
||||
|
||||
interface StaticSiteGenerator {
|
||||
TaskTypeContainer getTaskTypes()
|
||||
Result<TaskContainer> generate(Build build)
|
||||
}
|
||||
|
@ -3,8 +3,8 @@ package com.jessebrault.ssg.renderer
|
||||
import com.jessebrault.ssg.Config
|
||||
import com.jessebrault.ssg.SiteSpec
|
||||
import com.jessebrault.ssg.part.Part
|
||||
import com.jessebrault.ssg.task.Task
|
||||
import com.jessebrault.ssg.task.TaskContainer
|
||||
import com.jessebrault.ssg.task.TaskTypeContainer
|
||||
import com.jessebrault.ssg.text.Text
|
||||
import groovy.transform.EqualsAndHashCode
|
||||
import groovy.transform.NullCheck
|
||||
@ -22,5 +22,5 @@ final class RenderContext {
|
||||
final String sourcePath
|
||||
final String targetPath
|
||||
final TaskContainer tasks
|
||||
final Set<Class<? extends Task>> taskTypes
|
||||
final TaskTypeContainer taskTypes
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ final class SpecialPageToHtmlFileTask extends AbstractTask<SpecialPageToHtmlFile
|
||||
|
||||
}
|
||||
|
||||
private static final TaskType<SpecialPageToHtmlFileTask> type = new TaskType<>(
|
||||
static final TaskType<SpecialPageToHtmlFileTask> TYPE = new TaskType<>(
|
||||
'specialPageToHtmlFile', new SpecialPageToHtmlFileTaskExecutor()
|
||||
)
|
||||
|
||||
@ -32,7 +32,7 @@ final class SpecialPageToHtmlFileTask extends AbstractTask<SpecialPageToHtmlFile
|
||||
final HtmlFileOutput output
|
||||
|
||||
SpecialPageToHtmlFileTask(String name, SpecialPage input, HtmlFileOutput output) {
|
||||
super(type, name)
|
||||
super(TYPE, name)
|
||||
this.input = input
|
||||
this.output = output
|
||||
}
|
||||
|
@ -15,6 +15,11 @@ final class SpecialPageToHtmlFileTaskFactory implements TaskFactory<SpecialPageT
|
||||
private static final Marker enter = MarkerFactory.getMarker('ENTER')
|
||||
private static final Marker exit = MarkerFactory.getMarker('EXIT')
|
||||
|
||||
@Override
|
||||
TaskType<SpecialPageToHtmlFileTask> getTaskType() {
|
||||
SpecialPageToHtmlFileTask.TYPE
|
||||
}
|
||||
|
||||
@Override
|
||||
Result<TaskCollection<SpecialPageToHtmlFileTask>> getTasks(Build build) {
|
||||
logger.trace(enter, 'build: {}', build)
|
||||
|
@ -4,5 +4,6 @@ import com.jessebrault.ssg.Build
|
||||
import com.jessebrault.ssg.Result
|
||||
|
||||
interface TaskFactory<T extends Task> {
|
||||
TaskType<T> getTaskType()
|
||||
Result<TaskCollection<T>> getTasks(Build build)
|
||||
}
|
@ -1,36 +1,31 @@
|
||||
package com.jessebrault.ssg.task
|
||||
|
||||
import java.util.regex.Pattern
|
||||
|
||||
final class TaskTypeContainer {
|
||||
|
||||
private static final Pattern taskTypeNamePattern = ~/(.*)Task/
|
||||
|
||||
@Delegate
|
||||
private final Set<Class<? extends Task>> taskTypes = []
|
||||
private final Set<TaskType<? extends Task>> taskTypes = []
|
||||
|
||||
TaskTypeContainer(Collection<Class<? extends Task>> taskTypes = null) {
|
||||
if (taskTypes) {
|
||||
TaskTypeContainer(Collection<TaskType<? extends Task>> taskTypes) {
|
||||
if (taskTypes != null) {
|
||||
this.taskTypes.addAll(taskTypes)
|
||||
}
|
||||
}
|
||||
|
||||
TaskTypeContainer(TaskTypeContainer taskTypeContainer) {
|
||||
if (taskTypeContainer != null) {
|
||||
this.taskTypes.addAll(taskTypeContainer)
|
||||
}
|
||||
}
|
||||
|
||||
TaskTypeContainer() {}
|
||||
|
||||
@Override
|
||||
Class<? extends Task> getProperty(String propertyName) {
|
||||
def result = this.taskTypes.find {
|
||||
def m = taskTypeNamePattern.matcher(it.simpleName)
|
||||
if (m.matches()) {
|
||||
def withoutTaskEnd = m.group(1)
|
||||
def uncapitalized = withoutTaskEnd.uncapitalize()
|
||||
return propertyName == uncapitalized
|
||||
} else {
|
||||
throw new IllegalStateException("invalid task type name: ${ it.simpleName }")
|
||||
}
|
||||
TaskType<? extends Task> getProperty(String propertyName) {
|
||||
def taskType = this.taskTypes.find { it.name == propertyName }
|
||||
if (!taskType) {
|
||||
throw new IllegalArgumentException("no such taskType: ${ propertyName }")
|
||||
}
|
||||
if (!result) {
|
||||
throw new IllegalStateException("no such taskType: ${ propertyName }")
|
||||
}
|
||||
result
|
||||
taskType
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ final class TextToHtmlFileTask extends AbstractTask<TextToHtmlFileTask> {
|
||||
|
||||
}
|
||||
|
||||
private static final TaskType<TextToHtmlFileTask> type = new TaskType<>(
|
||||
static final TaskType<TextToHtmlFileTask> TYPE = new TaskType<>(
|
||||
'textToHtmlFile', new TextToHtmlFileTaskExecutor()
|
||||
)
|
||||
|
||||
@ -32,7 +32,7 @@ final class TextToHtmlFileTask extends AbstractTask<TextToHtmlFileTask> {
|
||||
final HtmlFileOutput output
|
||||
|
||||
TextToHtmlFileTask(String name, Text input, HtmlFileOutput output) {
|
||||
super(type, name)
|
||||
super(TYPE, name)
|
||||
this.input = input
|
||||
this.output = output
|
||||
}
|
||||
|
@ -17,6 +17,11 @@ final class TextToHtmlFileTaskFactory implements TaskFactory<TextToHtmlFileTask>
|
||||
private static final Marker enter = MarkerFactory.getMarker('ENTER')
|
||||
private static final Marker exit = MarkerFactory.getMarker('EXIT')
|
||||
|
||||
@Override
|
||||
TaskType<TextToHtmlFileTask> getTaskType() {
|
||||
TextToHtmlFileTask.TYPE
|
||||
}
|
||||
|
||||
@Override
|
||||
Result<TaskCollection<TextToHtmlFileTask>> getTasks(Build build) {
|
||||
logger.trace(enter, 'build: {}', build)
|
||||
|
@ -5,6 +5,7 @@ import com.jessebrault.ssg.SiteSpec
|
||||
import com.jessebrault.ssg.renderer.RenderContext
|
||||
import com.jessebrault.ssg.task.Task
|
||||
import com.jessebrault.ssg.task.TaskContainer
|
||||
import com.jessebrault.ssg.task.TaskTypeContainer
|
||||
|
||||
class RenderContextUtil {
|
||||
|
||||
@ -18,7 +19,7 @@ class RenderContextUtil {
|
||||
args?.sourcePath as String ?: '',
|
||||
args?.targetPath as String ?: '',
|
||||
args?.tasks as TaskContainer ?: new TaskContainer(),
|
||||
args?.taskTypes as Set<Class<? extends Task>> ?: [] as Set<Class<? extends Task>>
|
||||
args?.taskTypes as TaskTypeContainer ?: new TaskTypeContainer()
|
||||
)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user