From 15b6eaea61a6df2956d384e315fbd1eafa77ad1c Mon Sep 17 00:00:00 2001 From: Simon Brown Date: Fri, 16 Feb 2024 09:25:04 +0000 Subject: [PATCH] Makes the DSL script context mirror the DSL plugin context (added a reference to the parser). --- .../structurizr/dsl/ExternalScriptDslContext.java | 4 ++-- .../structurizr/dsl/InlineScriptDslContext.java | 4 ++-- .../java/com/structurizr/dsl/ScriptDslContext.java | 6 ++++-- .../com/structurizr/dsl/StructurizrDslParser.java | 4 ++-- .../dsl/StructurizrDslScriptContext.java | 14 +++++++++++++- .../dsl/ExternalScriptDslContextTests.java | 2 +- .../dsl/InlineScriptDslContextTests.java | 2 +- 7 files changed, 25 insertions(+), 11 deletions(-) diff --git a/structurizr-dsl/src/main/java/com/structurizr/dsl/ExternalScriptDslContext.java b/structurizr-dsl/src/main/java/com/structurizr/dsl/ExternalScriptDslContext.java index 53305c12..772e3654 100644 --- a/structurizr-dsl/src/main/java/com/structurizr/dsl/ExternalScriptDslContext.java +++ b/structurizr-dsl/src/main/java/com/structurizr/dsl/ExternalScriptDslContext.java @@ -9,8 +9,8 @@ class ExternalScriptDslContext extends ScriptDslContext { private final String filename; - ExternalScriptDslContext(DslContext parentContext, File dslFile, String filename) { - super(parentContext, dslFile); + ExternalScriptDslContext(DslContext parentContext, File dslFile, StructurizrDslParser dslParser, String filename) { + super(parentContext, dslFile, dslParser); this.filename = filename; } diff --git a/structurizr-dsl/src/main/java/com/structurizr/dsl/InlineScriptDslContext.java b/structurizr-dsl/src/main/java/com/structurizr/dsl/InlineScriptDslContext.java index 72803e62..adabd369 100644 --- a/structurizr-dsl/src/main/java/com/structurizr/dsl/InlineScriptDslContext.java +++ b/structurizr-dsl/src/main/java/com/structurizr/dsl/InlineScriptDslContext.java @@ -20,8 +20,8 @@ class InlineScriptDslContext extends ScriptDslContext { SUPPORTED_LANGUAGES.put("ruby", "rb"); } - InlineScriptDslContext(DslContext parentContext, File dslFile, String language) { - super(parentContext, dslFile); + InlineScriptDslContext(DslContext parentContext, File dslFile, StructurizrDslParser dslParser, String language) { + super(parentContext, dslFile, dslParser); this.language = language.toLowerCase(); } diff --git a/structurizr-dsl/src/main/java/com/structurizr/dsl/ScriptDslContext.java b/structurizr-dsl/src/main/java/com/structurizr/dsl/ScriptDslContext.java index d066bbc4..6e11529f 100644 --- a/structurizr-dsl/src/main/java/com/structurizr/dsl/ScriptDslContext.java +++ b/structurizr-dsl/src/main/java/com/structurizr/dsl/ScriptDslContext.java @@ -22,12 +22,14 @@ abstract class ScriptDslContext extends DslContext { private final DslContext parentContext; protected final File dslFile; + private final StructurizrDslParser dslParser; private final Map parameters = new HashMap<>(); - ScriptDslContext(DslContext parentContext, File dslFile) { + ScriptDslContext(DslContext parentContext, File dslFile, StructurizrDslParser dslParser) { this.parentContext = parentContext; this.dslFile = dslFile; + this.dslParser = dslParser; } void addParameter(String name, String value) { @@ -60,7 +62,7 @@ void run(DslContext context, String extension, List lines) throws Except } // bind a context object - StructurizrDslScriptContext scriptContext = new StructurizrDslScriptContext(dslFile, getWorkspace(), parameters); + StructurizrDslScriptContext scriptContext = new StructurizrDslScriptContext(dslParser, dslFile, getWorkspace(), parameters); bindings.put(CONTEXT_VARIABLE_NAME, scriptContext); // and any custom parameters diff --git a/structurizr-dsl/src/main/java/com/structurizr/dsl/StructurizrDslParser.java b/structurizr-dsl/src/main/java/com/structurizr/dsl/StructurizrDslParser.java index 7f8431a6..ae8bef60 100644 --- a/structurizr-dsl/src/main/java/com/structurizr/dsl/StructurizrDslParser.java +++ b/structurizr-dsl/src/main/java/com/structurizr/dsl/StructurizrDslParser.java @@ -271,10 +271,10 @@ void parse(List lines, File dslFile) throws StructurizrDslParserExceptio ScriptParser scriptParser = new ScriptParser(); if (scriptParser.isInlineScript(tokens)) { String language = scriptParser.parseInline(tokens.withoutContextStartToken()); - startContext(new InlineScriptDslContext(getContext(), dslFile, language)); + startContext(new InlineScriptDslContext(getContext(), dslFile, this, language)); } else { String filename = scriptParser.parseExternal(tokens.withoutContextStartToken()); - startContext(new ExternalScriptDslContext(getContext(), dslFile, filename)); + startContext(new ExternalScriptDslContext(getContext(), dslFile, this, filename)); if (shouldStartContext(tokens)) { // we'll wait for parameters before executing the script diff --git a/structurizr-dsl/src/main/java/com/structurizr/dsl/StructurizrDslScriptContext.java b/structurizr-dsl/src/main/java/com/structurizr/dsl/StructurizrDslScriptContext.java index 737c6ed6..85c03f35 100644 --- a/structurizr-dsl/src/main/java/com/structurizr/dsl/StructurizrDslScriptContext.java +++ b/structurizr-dsl/src/main/java/com/structurizr/dsl/StructurizrDslScriptContext.java @@ -11,6 +11,7 @@ */ public class StructurizrDslScriptContext { + private final StructurizrDslParser dslParser; private final File dslFile; private final Workspace workspace; private final Map parameters; @@ -18,16 +19,27 @@ public class StructurizrDslScriptContext { /** * Creates a new instance. * + * @param dslParser a reference to the DSL parser that loaded the script * @param dslFile a reference to the DSL file that loaded the script * @param workspace the workspace * @param parameters a map of name/value pairs representing parameters */ - public StructurizrDslScriptContext(File dslFile, Workspace workspace, Map parameters) { + public StructurizrDslScriptContext(StructurizrDslParser dslParser, File dslFile, Workspace workspace, Map parameters) { + this.dslParser = dslParser; this.dslFile = dslFile; this.workspace = workspace; this.parameters = parameters; } + /** + * Gets a reference to the DSL parser that initiated this script context. + * + * @return a StructurizrDslParser instance + */ + public StructurizrDslParser getDslParser() { + return dslParser; + } + /** * Gets a reference to the DSL file that initiated this script context. * diff --git a/structurizr-dsl/src/test/java/com/structurizr/dsl/ExternalScriptDslContextTests.java b/structurizr-dsl/src/test/java/com/structurizr/dsl/ExternalScriptDslContextTests.java index 706c9cdc..922d5b28 100644 --- a/structurizr-dsl/src/test/java/com/structurizr/dsl/ExternalScriptDslContextTests.java +++ b/structurizr-dsl/src/test/java/com/structurizr/dsl/ExternalScriptDslContextTests.java @@ -11,7 +11,7 @@ class ExternalScriptDslContextTests extends AbstractTests { @Test void test_parseExternal_RunsTheScript_WhenAValidScriptFilenameIsSpecified() { - ExternalScriptDslContext context = new ExternalScriptDslContext(new WorkspaceDslContext(), new File("src/test/resources/dsl/workspace.dsl"), "test.kts"); + ExternalScriptDslContext context = new ExternalScriptDslContext(new WorkspaceDslContext(), new File("src/test/resources/dsl/workspace.dsl"), null, "test.kts"); context.setWorkspace(workspace); context.end(); diff --git a/structurizr-dsl/src/test/java/com/structurizr/dsl/InlineScriptDslContextTests.java b/structurizr-dsl/src/test/java/com/structurizr/dsl/InlineScriptDslContextTests.java index 6b277531..01067aa0 100644 --- a/structurizr-dsl/src/test/java/com/structurizr/dsl/InlineScriptDslContextTests.java +++ b/structurizr-dsl/src/test/java/com/structurizr/dsl/InlineScriptDslContextTests.java @@ -12,7 +12,7 @@ class InlineScriptDslContextTests extends AbstractTests { @Test void test_end_ThrowsAnException_WhenAnUnsupportedLanguageIsSpecified() { try { - InlineScriptDslContext context = new InlineScriptDslContext(new WorkspaceDslContext(), new File("workspace.dsl"), "java"); + InlineScriptDslContext context = new InlineScriptDslContext(new WorkspaceDslContext(), new File("workspace.dsl"), null, "java"); context.end(); fail(); } catch (Exception e) {