diff --git a/api/src/main/groovy/com/jessebrault/ssg/dsl/EmbeddablePart.groovy b/api/src/main/groovy/com/jessebrault/ssg/dsl/EmbeddablePart.groovy index e23c77a..c54dcb7 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/dsl/EmbeddablePart.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/dsl/EmbeddablePart.groovy @@ -3,9 +3,12 @@ package com.jessebrault.ssg.dsl import com.jessebrault.ssg.part.Part import com.jessebrault.ssg.render.RenderContext import com.jessebrault.ssg.text.Text +import com.jessebrault.ssg.util.Diagnostic import groovy.transform.EqualsAndHashCode import org.jetbrains.annotations.Nullable +import java.util.function.Consumer + import static java.util.Objects.requireNonNull @EqualsAndHashCode(includeFields = true) @@ -13,7 +16,7 @@ final class EmbeddablePart { private final Part part private final RenderContext context - private final Closure onDiagnostics + private final Consumer> diagnosticsConsumer @Nullable private final Text text @@ -21,24 +24,24 @@ final class EmbeddablePart { EmbeddablePart( Part part, RenderContext context, - Closure onDiagnostics, + Consumer> diagnosticsConsumer, @Nullable Text text ) { this.part = requireNonNull(part) this.context = requireNonNull(context) - this.onDiagnostics = requireNonNull(onDiagnostics) + this.diagnosticsConsumer = requireNonNull(diagnosticsConsumer) this.text = text } String render(Map binding = [:]) { - def result = part.type.renderer.render( + def result = this.part.type.renderer.render( this.part, binding, this.context, this.text ) if (result.hasDiagnostics()) { - this.onDiagnostics.call(result.diagnostics) + this.diagnosticsConsumer.accept(result.diagnostics) '' } else { result.get() diff --git a/api/src/main/groovy/com/jessebrault/ssg/dsl/EmbeddablePartsMap.groovy b/api/src/main/groovy/com/jessebrault/ssg/dsl/EmbeddablePartsMap.groovy index 829199b..bc4878a 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/dsl/EmbeddablePartsMap.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/dsl/EmbeddablePartsMap.groovy @@ -2,9 +2,12 @@ package com.jessebrault.ssg.dsl import com.jessebrault.ssg.render.RenderContext import com.jessebrault.ssg.text.Text +import com.jessebrault.ssg.util.Diagnostic import groovy.transform.EqualsAndHashCode import org.jetbrains.annotations.Nullable +import java.util.function.Consumer + import static java.util.Objects.requireNonNull @EqualsAndHashCode(includeFields = true) @@ -15,13 +18,13 @@ final class EmbeddablePartsMap { EmbeddablePartsMap( RenderContext context, - Closure onDiagnostics, + Consumer> diagnosticsConsumer, @Nullable Text text = null ) { requireNonNull(context) - requireNonNull(onDiagnostics) + requireNonNull(diagnosticsConsumer) context.parts.each { - this.put(it.path, new EmbeddablePart(it, context, onDiagnostics, text)) + this[it.path] = new EmbeddablePart(it, context, diagnosticsConsumer, text) } } diff --git a/api/src/main/groovy/com/jessebrault/ssg/dsl/EmbeddableText.groovy b/api/src/main/groovy/com/jessebrault/ssg/dsl/EmbeddableText.groovy index 53c3818..77f3f6b 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/dsl/EmbeddableText.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/dsl/EmbeddableText.groovy @@ -2,24 +2,27 @@ package com.jessebrault.ssg.dsl import com.jessebrault.ssg.text.FrontMatter import com.jessebrault.ssg.text.Text +import com.jessebrault.ssg.util.Diagnostic import groovy.transform.EqualsAndHashCode import groovy.transform.Memoized import groovy.transform.NullCheck import groovy.transform.TupleConstructor +import java.util.function.Consumer + @TupleConstructor(includeFields = true, defaults = false) @NullCheck(includeGenerated = true) @EqualsAndHashCode(includeFields = true) final class EmbeddableText { private final Text text - private final Closure onDiagnostics + private final Consumer> diagnosticsConsumer @Memoized String render() { def result = this.text.type.renderer.render(this.text) if (result.diagnostics.size() > 0) { - this.onDiagnostics.call(result.diagnostics) + this.diagnosticsConsumer.accept(result.diagnostics) '' } else { result.get() @@ -30,7 +33,7 @@ final class EmbeddableText { FrontMatter getFrontMatter() { def result = this.text.type.frontMatterGetter.get(this.text) if (result.hasDiagnostics()) { - this.onDiagnostics.call(result.diagnostics) + this.diagnosticsConsumer.accept(result.diagnostics) new FrontMatter(this.text, [:]) } else { result.get() @@ -41,7 +44,7 @@ final class EmbeddableText { String getExcerpt(int limit) { def result = this.text.type.excerptGetter.getExcerpt(this.text, limit) if (result.hasDiagnostics()) { - this.onDiagnostics.call(result.diagnostics) + this.diagnosticsConsumer.accept(result.diagnostics) '' } else { result.get() diff --git a/api/src/main/groovy/com/jessebrault/ssg/dsl/EmbeddableTextsCollection.groovy b/api/src/main/groovy/com/jessebrault/ssg/dsl/EmbeddableTextsCollection.groovy index 8869af9..7165db2 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/dsl/EmbeddableTextsCollection.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/dsl/EmbeddableTextsCollection.groovy @@ -1,9 +1,12 @@ package com.jessebrault.ssg.dsl import com.jessebrault.ssg.text.Text +import com.jessebrault.ssg.util.Diagnostic import groovy.transform.EqualsAndHashCode import groovy.transform.NullCheck +import java.util.function.Consumer + @NullCheck @EqualsAndHashCode(includeFields = true) final class EmbeddableTextsCollection { @@ -11,9 +14,9 @@ final class EmbeddableTextsCollection { @Delegate private final Collection embeddableTexts = [] - EmbeddableTextsCollection(Collection texts, Closure onDiagnostics) { + EmbeddableTextsCollection(Collection texts, Consumer> diagnosticsConsumer) { texts.each { - this << new EmbeddableText(it, onDiagnostics) + this << new EmbeddableText(it, diagnosticsConsumer) } } diff --git a/api/src/main/groovy/com/jessebrault/ssg/dsl/StandardDslMap.groovy b/api/src/main/groovy/com/jessebrault/ssg/dsl/StandardDslMap.groovy index 5361157..40d986c 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/dsl/StandardDslMap.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/dsl/StandardDslMap.groovy @@ -4,11 +4,12 @@ import com.jessebrault.ssg.dsl.tagbuilder.DynamicTagBuilder import com.jessebrault.ssg.dsl.urlbuilder.PathBasedUrlBuilder import com.jessebrault.ssg.render.RenderContext import com.jessebrault.ssg.text.Text +import com.jessebrault.ssg.util.Diagnostic import groovy.transform.NullCheck -import groovy.transform.stc.ClosureParams -import groovy.transform.stc.SimpleType import org.slf4j.LoggerFactory +import java.util.function.Consumer + final class StandardDslMap { @NullCheck(includeGenerated = true) @@ -16,8 +17,8 @@ final class StandardDslMap { private final Map custom = [:] + Consumer> diagnosticsConsumer = { } String loggerName = '' - Closure onDiagnostics = { } Text text = null void putCustom(String key, Object value) { @@ -32,17 +33,10 @@ final class StandardDslMap { static Map get( RenderContext context, - @DelegatesTo(value = Builder, strategy = Closure.DELEGATE_FIRST) - @ClosureParams( - value = SimpleType, - options = ['com.jessebrault.ssg.dsl.StandardDslMap.Builder'] - ) - Closure builderClosure + Consumer builderConsumer ) { def b = new Builder() - builderClosure.resolveStrategy = Closure.DELEGATE_FIRST - builderClosure.delegate = b - builderClosure(b) + builderConsumer.accept(b) [:].tap { // standard variables @@ -51,7 +45,7 @@ final class StandardDslMap { it.models = new ModelCollection(context.models) it.parts = new EmbeddablePartsMap( context, - b.onDiagnostics, + b.diagnosticsConsumer, b.text ) it.siteSpec = context.siteSpec @@ -61,11 +55,11 @@ final class StandardDslMap { it.tasks = new TaskCollection(context.tasks) it.text = b.text ? new EmbeddableText( b.text, - b.onDiagnostics + b.diagnosticsConsumer ) : null it.texts = new EmbeddableTextsCollection( context.texts, - b.onDiagnostics + b.diagnosticsConsumer ) it.urlBuilder = new PathBasedUrlBuilder( context.targetPath, diff --git a/api/src/main/groovy/com/jessebrault/ssg/page/GspPageRenderer.groovy b/api/src/main/groovy/com/jessebrault/ssg/page/GspPageRenderer.groovy index 8209542..80fb544 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/page/GspPageRenderer.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/page/GspPageRenderer.groovy @@ -21,9 +21,8 @@ final class GspPageRenderer implements PageRenderer { def diagnostics = [] try { def result = this.gspRenderer.render(specialPage.text, context) { + it.diagnosticsConsumer = diagnostics.&addAll it.loggerName = "GspSpecialPage(${ specialPage.path })" - it.onDiagnostics = diagnostics.&addAll - return } Result.of(diagnostics, result.toString()) } catch (Exception e) { diff --git a/api/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy b/api/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy index efcced0..acddb6a 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy @@ -1,10 +1,10 @@ package com.jessebrault.ssg.part -import com.jessebrault.ssg.render.StandardGspRenderer -import com.jessebrault.ssg.util.Diagnostic import com.jessebrault.ssg.render.RenderContext -import com.jessebrault.ssg.util.Result +import com.jessebrault.ssg.render.StandardGspRenderer import com.jessebrault.ssg.text.Text +import com.jessebrault.ssg.util.Diagnostic +import com.jessebrault.ssg.util.Result import groovy.transform.EqualsAndHashCode import org.jetbrains.annotations.Nullable @@ -29,12 +29,11 @@ final class GspPartRenderer implements PartRenderer { try { def result = this.gspRenderer.render(part.text, context) { it.putCustom('binding', binding) + it.diagnosticsConsumer = diagnostics.&addAll it.loggerName = "GspPart(${ part.path })" - it.onDiagnostics = diagnostics.&addAll if (text) { it.text = text } - return } Result.of(diagnostics, result.toString()) } catch (Exception e) { diff --git a/api/src/main/groovy/com/jessebrault/ssg/render/StandardGspRenderer.groovy b/api/src/main/groovy/com/jessebrault/ssg/render/StandardGspRenderer.groovy index 4d91a76..ffbd9eb 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/render/StandardGspRenderer.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/render/StandardGspRenderer.groovy @@ -5,6 +5,8 @@ import groovy.text.GStringTemplateEngine import groovy.text.TemplateEngine import org.codehaus.groovy.control.CompilerConfiguration +import java.util.function.Consumer + final class StandardGspRenderer { private final TemplateEngine engine @@ -18,10 +20,9 @@ final class StandardGspRenderer { String render( String template, RenderContext context, - @DelegatesTo(value = StandardDslMap.Builder, strategy = Closure.DELEGATE_FIRST) - Closure dslMapBuilderClosure + Consumer dslMapBuilderConsumer ) { - this.engine.createTemplate(template).make(StandardDslMap.get(context, dslMapBuilderClosure)).toString() + this.engine.createTemplate(template).make(StandardDslMap.get(context, dslMapBuilderConsumer)).toString() } } diff --git a/api/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy b/api/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy index 41eb2ea..02f2ddd 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy @@ -23,10 +23,9 @@ final class GspTemplateRenderer implements TemplateRenderer { def diagnostics = [] try { def result = this.gspRenderer.render(template.text, context) { + it.diagnosticsConsumer = diagnostics.&addAll it.loggerName = "GspTemplate(${ template.path })" - it.onDiagnostics = diagnostics.&addAll it.text = text - return } Result.of(diagnostics, result) } catch (Exception e) {