From 3b4e14a367849263a33300e7517f5a741e6dca03 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Fri, 9 Jan 2026 19:42:01 +0000 Subject: [PATCH 1/9] Refactor weaver classes to pass WeaverEngine instance and remove thread-local weaver references --- .../weaver/defaultweaver/DefaultWeaver.java | 6 +- .../defaultweaver/joinpoints/DWFile.java | 5 +- .../defaultweaver/joinpoints/DWFolder.java | 6 +- .../defaultweaver/joinpoints/DWFunction.java | 4 +- .../defaultweaver/joinpoints/DWorkspace.java | 6 +- LARAI/src/larai/LaraI.java | 4 +- .../lara/interpreter/cli/OptionsParser.java | 15 ++--- .../lara/interpreter/utils/LaraIUtils.java | 6 +- .../lara/benchmark/BenchmarkInstance.ts | 7 +- Lara-JS/src-api/weaver/Ast.ts | 67 ------------------- Lara-JS/src-api/weaver/Weaver.ts | 47 +------------ Lara-JS/src-code/Weaver.ts | 3 +- .../AbstractJoinPointClassGenerator.java | 35 ++++++++-- .../SuperAbstractJoinPointGenerator.java | 30 +++------ .../helpers/UserAbstractJPClassGenerator.java | 35 ++++++++++ .../interpreter/weaver/interf/JoinPoint.java | 7 +- .../weaver/interf/WeaverEngine.java | 34 ---------- 17 files changed, 117 insertions(+), 200 deletions(-) delete mode 100644 Lara-JS/src-api/weaver/Ast.ts diff --git a/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/DefaultWeaver.java b/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/DefaultWeaver.java index 16d443411..95f646869 100644 --- a/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/DefaultWeaver.java +++ b/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/DefaultWeaver.java @@ -60,7 +60,7 @@ public DefaultWeaver() { public boolean begin(List sources, File output, DataStore args) { this.args = args; - root = new DWorkspace(); + root = new DWorkspace(this); for (File source : sources) { if (source.isDirectory()) { root.addFolder(source); @@ -140,10 +140,6 @@ public String getName() { return "LaraI"; } - public static DefaultWeaver getDefaultWeaver() { - return (DefaultWeaver) getThreadLocalWeaver(); - } - public DataStore getArgs() { return args; } diff --git a/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/joinpoints/DWFile.java b/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/joinpoints/DWFile.java index 25c37b51b..99e37bd98 100644 --- a/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/joinpoints/DWFile.java +++ b/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/joinpoints/DWFile.java @@ -13,13 +13,16 @@ package org.lara.interpreter.weaver.defaultweaver.joinpoints; import java.io.File; + +import org.lara.interpreter.weaver.defaultweaver.DefaultWeaver; import org.lara.interpreter.weaver.defaultweaver.abstracts.joinpoints.AFile; public class DWFile extends AFile { private final File file; - public DWFile(File f) { + public DWFile(File f, DefaultWeaver weaver) { + super(weaver); file = f; } diff --git a/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/joinpoints/DWFolder.java b/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/joinpoints/DWFolder.java index 896a3fdbf..c721e69da 100644 --- a/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/joinpoints/DWFolder.java +++ b/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/joinpoints/DWFolder.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.List; +import org.lara.interpreter.weaver.defaultweaver.DefaultWeaver; import org.lara.interpreter.weaver.defaultweaver.abstracts.joinpoints.AFolder; public class DWFolder extends AFolder { @@ -24,7 +25,8 @@ public class DWFolder extends AFolder { private final List files; private final String path; - public DWFolder(File source) { + public DWFolder(File source, DefaultWeaver weaver) { + super(weaver); path = source.getAbsolutePath(); files = new ArrayList<>(); createFiles(source); @@ -36,7 +38,7 @@ public void createFiles(File folder) { if (f.isDirectory() && getFilesRecursively) { createFiles(f); } else if (f.getName().endsWith(".c")) { - files.add(new DWFile(f)); + files.add(new DWFile(f, getWeaverEngine())); } } } diff --git a/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/joinpoints/DWFunction.java b/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/joinpoints/DWFunction.java index e4f282d22..c4aa0c76e 100644 --- a/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/joinpoints/DWFunction.java +++ b/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/joinpoints/DWFunction.java @@ -12,6 +12,7 @@ */ package org.lara.interpreter.weaver.defaultweaver.joinpoints; +import org.lara.interpreter.weaver.defaultweaver.DefaultWeaver; import org.lara.interpreter.weaver.defaultweaver.abstracts.joinpoints.AFunction; import org.lara.interpreter.weaver.interf.JoinPoint; @@ -19,7 +20,8 @@ public class DWFunction extends AFunction { private final String name; - public DWFunction(String element) { + public DWFunction(String element, DefaultWeaver weaver) { + super(weaver); name = element; } diff --git a/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/joinpoints/DWorkspace.java b/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/joinpoints/DWorkspace.java index fa70bc460..632c72410 100644 --- a/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/joinpoints/DWorkspace.java +++ b/DefaultWeaver/src/org/lara/interpreter/weaver/defaultweaver/joinpoints/DWorkspace.java @@ -20,6 +20,7 @@ import java.util.HashMap; import java.util.Map; +import org.lara.interpreter.weaver.defaultweaver.DefaultWeaver; import org.lara.interpreter.weaver.defaultweaver.abstracts.joinpoints.AWorkspace; import pt.up.fe.specs.util.SpecsIo; @@ -32,14 +33,15 @@ public class DWorkspace extends AWorkspace { private final Map folders; - public DWorkspace() { + public DWorkspace(DefaultWeaver weaver) { + super(weaver); folders = new HashMap<>(); } public void addFolder(File dir) { File canonicalFile = SpecsIo.getCanonicalFile(dir.getAbsoluteFile()); if (!folders.containsKey(canonicalFile)) { - folders.put(canonicalFile, new DWFolder(canonicalFile)); + folders.put(canonicalFile, new DWFolder(canonicalFile, getWeaverEngine())); } } diff --git a/LARAI/src/larai/LaraI.java b/LARAI/src/larai/LaraI.java index ee97ba003..969f352d7 100644 --- a/LARAI/src/larai/LaraI.java +++ b/LARAI/src/larai/LaraI.java @@ -58,7 +58,7 @@ public static Optional convertArgsToDataStore(Object[] objArgs, Weave Options finalOptions = getCliOptions(weaverEngine); - CommandLine cmd = OptionsParser.parse(args, finalOptions); + CommandLine cmd = OptionsParser.parse(args, finalOptions, weaverEngine); ExecutionMode mode = OptionsParser.getExecMode(args[0], cmd, finalOptions); @@ -69,7 +69,7 @@ public static Optional convertArgsToDataStore(Object[] objArgs, Weave // If help, print help var helpFlag = dataStore.map(data -> data.get(LaraiKeys.SHOW_HELP)).orElse(false); if (helpFlag) { - LaraIUtils.printHelp(cmd, finalOptions); + LaraIUtils.printHelp(cmd, finalOptions, weaverEngine); } return dataStore; diff --git a/LARAI/src/org/lara/interpreter/cli/OptionsParser.java b/LARAI/src/org/lara/interpreter/cli/OptionsParser.java index 86d6e948b..ddb725677 100644 --- a/LARAI/src/org/lara/interpreter/cli/OptionsParser.java +++ b/LARAI/src/org/lara/interpreter/cli/OptionsParser.java @@ -78,10 +78,10 @@ public static Collection