From b66ecd89b72e8dfce966da7a72379df25a68b95d Mon Sep 17 00:00:00 2001 From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com> Date: Fri, 3 May 2024 20:33:33 +0200 Subject: [PATCH] Imports seem to be working. --- .../transpile/DefaultGroovyTranspiler.java | 6 +- .../transpile/WebViewComponentModuleNode.java | 72 ++++++------------- ...aultWebComponentTemplateCompilerTests.java | 27 +++++++ .../web/transpiler/TranspilerTestsUtil.java | 7 -- 4 files changed, 52 insertions(+), 60 deletions(-) delete mode 100644 web-views/src/testFixtures/java/groowt/view/web/transpiler/TranspilerTestsUtil.java diff --git a/web-views/src/main/java/groowt/view/web/transpile/DefaultGroovyTranspiler.java b/web-views/src/main/java/groowt/view/web/transpile/DefaultGroovyTranspiler.java index 6088847..7dab8d2 100644 --- a/web-views/src/main/java/groowt/view/web/transpile/DefaultGroovyTranspiler.java +++ b/web-views/src/main/java/groowt/view/web/transpile/DefaultGroovyTranspiler.java @@ -103,7 +103,6 @@ public class DefaultGroovyTranspiler implements GroovyTranspiler { protected void handlePreamble( String templateName, - String packageName, PreambleNode preambleNode, ClassNode mainClassNode, WebViewComponentModuleNode moduleNode @@ -131,7 +130,8 @@ public class DefaultGroovyTranspiler implements GroovyTranspiler { if (declarationsWithField.size() != preambleStatements.size()) { logger.warn( "{} contains script statements which are not supported. " + - "Currently, only classes, methods, and field declarations (marked with @Field) " + + "Currently, only classes, methods, and field declarations " + + "(marked with @groovy.transform.Field) " + "are supported. The rest will be ignored.", templateName ); @@ -199,7 +199,7 @@ public class DefaultGroovyTranspiler implements GroovyTranspiler { // preamble final PreambleNode preambleNode = compilationUnitNode.getPreambleNode(); if (preambleNode != null) { - this.handlePreamble(templateName, packageName, preambleNode, mainClassNode, moduleNode); + this.handlePreamble(templateName, preambleNode, mainClassNode, moduleNode); } // renderer diff --git a/web-views/src/main/java/groowt/view/web/transpile/WebViewComponentModuleNode.java b/web-views/src/main/java/groowt/view/web/transpile/WebViewComponentModuleNode.java index fe807b1..ebf64b7 100644 --- a/web-views/src/main/java/groowt/view/web/transpile/WebViewComponentModuleNode.java +++ b/web-views/src/main/java/groowt/view/web/transpile/WebViewComponentModuleNode.java @@ -1,15 +1,12 @@ package groowt.view.web.transpile; import org.codehaus.groovy.ast.ClassNode; -import org.codehaus.groovy.ast.CompileUnit; import org.codehaus.groovy.ast.ImportNode; import org.codehaus.groovy.ast.ModuleNode; import org.codehaus.groovy.control.SourceUnit; import org.jetbrains.annotations.Nullable; import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; public class WebViewComponentModuleNode extends ModuleNode { @@ -25,95 +22,70 @@ public class WebViewComponentModuleNode extends ModuleNode { protected final Map staticImports = new LinkedHashMap<>(); protected final Map staticStarImports = new LinkedHashMap<>(); + protected final Map allImports = new LinkedHashMap<>(); + public WebViewComponentModuleNode(SourceUnit context) { super(context); } @Override public List getImports() { - final List r = new ArrayList<>(super.getImports()); - r.addAll(this.imports); - return r; + return new ArrayList<>(this.imports); } @Override public List getStarImports() { - final List r = new ArrayList<>(super.getStarImports()); - r.addAll(this.starImports); - return r; + return new ArrayList<>(this.starImports); } @Override public Map getStaticImports() { - final Map r = new HashMap<>(super.getStaticImports()); - r.putAll(this.staticImports); - return r; + return new HashMap<>(this.staticImports); } @Override public Map getStaticStarImports() { - final Map r = new HashMap<>(super.getStaticStarImports()); - r.putAll(this.staticStarImports); - return r; + return new HashMap<>(this.staticStarImports); } @Override - public ClassNode getImportType(String alias) { - final ClassNode superResult = super.getImportType(alias); - if (superResult != null) { - return superResult; - } else { - return Optional.ofNullable(this.getImport(alias)).map(ImportNode::getType).orElse(null); - } + public @Nullable ClassNode getImportType(String alias) { + return Optional.ofNullable(this.getImport(alias)) + .map(ImportNode::getType) + .orElse(null); } @Override public @Nullable ImportNode getImport(String alias) { - final ImportNode superResult = super.getImport(alias); - if (superResult != null) { - return superResult; - } else { - final Map aliases = this.getNodeMetaData("import.aliases", x -> { - return this.imports.stream() - .collect(Collectors.toMap(ImportNode::getAlias, - Function.identity(), - (first, second) -> second - )); - }); - return aliases.get(alias); - } + return this.allImports.get(alias); } - // Copied from super - protected void storeLastAddedImportNode(ImportNode importNode) { - if (this.getNodeMetaData(ImportNode.class) == ImportNode.class) { - this.putNodeMetaData(ImportNode.class, importNode); - } + protected void putToAll(String alias, ImportNode importNode) { + this.allImports.put(alias, importNode); + } + + protected final void putToAll(ImportNode importNode) { + this.putToAll(importNode.getAlias(), importNode); } public void addImport(ImportNode importNode) { this.imports.add(importNode); - this.removeNodeMetaData("import.aliases"); - this.storeLastAddedImportNode(importNode); + this.putToAll(importNode); } public void addStarImport(ImportNode importNode) { this.starImports.add(importNode); - this.storeLastAddedImportNode(importNode); + this.putToAll(importNode); } public void addStaticImport(String alias, ImportNode importNode) { - final ImportNode prev = this.staticImports.put(alias, importNode); - if (prev != null) { - this.staticImports.put(prev.toString(), prev); - this.staticImports.put(alias, this.staticImports.remove(alias)); - } - this.storeLastAddedImportNode(importNode); + this.staticImports.put(alias, importNode); + this.putToAll(alias, importNode); } public void addStaticStarImport(String alias, ImportNode importNode) { this.staticStarImports.put(alias, importNode); - this.storeLastAddedImportNode(importNode); + this.putToAll(alias, importNode); } } diff --git a/web-views/src/test/groovy/groowt/view/web/DefaultWebComponentTemplateCompilerTests.java b/web-views/src/test/groovy/groowt/view/web/DefaultWebComponentTemplateCompilerTests.java index f3fa965..11626c0 100644 --- a/web-views/src/test/groovy/groowt/view/web/DefaultWebComponentTemplateCompilerTests.java +++ b/web-views/src/test/groovy/groowt/view/web/DefaultWebComponentTemplateCompilerTests.java @@ -1,11 +1,14 @@ package groowt.view.web; +import groovy.lang.Closure; import groowt.view.component.*; +import groowt.view.web.runtime.WebViewComponentWriter; import org.codehaus.groovy.control.CompilerConfiguration; import org.junit.jupiter.api.Test; import java.io.Reader; import java.io.StringReader; +import java.io.StringWriter; import java.util.Map; import java.util.Objects; @@ -68,4 +71,28 @@ public class DefaultWebComponentTemplateCompilerTests { assertEquals("Hello, World!", usingGreeter.render()); } + @Test + public void withPreambleImport() { + final ComponentTemplate template = doCompile(DefaultWebViewComponent.class, + """ + --- + import groovy.transform.Field + + @Field + String greeting = 'Hello, World!' + --- + $greeting + """.stripIndent() + ); + final var context = new DefaultComponentContext(); + context.pushDefaultScope(); + + final var sw = new StringWriter(); + final var out = new WebViewComponentWriter(sw); + final Closure renderer = template.getRenderer(); + renderer.call(context, out); + + assertEquals("Hello, World!", sw.toString()); + } + } diff --git a/web-views/src/testFixtures/java/groowt/view/web/transpiler/TranspilerTestsUtil.java b/web-views/src/testFixtures/java/groowt/view/web/transpiler/TranspilerTestsUtil.java deleted file mode 100644 index 348d91e..0000000 --- a/web-views/src/testFixtures/java/groowt/view/web/transpiler/TranspilerTestsUtil.java +++ /dev/null @@ -1,7 +0,0 @@ -package groowt.view.web.transpiler; - -public final class TranspilerTestsUtil { - - private TranspilerTestsUtil() {} - -}