From 77d5484002443708eb42360c769914ce2425834c Mon Sep 17 00:00:00 2001 From: Robert Panzer Date: Tue, 15 Feb 2022 17:32:31 +0100 Subject: [PATCH 1/2] Fix Macro APIs to return Structural or Phrase Nodes instead of java.lang.Object. --- .../java/org/asciidoctor/extension/BlockMacroProcessor.java | 2 +- .../org/asciidoctor/extension/InlineMacroProcessor.java | 3 ++- .../main/java/org/asciidoctor/extension/MacroProcessor.java | 4 ++-- .../processorproxies/InlineMacroProcessorProxy.java | 1 + .../extension/AnnotatedBlockMacroProcessor.groovy | 2 +- .../extension/AnnotatedLongInlineMacroProcessor.groovy | 3 ++- .../extension/AnnotatedRegexpInlineMacroProcessor.groovy | 3 ++- .../extension/GithubContributorsBlockMacro.groovy | 2 +- .../org/asciidoctor/extension/ListCreatorBlockMacro.groovy | 2 +- .../asciidoctor/extension/SectionCreatorBlockMacro.groovy | 2 +- .../extension/WhenAJavaExtensionUsesCounters.groovy | 4 ++-- .../extension/WhenAnExtensionAppendsChildBlocks.groovy | 2 +- .../asciidoctor/extension/BlockMacroRegistrationTest.java | 4 ++-- .../asciidoctor/extension/InlineMacroRegistrationTest.java | 5 +++-- .../test/java/org/asciidoctor/extension/ManpageMacro.java | 6 +++--- .../src/test/java/org/asciidoctor/extension/SayMacro.java | 4 ++-- .../extension/WhenTheInlineMacroProcessorRunsTwice.java | 3 ++- .../extension/ContextMenuInlineMacroProcessor.java | 3 ++- .../GistBlockMacroPositionalAttributesProcessor.java | 2 +- .../integrationguide/extension/GistBlockMacroProcessor.java | 4 ++-- .../extension/ImageInlineMacroProcessor.java | 3 ++- .../IssueInlineMacroPositionalAttributesProcessor.java | 3 ++- .../extension/IssueInlineMacroProcessor.java | 5 +++-- .../extension/KeyboardInlineMacroProcessor.java | 3 ++- .../extension/LoggingBlockMacroProcessor.java | 2 +- 25 files changed, 44 insertions(+), 33 deletions(-) diff --git a/asciidoctorj-api/src/main/java/org/asciidoctor/extension/BlockMacroProcessor.java b/asciidoctorj-api/src/main/java/org/asciidoctor/extension/BlockMacroProcessor.java index fe2127fb9..c38395391 100644 --- a/asciidoctorj-api/src/main/java/org/asciidoctor/extension/BlockMacroProcessor.java +++ b/asciidoctorj-api/src/main/java/org/asciidoctor/extension/BlockMacroProcessor.java @@ -5,7 +5,7 @@ import java.util.HashMap; import java.util.Map; -public abstract class BlockMacroProcessor extends MacroProcessor { +public abstract class BlockMacroProcessor extends MacroProcessor { public BlockMacroProcessor() { this(null, new HashMap<>()); diff --git a/asciidoctorj-api/src/main/java/org/asciidoctor/extension/InlineMacroProcessor.java b/asciidoctorj-api/src/main/java/org/asciidoctor/extension/InlineMacroProcessor.java index c3270abf8..4a99fb96b 100644 --- a/asciidoctorj-api/src/main/java/org/asciidoctor/extension/InlineMacroProcessor.java +++ b/asciidoctorj-api/src/main/java/org/asciidoctor/extension/InlineMacroProcessor.java @@ -1,11 +1,12 @@ package org.asciidoctor.extension; import org.asciidoctor.ast.ContentNode; +import org.asciidoctor.ast.PhraseNode; import java.util.HashMap; import java.util.Map; -public abstract class InlineMacroProcessor extends MacroProcessor { +public abstract class InlineMacroProcessor extends MacroProcessor { /** * This value is used as the config option key when defining a regular expression that should be diff --git a/asciidoctorj-api/src/main/java/org/asciidoctor/extension/MacroProcessor.java b/asciidoctorj-api/src/main/java/org/asciidoctor/extension/MacroProcessor.java index 40298cfc3..62b907cee 100644 --- a/asciidoctorj-api/src/main/java/org/asciidoctor/extension/MacroProcessor.java +++ b/asciidoctorj-api/src/main/java/org/asciidoctor/extension/MacroProcessor.java @@ -5,7 +5,7 @@ import java.util.HashMap; import java.util.Map; -public abstract class MacroProcessor extends BaseProcessor { +public abstract class MacroProcessor extends BaseProcessor { protected String name; @@ -30,6 +30,6 @@ public Map options() { return new HashMap<>(); } - public abstract Object process(T parent, String target, Map attributes); + public abstract R process(T parent, String target, Map attributes); } diff --git a/asciidoctorj-core/src/main/java/org/asciidoctor/jruby/extension/processorproxies/InlineMacroProcessorProxy.java b/asciidoctorj-core/src/main/java/org/asciidoctor/jruby/extension/processorproxies/InlineMacroProcessorProxy.java index fa6e22873..816527fa3 100644 --- a/asciidoctorj-core/src/main/java/org/asciidoctor/jruby/extension/processorproxies/InlineMacroProcessorProxy.java +++ b/asciidoctorj-core/src/main/java/org/asciidoctor/jruby/extension/processorproxies/InlineMacroProcessorProxy.java @@ -1,5 +1,6 @@ package org.asciidoctor.jruby.extension.processorproxies; +import org.asciidoctor.ast.PhraseNode; import org.asciidoctor.extension.InlineMacroProcessor; import org.asciidoctor.jruby.ast.impl.NodeConverter; import org.asciidoctor.jruby.internal.*; diff --git a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedBlockMacroProcessor.groovy b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedBlockMacroProcessor.groovy index 42b970681..47c250ad8 100644 --- a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedBlockMacroProcessor.groovy +++ b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedBlockMacroProcessor.groovy @@ -10,7 +10,7 @@ class AnnotatedBlockMacroProcessor extends BlockMacroProcessor { public static final String RESULT = 'This content is added by this macro!' @Override - Object process(StructuralNode parent, String target, Map attributes) { + StructuralNode process(StructuralNode parent, String target, Map attributes) { createBlock(parent, 'paragraph', RESULT) } } \ No newline at end of file diff --git a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedLongInlineMacroProcessor.groovy b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedLongInlineMacroProcessor.groovy index 508e16604..e2ef7fdeb 100644 --- a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedLongInlineMacroProcessor.groovy +++ b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedLongInlineMacroProcessor.groovy @@ -2,6 +2,7 @@ package org.asciidoctor.extension import groovy.transform.CompileStatic import org.asciidoctor.ast.ContentNode +import org.asciidoctor.ast.PhraseNode @CompileStatic @Name('man') @@ -13,7 +14,7 @@ class AnnotatedLongInlineMacroProcessor extends InlineMacroProcessor { public static final String SECTION = 'section' @Override - Object process(ContentNode parent, String target, Map attributes) { + PhraseNode process(ContentNode parent, String target, Map attributes) { assert attributes[SECTION] == '7' || ( attributes[SECTION] == '8' || attributes[SUBSECTION] == '1') Map options = new HashMap() diff --git a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedRegexpInlineMacroProcessor.groovy b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedRegexpInlineMacroProcessor.groovy index 0200f56e3..f474c089b 100644 --- a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedRegexpInlineMacroProcessor.groovy +++ b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedRegexpInlineMacroProcessor.groovy @@ -2,6 +2,7 @@ package org.asciidoctor.extension import groovy.transform.CompileStatic import org.asciidoctor.ast.ContentNode +import org.asciidoctor.ast.PhraseNode @CompileStatic @Name('man') @@ -13,7 +14,7 @@ class AnnotatedRegexpInlineMacroProcessor extends InlineMacroProcessor { } @Override - Object process(ContentNode parent, String target, Map attributes) { + PhraseNode process(ContentNode parent, String target, Map attributes) { Map options = new HashMap() options['type'] = ':link' options['target'] = "${target}.html" diff --git a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/GithubContributorsBlockMacro.groovy b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/GithubContributorsBlockMacro.groovy index 3f555b202..75ff2a427 100644 --- a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/GithubContributorsBlockMacro.groovy +++ b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/GithubContributorsBlockMacro.groovy @@ -18,7 +18,7 @@ class GithubContributorsBlockMacro extends BlockMacroProcessor { } @Override - Object process(StructuralNode parent, String target, Map attributes) { + StructuralNode process(StructuralNode parent, String target, Map attributes) { URL url = new URL("http://api.github.com/repos/${target}/contributors") URLConnection connection = url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress('localhost', TestHttpServer.instance.localPort))) String content = connection.inputStream.text diff --git a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/ListCreatorBlockMacro.groovy b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/ListCreatorBlockMacro.groovy index 19c5c8c46..d44d05aa7 100644 --- a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/ListCreatorBlockMacro.groovy +++ b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/ListCreatorBlockMacro.groovy @@ -13,7 +13,7 @@ class ListCreatorBlockMacro extends BlockMacroProcessor { } @Override - Object process(StructuralNode parent, String target, Map attributes) { + StructuralNode process(StructuralNode parent, String target, Map attributes) { def attrs = new HashMap() attrs['start'] = '42' diff --git a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/SectionCreatorBlockMacro.groovy b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/SectionCreatorBlockMacro.groovy index 4c99a15cf..b1aeae2b2 100644 --- a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/SectionCreatorBlockMacro.groovy +++ b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/SectionCreatorBlockMacro.groovy @@ -9,7 +9,7 @@ class SectionCreatorBlockMacro extends BlockMacroProcessor { public static final String CONTENT = 'This is just some text' @Override - Object process(StructuralNode parent, String target, Map attributes) { + StructuralNode process(StructuralNode parent, String target, Map attributes) { Section section = createSection(parent) section.title = target diff --git a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/WhenAJavaExtensionUsesCounters.groovy b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/WhenAJavaExtensionUsesCounters.groovy index 7d0bf6681..6c32a7e89 100644 --- a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/WhenAJavaExtensionUsesCounters.groovy +++ b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/WhenAJavaExtensionUsesCounters.groovy @@ -126,7 +126,7 @@ testmacro::countera[] static class TestBlockMacroProcessor extends BlockMacroProcessor { @Override - Object process(StructuralNode parent, String target, Map attributes) { + StructuralNode process(StructuralNode parent, String target, Map attributes) { String text = "This is macro call ${parent.document.getAndIncrementCounter(target)} for ${target}" // Have to do this to interact successfully with counters also used in the document @@ -143,7 +143,7 @@ testmacro::countera[] static class TestBlockMacroWithInitialCounterProcessor extends BlockMacroProcessor { @Override - Object process(StructuralNode parent, String target, Map attributes) { + StructuralNode process(StructuralNode parent, String target, Map attributes) { String text = "This is macro call ${parent.document.getAndIncrementCounter(target, 42)} for ${target}" diff --git a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/WhenAnExtensionAppendsChildBlocks.groovy b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/WhenAnExtensionAppendsChildBlocks.groovy index 9d7be6427..e4870fee6 100644 --- a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/WhenAnExtensionAppendsChildBlocks.groovy +++ b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/WhenAnExtensionAppendsChildBlocks.groovy @@ -123,7 +123,7 @@ testmacro::target[] asciidoctor.javaExtensionRegistry().blockMacro(new BlockMacroProcessor('testmacro'){ @Override - Object process(StructuralNode parent, String target, Map attributes) { + StructuralNode process(StructuralNode parent, String target, Map attributes) { createBlock(parent, 'paragraph', expectedContent, [:]) } }) diff --git a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/BlockMacroRegistrationTest.java b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/BlockMacroRegistrationTest.java index 3ecac834b..8ea905cd7 100644 --- a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/BlockMacroRegistrationTest.java +++ b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/BlockMacroRegistrationTest.java @@ -34,7 +34,7 @@ private String document(String blockName, String text) { public static class AbstractTestProcessor extends BlockMacroProcessor { @Override - public Object process(StructuralNode parent, String target, Map attributes) { + public StructuralNode process(StructuralNode parent, String target, Map attributes) { return createBlock(parent, "paragraph", target.toUpperCase()); } } @@ -48,7 +48,7 @@ public TestProcessorWithName() { } @Override - public Object process(StructuralNode parent, String target, Map attributes) { + public StructuralNode process(StructuralNode parent, String target, Map attributes) { return createBlock(parent, "paragraph", target.toUpperCase()); } } diff --git a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/InlineMacroRegistrationTest.java b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/InlineMacroRegistrationTest.java index 616a83ee4..0ee5f84b1 100644 --- a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/InlineMacroRegistrationTest.java +++ b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/InlineMacroRegistrationTest.java @@ -3,6 +3,7 @@ import org.asciidoctor.Asciidoctor; import org.asciidoctor.OptionsBuilder; import org.asciidoctor.ast.ContentNode; +import org.asciidoctor.ast.PhraseNode; import org.asciidoctor.jruby.internal.AsciidoctorCoreException; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; @@ -31,7 +32,7 @@ private String document(String blockName, String text) { public static class AbstractTestProcessor extends InlineMacroProcessor { @Override - public Object process(ContentNode parent, String target, Map attributes) { + public PhraseNode process(ContentNode parent, String target, Map attributes) { String transformed = target.chars() .mapToObj(c -> Character.isUpperCase(c) ? " " + (char) c : Character.toString((char) c)) .collect(joining()) @@ -49,7 +50,7 @@ public TestProcessorWithName() { } @Override - public Object process(ContentNode parent, String target, Map attributes) { + public PhraseNode process(ContentNode parent, String target, Map attributes) { String transformed = target.chars() .mapToObj(c -> Character.isUpperCase(c) ? " " + (char) c : Character.toString((char) c)) .collect(joining()) diff --git a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/ManpageMacro.java b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/ManpageMacro.java index 6819b721d..05d906a25 100644 --- a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/ManpageMacro.java +++ b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/ManpageMacro.java @@ -1,7 +1,7 @@ package org.asciidoctor.extension; import org.asciidoctor.ast.ContentNode; -import org.asciidoctor.ast.StructuralNode; +import org.asciidoctor.ast.PhraseNode; import java.util.HashMap; import java.util.Map; @@ -17,8 +17,8 @@ public ManpageMacro(String macroName, Map config) { } @Override - public Object process(ContentNode parent, String target, - Map attributes) { + public PhraseNode process(ContentNode parent, String target, + Map attributes) { Map options = new HashMap(); options.put("type", ":link"); options.put("target", target + ".html"); diff --git a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/SayMacro.java b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/SayMacro.java index efb8222b9..10fbc3be3 100644 --- a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/SayMacro.java +++ b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/SayMacro.java @@ -1,7 +1,7 @@ package org.asciidoctor.extension; import org.asciidoctor.ast.ContentNode; -import org.asciidoctor.ast.StructuralNode; +import org.asciidoctor.ast.PhraseNode; import java.util.HashMap; import java.util.Map; @@ -17,7 +17,7 @@ public SayMacro(String macroName, Map config) { } @Override - public Object process(ContentNode parent, String target, Map attributes) { + public PhraseNode process(ContentNode parent, String target, Map attributes) { String text = "*" + target + "*"; Map phraseNodeAttributes = new HashMap<>(); phraseNodeAttributes.put("subs", ":normal"); diff --git a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/WhenTheInlineMacroProcessorRunsTwice.java b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/WhenTheInlineMacroProcessorRunsTwice.java index 32178cb0f..cf1dee356 100644 --- a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/WhenTheInlineMacroProcessorRunsTwice.java +++ b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/WhenTheInlineMacroProcessorRunsTwice.java @@ -2,6 +2,7 @@ import org.asciidoctor.Asciidoctor; import org.asciidoctor.ast.ContentNode; +import org.asciidoctor.ast.PhraseNode; import org.junit.Test; import java.util.Collections; @@ -20,7 +21,7 @@ public void inlineMacroAttributes() { asciidoctor.javaExtensionRegistry().inlineMacro(new InlineMacroProcessor("example") { @Override - public Object process(ContentNode parent, String target, Map attributes) { + public PhraseNode process(ContentNode parent, String target, Map attributes) { return createPhraseNode(parent, "quoted", attributes.toString(), attributes, new HashMap<>()); } diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ContextMenuInlineMacroProcessor.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ContextMenuInlineMacroProcessor.java index 2f00b137d..5b22390f5 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ContextMenuInlineMacroProcessor.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ContextMenuInlineMacroProcessor.java @@ -1,6 +1,7 @@ package org.asciidoctor.integrationguide.extension; import org.asciidoctor.ast.ContentNode; +import org.asciidoctor.ast.PhraseNode; import org.asciidoctor.extension.InlineMacroProcessor; import org.asciidoctor.extension.Name; @@ -14,7 +15,7 @@ public class ContextMenuInlineMacroProcessor extends InlineMacroProcessor { @Override - public Object process(ContentNode parent, String target, Map attributes) { + public PhraseNode process(ContentNode parent, String target, Map attributes) { String[] items = target.split("\\|"); Map attrs = new HashMap(); attrs.put("menu", "Right click"); // <1> diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/GistBlockMacroPositionalAttributesProcessor.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/GistBlockMacroPositionalAttributesProcessor.java index a9868127c..fed9a6293 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/GistBlockMacroPositionalAttributesProcessor.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/GistBlockMacroPositionalAttributesProcessor.java @@ -13,7 +13,7 @@ public class GistBlockMacroPositionalAttributesProcessor extends BlockMacroProcessor { @Override - public Object process(StructuralNode parent, String target, Map attributes) { + public StructuralNode process(StructuralNode parent, String target, Map attributes) { String script; String provider = (String) attributes.get("provider"); diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/GistBlockMacroProcessor.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/GistBlockMacroProcessor.java index c75987411..930998ff1 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/GistBlockMacroProcessor.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/GistBlockMacroProcessor.java @@ -11,7 +11,7 @@ public class GistBlockMacroProcessor extends BlockMacroProcessor { // <2> @Override - public Object process( // <3> + public StructuralNode process( // <3> StructuralNode parent, String target, Map attributes) { String content = new StringBuilder() @@ -23,7 +23,7 @@ public Object process( // <3> .append("") .append("").toString(); - return createBlock(parent, "pass", content); // <5> + return createBlock(parent, "pass", content); // <5> } } diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ImageInlineMacroProcessor.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ImageInlineMacroProcessor.java index a104b84e2..56795d4b4 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ImageInlineMacroProcessor.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ImageInlineMacroProcessor.java @@ -1,6 +1,7 @@ package org.asciidoctor.integrationguide.extension; import org.asciidoctor.ast.ContentNode; +import org.asciidoctor.ast.PhraseNode; import org.asciidoctor.extension.InlineMacroProcessor; import org.asciidoctor.extension.Name; @@ -12,7 +13,7 @@ public class ImageInlineMacroProcessor extends InlineMacroProcessor { @Override - public Object process(ContentNode parent, String target, Map attributes) { + public PhraseNode process(ContentNode parent, String target, Map attributes) { Map options = new HashMap(); options.put("type", "image"); // <1> diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroPositionalAttributesProcessor.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroPositionalAttributesProcessor.java index 84ee2327e..d11446bfd 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroPositionalAttributesProcessor.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroPositionalAttributesProcessor.java @@ -2,6 +2,7 @@ //tag::include[] import org.asciidoctor.ast.ContentNode; +import org.asciidoctor.ast.PhraseNode; import org.asciidoctor.extension.InlineMacroProcessor; import org.asciidoctor.extension.Name; import org.asciidoctor.extension.PositionalAttributes; @@ -16,7 +17,7 @@ public class IssueInlineMacroPositionalAttributesProcessor extends InlineMacroProcessor { @Override - public Object process(ContentNode parent, String target, Map attributes) { + public PhraseNode process(ContentNode parent, String target, Map attributes) { String href = new StringBuilder() diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroProcessor.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroProcessor.java index e999c266f..3bc567561 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroProcessor.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroProcessor.java @@ -3,6 +3,7 @@ //tag::include[] import org.asciidoctor.ast.ContentNode; +import org.asciidoctor.ast.PhraseNode; import org.asciidoctor.extension.InlineMacroProcessor; import org.asciidoctor.extension.Name; @@ -13,8 +14,8 @@ public class IssueInlineMacroProcessor extends InlineMacroProcessor { // <2> @Override - public Object process( // <3> - ContentNode parent, String target, Map attributes) { + public PhraseNode process( // <3> + ContentNode parent, String target, Map attributes) { String href = new StringBuilder() diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/KeyboardInlineMacroProcessor.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/KeyboardInlineMacroProcessor.java index 8028e5f94..65586a027 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/KeyboardInlineMacroProcessor.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/KeyboardInlineMacroProcessor.java @@ -1,6 +1,7 @@ package org.asciidoctor.integrationguide.extension; import org.asciidoctor.ast.ContentNode; +import org.asciidoctor.ast.PhraseNode; import org.asciidoctor.extension.InlineMacroProcessor; import org.asciidoctor.extension.Name; @@ -13,7 +14,7 @@ public class KeyboardInlineMacroProcessor extends InlineMacroProcessor { @Override - public Object process(ContentNode parent, String target, Map attributes) { + public PhraseNode process(ContentNode parent, String target, Map attributes) { Map attrs = new HashMap(); attrs.put("keys", Arrays.asList("Ctrl", target)); // <1> return createPhraseNode(parent, "kbd", (String) null, attrs); // <2> diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/LoggingBlockMacroProcessor.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/LoggingBlockMacroProcessor.java index 05e065d46..8bac8d9ac 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/LoggingBlockMacroProcessor.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/LoggingBlockMacroProcessor.java @@ -11,7 +11,7 @@ public class LoggingBlockMacroProcessor extends BlockMacroProcessor { @Override - public Object process( + public StructuralNode process( StructuralNode parent, String target, Map attributes) { String message = target; From 3576af43a9e312a7896d6817f29d0b5a70d85fea Mon Sep 17 00:00:00 2001 From: Robert Panzer Date: Sat, 13 Aug 2022 18:51:23 +0200 Subject: [PATCH 2/2] Change type of parent passed to InlineMacro to StructuralNode. Add description of changes to InlineMacros to migration guide. Minor code cleanup. --- .../extension/BlockMacroProcessor.java | 2 +- .../extension/InlineMacroProcessor.java | 3 +- .../asciidoctor/extension/MacroProcessor.java | 5 ++- .../InlineMacroProcessorProxy.java | 6 +-- .../AnnotatedLongInlineMacroProcessor.groovy | 4 +- ...AnnotatedRegexpInlineMacroProcessor.groovy | 4 +- .../InlineMacroRegistrationTest.java | 6 +-- .../asciidoctor/extension/ManpageMacro.java | 4 +- .../org/asciidoctor/extension/SayMacro.java | 4 +- .../WhenTheInlineMacroProcessorRunsTwice.java | 4 +- .../extension/CommentPreprocessorTest.java | 7 ++- .../ContextMenuInlineMacroProcessor.java | 12 +++--- .../ContextMenuInlineMacroProcessorTest.java | 4 +- .../CopyrightFooterPostprocessorTest.java | 7 +-- .../extension/ImageInlineMacroProcessor.java | 4 +- .../ImageInlineMacroProcessorTest.java | 4 +- ...ineMacroPositionalAttributesProcessor.java | 4 +- .../extension/IssueInlineMacroProcessor.java | 4 +- .../IssueInlineMacroProcessorTest.java | 3 +- .../KeyboardInlineMacroProcessor.java | 6 +-- .../KeyboardInlineMacroProcessorTest.java | 5 +-- .../extension/LsIncludeProcessorTest.java | 4 +- .../extension/RobotsDocinfoProcessorTest.java | 7 +-- .../TerminalCommandTreeprocessorTest.java | 6 ++- .../extension-migration-guide-2x-to-30.adoc | 43 +++++++++++++++++-- 25 files changed, 98 insertions(+), 64 deletions(-) diff --git a/asciidoctorj-api/src/main/java/org/asciidoctor/extension/BlockMacroProcessor.java b/asciidoctorj-api/src/main/java/org/asciidoctor/extension/BlockMacroProcessor.java index c38395391..fe2127fb9 100644 --- a/asciidoctorj-api/src/main/java/org/asciidoctor/extension/BlockMacroProcessor.java +++ b/asciidoctorj-api/src/main/java/org/asciidoctor/extension/BlockMacroProcessor.java @@ -5,7 +5,7 @@ import java.util.HashMap; import java.util.Map; -public abstract class BlockMacroProcessor extends MacroProcessor { +public abstract class BlockMacroProcessor extends MacroProcessor { public BlockMacroProcessor() { this(null, new HashMap<>()); diff --git a/asciidoctorj-api/src/main/java/org/asciidoctor/extension/InlineMacroProcessor.java b/asciidoctorj-api/src/main/java/org/asciidoctor/extension/InlineMacroProcessor.java index 4a99fb96b..d56470e1d 100644 --- a/asciidoctorj-api/src/main/java/org/asciidoctor/extension/InlineMacroProcessor.java +++ b/asciidoctorj-api/src/main/java/org/asciidoctor/extension/InlineMacroProcessor.java @@ -1,12 +1,11 @@ package org.asciidoctor.extension; -import org.asciidoctor.ast.ContentNode; import org.asciidoctor.ast.PhraseNode; import java.util.HashMap; import java.util.Map; -public abstract class InlineMacroProcessor extends MacroProcessor { +public abstract class InlineMacroProcessor extends MacroProcessor { /** * This value is used as the config option key when defining a regular expression that should be diff --git a/asciidoctorj-api/src/main/java/org/asciidoctor/extension/MacroProcessor.java b/asciidoctorj-api/src/main/java/org/asciidoctor/extension/MacroProcessor.java index 62b907cee..e5ea33ae3 100644 --- a/asciidoctorj-api/src/main/java/org/asciidoctor/extension/MacroProcessor.java +++ b/asciidoctorj-api/src/main/java/org/asciidoctor/extension/MacroProcessor.java @@ -1,11 +1,12 @@ package org.asciidoctor.extension; import org.asciidoctor.ast.ContentNode; +import org.asciidoctor.ast.StructuralNode; import java.util.HashMap; import java.util.Map; -public abstract class MacroProcessor extends BaseProcessor { +public abstract class MacroProcessor extends BaseProcessor { protected String name; @@ -30,6 +31,6 @@ public Map options() { return new HashMap<>(); } - public abstract R process(T parent, String target, Map attributes); + public abstract R process(StructuralNode parent, String target, Map attributes); } diff --git a/asciidoctorj-core/src/main/java/org/asciidoctor/jruby/extension/processorproxies/InlineMacroProcessorProxy.java b/asciidoctorj-core/src/main/java/org/asciidoctor/jruby/extension/processorproxies/InlineMacroProcessorProxy.java index 816527fa3..7ccea0fe7 100644 --- a/asciidoctorj-core/src/main/java/org/asciidoctor/jruby/extension/processorproxies/InlineMacroProcessorProxy.java +++ b/asciidoctorj-core/src/main/java/org/asciidoctor/jruby/extension/processorproxies/InlineMacroProcessorProxy.java @@ -1,6 +1,6 @@ package org.asciidoctor.jruby.extension.processorproxies; -import org.asciidoctor.ast.PhraseNode; +import org.asciidoctor.ast.StructuralNode; import org.asciidoctor.extension.InlineMacroProcessor; import org.asciidoctor.jruby.ast.impl.NodeConverter; import org.asciidoctor.jruby.internal.*; @@ -68,7 +68,7 @@ public IRubyObject initialize(ThreadContext context, IRubyObject[] args) throws // If options contains a String with a Regexp create the RubyRegexp from it RubyHash rubyConfig = RubyHashUtil.convertMapToRubyHashWithSymbols(getRuntime(), getProcessor().getConfig()); Object regexp = getProcessor().getConfig().get("regexp"); - if (regexp != null && regexp instanceof CharSequence) { + if (regexp instanceof CharSequence) { RubySymbol regexpSymbol = RubySymbol.newSymbol(getRuntime(), "regexp"); rubyConfig.put(regexpSymbol, convertRegexp(getRuntime(), (CharSequence) regexp)); } @@ -122,7 +122,7 @@ public IRubyObject initialize(ThreadContext context, IRubyObject[] args) throws @JRubyMethod(name = "process", required = 3) public IRubyObject process(ThreadContext context, IRubyObject parent, IRubyObject target, IRubyObject attributes) { Object o = getProcessor().process( - NodeConverter.createASTNode(parent), + (StructuralNode) NodeConverter.createASTNode(parent), RubyUtils.rubyToJava(getRuntime(), target, String.class), new RubyAttributesMapDecorator((RubyHash) attributes)); return convertProcessorResult(o); diff --git a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedLongInlineMacroProcessor.groovy b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedLongInlineMacroProcessor.groovy index e2ef7fdeb..757186b7e 100644 --- a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedLongInlineMacroProcessor.groovy +++ b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedLongInlineMacroProcessor.groovy @@ -1,8 +1,8 @@ package org.asciidoctor.extension import groovy.transform.CompileStatic -import org.asciidoctor.ast.ContentNode import org.asciidoctor.ast.PhraseNode +import org.asciidoctor.ast.StructuralNode @CompileStatic @Name('man') @@ -14,7 +14,7 @@ class AnnotatedLongInlineMacroProcessor extends InlineMacroProcessor { public static final String SECTION = 'section' @Override - PhraseNode process(ContentNode parent, String target, Map attributes) { + PhraseNode process(StructuralNode parent, String target, Map attributes) { assert attributes[SECTION] == '7' || ( attributes[SECTION] == '8' || attributes[SUBSECTION] == '1') Map options = new HashMap() diff --git a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedRegexpInlineMacroProcessor.groovy b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedRegexpInlineMacroProcessor.groovy index f474c089b..dbd71a4a7 100644 --- a/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedRegexpInlineMacroProcessor.groovy +++ b/asciidoctorj-core/src/test/groovy/org/asciidoctor/extension/AnnotatedRegexpInlineMacroProcessor.groovy @@ -1,8 +1,8 @@ package org.asciidoctor.extension import groovy.transform.CompileStatic -import org.asciidoctor.ast.ContentNode import org.asciidoctor.ast.PhraseNode +import org.asciidoctor.ast.StructuralNode @CompileStatic @Name('man') @@ -14,7 +14,7 @@ class AnnotatedRegexpInlineMacroProcessor extends InlineMacroProcessor { } @Override - PhraseNode process(ContentNode parent, String target, Map attributes) { + PhraseNode process(StructuralNode parent, String target, Map attributes) { Map options = new HashMap() options['type'] = ':link' options['target'] = "${target}.html" diff --git a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/InlineMacroRegistrationTest.java b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/InlineMacroRegistrationTest.java index 0ee5f84b1..8251c8c3f 100644 --- a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/InlineMacroRegistrationTest.java +++ b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/InlineMacroRegistrationTest.java @@ -2,8 +2,8 @@ import org.asciidoctor.Asciidoctor; import org.asciidoctor.OptionsBuilder; -import org.asciidoctor.ast.ContentNode; import org.asciidoctor.ast.PhraseNode; +import org.asciidoctor.ast.StructuralNode; import org.asciidoctor.jruby.internal.AsciidoctorCoreException; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; @@ -32,7 +32,7 @@ private String document(String blockName, String text) { public static class AbstractTestProcessor extends InlineMacroProcessor { @Override - public PhraseNode process(ContentNode parent, String target, Map attributes) { + public PhraseNode process(StructuralNode parent, String target, Map attributes) { String transformed = target.chars() .mapToObj(c -> Character.isUpperCase(c) ? " " + (char) c : Character.toString((char) c)) .collect(joining()) @@ -50,7 +50,7 @@ public TestProcessorWithName() { } @Override - public PhraseNode process(ContentNode parent, String target, Map attributes) { + public PhraseNode process(StructuralNode parent, String target, Map attributes) { String transformed = target.chars() .mapToObj(c -> Character.isUpperCase(c) ? " " + (char) c : Character.toString((char) c)) .collect(joining()) diff --git a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/ManpageMacro.java b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/ManpageMacro.java index 05d906a25..5749be660 100644 --- a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/ManpageMacro.java +++ b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/ManpageMacro.java @@ -1,7 +1,7 @@ package org.asciidoctor.extension; -import org.asciidoctor.ast.ContentNode; import org.asciidoctor.ast.PhraseNode; +import org.asciidoctor.ast.StructuralNode; import java.util.HashMap; import java.util.Map; @@ -17,7 +17,7 @@ public ManpageMacro(String macroName, Map config) { } @Override - public PhraseNode process(ContentNode parent, String target, + public PhraseNode process(StructuralNode parent, String target, Map attributes) { Map options = new HashMap(); options.put("type", ":link"); diff --git a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/SayMacro.java b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/SayMacro.java index 10fbc3be3..1184832f7 100644 --- a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/SayMacro.java +++ b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/SayMacro.java @@ -1,7 +1,7 @@ package org.asciidoctor.extension; -import org.asciidoctor.ast.ContentNode; import org.asciidoctor.ast.PhraseNode; +import org.asciidoctor.ast.StructuralNode; import java.util.HashMap; import java.util.Map; @@ -17,7 +17,7 @@ public SayMacro(String macroName, Map config) { } @Override - public PhraseNode process(ContentNode parent, String target, Map attributes) { + public PhraseNode process(StructuralNode parent, String target, Map attributes) { String text = "*" + target + "*"; Map phraseNodeAttributes = new HashMap<>(); phraseNodeAttributes.put("subs", ":normal"); diff --git a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/WhenTheInlineMacroProcessorRunsTwice.java b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/WhenTheInlineMacroProcessorRunsTwice.java index cf1dee356..74fe3bc42 100644 --- a/asciidoctorj-core/src/test/java/org/asciidoctor/extension/WhenTheInlineMacroProcessorRunsTwice.java +++ b/asciidoctorj-core/src/test/java/org/asciidoctor/extension/WhenTheInlineMacroProcessorRunsTwice.java @@ -1,8 +1,8 @@ package org.asciidoctor.extension; import org.asciidoctor.Asciidoctor; -import org.asciidoctor.ast.ContentNode; import org.asciidoctor.ast.PhraseNode; +import org.asciidoctor.ast.StructuralNode; import org.junit.Test; import java.util.Collections; @@ -21,7 +21,7 @@ public void inlineMacroAttributes() { asciidoctor.javaExtensionRegistry().inlineMacro(new InlineMacroProcessor("example") { @Override - public PhraseNode process(ContentNode parent, String target, Map attributes) { + public PhraseNode process(StructuralNode parent, String target, Map attributes) { return createPhraseNode(parent, "quoted", attributes.toString(), attributes, new HashMap<>()); } diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/CommentPreprocessorTest.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/CommentPreprocessorTest.java index 12703a8a9..132f7c3e0 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/CommentPreprocessorTest.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/CommentPreprocessorTest.java @@ -1,9 +1,8 @@ package org.asciidoctor.integrationguide.extension; import org.asciidoctor.Asciidoctor; -import org.asciidoctor.OptionsBuilder; +import org.asciidoctor.Options; import org.asciidoctor.util.ClasspathResources; -import org.hamcrest.Matcher; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; import org.junit.Test; @@ -39,8 +38,8 @@ public void should_render_comments_as_notes() { //tag::include[] asciidoctor.javaExtensionRegistry().preprocessor(CommentPreprocessor.class); // <1> - String result1 = asciidoctor.convertFile(comment_adoc, OptionsBuilder.options().toFile(false)); - String result2 = asciidoctor.convertFile(comment_with_note_adoc, OptionsBuilder.options().toFile(false)); + String result1 = asciidoctor.convertFile(comment_adoc, Options.builder().toFile(false).build()); + String result2 = asciidoctor.convertFile(comment_with_note_adoc, Options.builder().toFile(false).build()); assertThat(result1, is(result2)); // <2> //end::include[] diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ContextMenuInlineMacroProcessor.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ContextMenuInlineMacroProcessor.java index 5b22390f5..ce1696f95 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ContextMenuInlineMacroProcessor.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ContextMenuInlineMacroProcessor.java @@ -1,11 +1,12 @@ package org.asciidoctor.integrationguide.extension; -import org.asciidoctor.ast.ContentNode; import org.asciidoctor.ast.PhraseNode; +import org.asciidoctor.ast.StructuralNode; import org.asciidoctor.extension.InlineMacroProcessor; import org.asciidoctor.extension.Name; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -15,14 +16,11 @@ public class ContextMenuInlineMacroProcessor extends InlineMacroProcessor { @Override - public PhraseNode process(ContentNode parent, String target, Map attributes) { + public PhraseNode process(StructuralNode parent, String target, Map attributes) { String[] items = target.split("\\|"); - Map attrs = new HashMap(); + Map attrs = new HashMap<>(); attrs.put("menu", "Right click"); // <1> - List submenus = new ArrayList(); - for (int i = 0; i < items.length - 1; i++) { - submenus.add(items[i]); - } + List submenus = Arrays.asList(items).subList(0, items.length - 1); attrs.put("submenus", submenus); attrs.put("menuitem", items[items.length - 1]); diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ContextMenuInlineMacroProcessorTest.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ContextMenuInlineMacroProcessorTest.java index 8e889569a..ff8041cd8 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ContextMenuInlineMacroProcessorTest.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ContextMenuInlineMacroProcessorTest.java @@ -1,7 +1,7 @@ package org.asciidoctor.integrationguide.extension; import org.asciidoctor.Asciidoctor; -import org.asciidoctor.OptionsBuilder; +import org.asciidoctor.Options; import org.asciidoctor.SafeMode; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; @@ -22,7 +22,7 @@ public void should_create_context_menu() { asciidoctor.javaExtensionRegistry().inlineMacro(ContextMenuInlineMacroProcessor.class); - String result = asciidoctor.convert("rightclick:New|Class[]", OptionsBuilder.options().toFile(false).safe(SafeMode.UNSAFE)); + String result = asciidoctor.convert("rightclick:New|Class[]", Options.builder().toFile(false).safe(SafeMode.UNSAFE).build()); assertThat( diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/CopyrightFooterPostprocessorTest.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/CopyrightFooterPostprocessorTest.java index e7b3acbc5..e644a1a07 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/CopyrightFooterPostprocessorTest.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/CopyrightFooterPostprocessorTest.java @@ -1,7 +1,7 @@ package org.asciidoctor.integrationguide.extension; import org.asciidoctor.Asciidoctor; -import org.asciidoctor.OptionsBuilder; +import org.asciidoctor.Options; import org.asciidoctor.util.ClasspathResources; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; @@ -35,9 +35,10 @@ public void should_render_comments_as_notes() { String result = asciidoctor.convertFile(doc, - OptionsBuilder.options() + Options.builder() .headerFooter(true) // <2> - .toFile(false)); + .toFile(false) + .build()); assertThat(result, containsString(CopyrightFooterPostprocessor.COPYRIGHT_NOTICE)); //end::include[] diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ImageInlineMacroProcessor.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ImageInlineMacroProcessor.java index 56795d4b4..f26188745 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ImageInlineMacroProcessor.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ImageInlineMacroProcessor.java @@ -1,7 +1,7 @@ package org.asciidoctor.integrationguide.extension; -import org.asciidoctor.ast.ContentNode; import org.asciidoctor.ast.PhraseNode; +import org.asciidoctor.ast.StructuralNode; import org.asciidoctor.extension.InlineMacroProcessor; import org.asciidoctor.extension.Name; @@ -13,7 +13,7 @@ public class ImageInlineMacroProcessor extends InlineMacroProcessor { @Override - public PhraseNode process(ContentNode parent, String target, Map attributes) { + public PhraseNode process(StructuralNode parent, String target, Map attributes) { Map options = new HashMap(); options.put("type", "image"); // <1> diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ImageInlineMacroProcessorTest.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ImageInlineMacroProcessorTest.java index 1bbbdde47..06e1372f7 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ImageInlineMacroProcessorTest.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/ImageInlineMacroProcessorTest.java @@ -1,7 +1,7 @@ package org.asciidoctor.integrationguide.extension; import org.asciidoctor.Asciidoctor; -import org.asciidoctor.OptionsBuilder; +import org.asciidoctor.Options; import org.asciidoctor.SafeMode; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; @@ -22,7 +22,7 @@ public void should_create_context_menu() { asciidoctor.javaExtensionRegistry().inlineMacro(ImageInlineMacroProcessor.class); - String result = asciidoctor.convert("foo:1234[]", OptionsBuilder.options().toFile(false).safe(SafeMode.UNSAFE)); + String result = asciidoctor.convert("foo:1234[]", Options.builder().toFile(false).safe(SafeMode.UNSAFE).build()); assertThat( result, diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroPositionalAttributesProcessor.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroPositionalAttributesProcessor.java index d11446bfd..86b8bc035 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroPositionalAttributesProcessor.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroPositionalAttributesProcessor.java @@ -1,8 +1,8 @@ package org.asciidoctor.integrationguide.extension; //tag::include[] -import org.asciidoctor.ast.ContentNode; import org.asciidoctor.ast.PhraseNode; +import org.asciidoctor.ast.StructuralNode; import org.asciidoctor.extension.InlineMacroProcessor; import org.asciidoctor.extension.Name; import org.asciidoctor.extension.PositionalAttributes; @@ -17,7 +17,7 @@ public class IssueInlineMacroPositionalAttributesProcessor extends InlineMacroProcessor { @Override - public PhraseNode process(ContentNode parent, String target, Map attributes) { + public PhraseNode process(StructuralNode parent, String target, Map attributes) { String href = new StringBuilder() diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroProcessor.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroProcessor.java index 3bc567561..b64eb2b01 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroProcessor.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroProcessor.java @@ -2,8 +2,8 @@ //tag::include[] -import org.asciidoctor.ast.ContentNode; import org.asciidoctor.ast.PhraseNode; +import org.asciidoctor.ast.StructuralNode; import org.asciidoctor.extension.InlineMacroProcessor; import org.asciidoctor.extension.Name; @@ -15,7 +15,7 @@ public class IssueInlineMacroProcessor extends InlineMacroProcessor { // <2> @Override public PhraseNode process( // <3> - ContentNode parent, String target, Map attributes) { + StructuralNode parent, String target, Map attributes) { String href = new StringBuilder() diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroProcessorTest.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroProcessorTest.java index c37c90749..e91b3206c 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroProcessorTest.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/IssueInlineMacroProcessorTest.java @@ -2,7 +2,6 @@ import org.asciidoctor.Asciidoctor; import org.asciidoctor.Options; -import org.asciidoctor.OptionsBuilder; import org.asciidoctor.util.ClasspathResources; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; @@ -33,7 +32,7 @@ public void should_create_anchor_elements_for_inline_macros() { //tag::include[] asciidoctor.javaExtensionRegistry().inlineMacro(IssueInlineMacroProcessor.class); // <1> - String result = asciidoctor.convertFile(issueinlinemacro_adoc, OptionsBuilder.options().toFile(false)); + String result = asciidoctor.convertFile(issueinlinemacro_adoc, Options.builder().toFile(false).build()); assertThat( result, diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/KeyboardInlineMacroProcessor.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/KeyboardInlineMacroProcessor.java index 65586a027..ee51621b2 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/KeyboardInlineMacroProcessor.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/KeyboardInlineMacroProcessor.java @@ -1,7 +1,7 @@ package org.asciidoctor.integrationguide.extension; -import org.asciidoctor.ast.ContentNode; import org.asciidoctor.ast.PhraseNode; +import org.asciidoctor.ast.StructuralNode; import org.asciidoctor.extension.InlineMacroProcessor; import org.asciidoctor.extension.Name; @@ -14,8 +14,8 @@ public class KeyboardInlineMacroProcessor extends InlineMacroProcessor { @Override - public PhraseNode process(ContentNode parent, String target, Map attributes) { - Map attrs = new HashMap(); + public PhraseNode process(StructuralNode parent, String target, Map attributes) { + Map attrs = new HashMap<>(); attrs.put("keys", Arrays.asList("Ctrl", target)); // <1> return createPhraseNode(parent, "kbd", (String) null, attrs); // <2> } diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/KeyboardInlineMacroProcessorTest.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/KeyboardInlineMacroProcessorTest.java index 93282ae0f..bd9eda54f 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/KeyboardInlineMacroProcessorTest.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/KeyboardInlineMacroProcessorTest.java @@ -1,9 +1,8 @@ package org.asciidoctor.integrationguide.extension; import org.asciidoctor.Asciidoctor; -import org.asciidoctor.OptionsBuilder; +import org.asciidoctor.Options; import org.asciidoctor.SafeMode; -import org.asciidoctor.util.ClasspathResources; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; import org.junit.Test; @@ -25,7 +24,7 @@ public void should_create_keyboard_elements() { asciidoctor.javaExtensionRegistry().inlineMacro(KeyboardInlineMacroProcessor.class); // <1> - String result = asciidoctor.convert("ctrl:S[]", OptionsBuilder.options().toFile(false).safe(SafeMode.UNSAFE)); + String result = asciidoctor.convert("ctrl:S[]", Options.builder().toFile(false).safe(SafeMode.UNSAFE).build()); assertThat( result, diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/LsIncludeProcessorTest.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/LsIncludeProcessorTest.java index 4c018f8c8..02eb1584b 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/LsIncludeProcessorTest.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/LsIncludeProcessorTest.java @@ -1,7 +1,7 @@ package org.asciidoctor.integrationguide.extension; import org.asciidoctor.Asciidoctor; -import org.asciidoctor.OptionsBuilder; +import org.asciidoctor.Options; import org.asciidoctor.util.ClasspathResources; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; @@ -35,7 +35,7 @@ public void should_create_anchor_elements_for_inline_macros() { asciidoctor.javaExtensionRegistry().includeProcessor(LsIncludeProcessor.class); // <1> - String result = asciidoctor.convertFile(lsinclude_adoc, OptionsBuilder.options().toFile(false)); + String result = asciidoctor.convertFile(lsinclude_adoc, Options.builder().toFile(false).build()); assertThat( result, diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/RobotsDocinfoProcessorTest.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/RobotsDocinfoProcessorTest.java index 5b722bc9d..4d420c5e2 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/RobotsDocinfoProcessorTest.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/RobotsDocinfoProcessorTest.java @@ -1,7 +1,7 @@ package org.asciidoctor.integrationguide.extension; import org.asciidoctor.Asciidoctor; -import org.asciidoctor.OptionsBuilder; +import org.asciidoctor.Options; import org.asciidoctor.SafeMode; import org.asciidoctor.util.ClasspathResources; import org.jboss.arquillian.junit.Arquillian; @@ -37,10 +37,11 @@ public void should_create_anchor_elements_for_inline_macros() { String result = asciidoctor.convert( src, - OptionsBuilder.options() + Options.builder() .headerFooter(true) // <2> .safe(SafeMode.SERVER) // <3> - .toFile(false)); + .toFile(false) + .build()); org.jsoup.nodes.Document document = Jsoup.parse(result); // <4> Element metaElement = document.head().children().last(); diff --git a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/TerminalCommandTreeprocessorTest.java b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/TerminalCommandTreeprocessorTest.java index ba00c768f..42dab42b2 100644 --- a/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/TerminalCommandTreeprocessorTest.java +++ b/asciidoctorj-documentation/src/test/java/org/asciidoctor/integrationguide/extension/TerminalCommandTreeprocessorTest.java @@ -1,6 +1,7 @@ package org.asciidoctor.integrationguide.extension; import org.asciidoctor.Asciidoctor; +import org.asciidoctor.Options; import org.asciidoctor.OptionsBuilder; import org.asciidoctor.util.ClasspathResources; import org.jboss.arquillian.junit.Arquillian; @@ -81,9 +82,10 @@ public void should_process_terminal_listings_after_registering_via_extension_reg //tag::include-extension-registry[] String result = asciidoctor.convertFile( src, - OptionsBuilder.options() + Options.builder() .headerFooter(false) - .toFile(false)); + .toFile(false) + .build()); //end::include-extension-registry[] assertThat(result, is(referenceResult)); } finally { diff --git a/docs/modules/guides/pages/extension-migration-guide-2x-to-30.adoc b/docs/modules/guides/pages/extension-migration-guide-2x-to-30.adoc index 6e86cca3d..3b0073c9e 100644 --- a/docs/modules/guides/pages/extension-migration-guide-2x-to-30.adoc +++ b/docs/modules/guides/pages/extension-migration-guide-2x-to-30.adoc @@ -1,11 +1,9 @@ -= Extension Migration: 1.6.x to 2.0.x -:url-base-1-5: https://github.com/asciidoctor/asciidoctorj/blob/v1.5.8.1 -:url-base-1-6: https://github.com/asciidoctor/asciidoctorj/blob/v1.6.0 += Extension Migration: 2.0.x to 3.0.x Between 2.x and 3.0.x there are some changes that may affect existing extensions. This guide will illustrate the changes. -== Preprocessor API +== Preprocessor Extensions In AsciidoctorJ 1.x and 2.x a Preprocessor could not return anything from its process() method. This deviated from the API offered by Asciidoctor itself which allows to replace the original Reader. @@ -51,3 +49,40 @@ public class ChangeAttributeValuePreprocessor extends Preprocessor { ---- <1> Change the method signature to return a `Reader` instead of `void`. <2> Directly return the passed Reader. + +== Inline Macro Extensions + +The API that inline macro extensions had the return type `java.lang.Object`, while `org.asciidoctor.ast.PhraseNode` is actually expected. +Additionally, the parent node passed to the process method is guaranteed to be a `org.asciidoctor.ast.StructuralNode`, while the previous API offered the supertype `org.asciidoctor.ast.ContentNode`. +This is corrected in AsciidoctorJ 3.x making it clearer for extension implementors what types to expect and what types to return. + +Let's assume that an InlineMacro originally looks like this for AsciidoctorJ 2.x: + +[source,java] +---- +public class KeyboardInlineMacroProcessor extends InlineMacroProcessor { + @Override + public Object process(ContentNode parent, String target, Map attributes) { + Map attrs = new HashMap<>(); + attrs.put("keys", Arrays.asList("Ctrl", target)); + return createPhraseNode(parent, "kbd", (String) null, attrs); + } +} +---- + +The only change that is necessary is to change the method declaration of the process method: +Change the return type to `org.asciidoctor.ast.PhraseNode` and the type of the first parameter to `org.asciidoctor.ast.StructuralNode`. + +[source,java] +---- +public class KeyboardInlineMacroProcessor extends InlineMacroProcessor { + @Override + public PhraseNode process(StructuralNode parent, String target, Map attributes) { + Map attrs = new HashMap<>(); + attrs.put("keys", Arrays.asList("Ctrl", target)); + return createPhraseNode(parent, "kbd", (String) null, attrs); + } +} +---- + +This change mostly makes it clearer for new extensions what they have to return and what they can expect.