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