From 2f58f18253eec847c3f8d548156bd77cd6663cd6 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Thu, 8 Jan 2026 23:13:36 +0000 Subject: [PATCH 1/6] Refactor Metafor to remove dependency on THREAD_LOCAL_WEAVER --- .../fortran/weaver/FortranJoinpoints.java | 22 +++++++++---------- .../specs/fortran/weaver/FortranWeaver.java | 10 +-------- .../abstracts/AFortranWeaverJoinPoint.java | 17 +++++++++++++- .../fortran/weaver/joinpoints/FProgram.java | 5 ++++- .../joinpoints/GenericFortranJoinpoint.java | 4 +++- 5 files changed, 35 insertions(+), 23 deletions(-) diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/FortranJoinpoints.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/FortranJoinpoints.java index 8ecd7a7a..9553173f 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/FortranJoinpoints.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/FortranJoinpoints.java @@ -41,16 +41,16 @@ import pt.up.fe.specs.fortran.weaver.joinpoints.*; import pt.up.fe.specs.util.SpecsCollections; import pt.up.fe.specs.util.SpecsLogs; -import pt.up.fe.specs.util.classmap.FunctionClassMap; +import pt.up.fe.specs.util.classmap.BiFunctionClassMap; import java.util.List; public class FortranJoinpoints { - private static final FunctionClassMap JOINPOINT_FACTORY; + private static final BiFunctionClassMap JOINPOINT_FACTORY; static { - JOINPOINT_FACTORY = new FunctionClassMap<>(); + JOINPOINT_FACTORY = new BiFunctionClassMap<>(); JOINPOINT_FACTORY.put(Application.class, FProgram::new); JOINPOINT_FACTORY.put(FortranFile.class, FFile::new); @@ -108,31 +108,31 @@ public class FortranJoinpoints { } - private static AFortranWeaverJoinPoint defaultFactory(FortranNode node) { + private static AFortranWeaverJoinPoint defaultFactory(FortranNode node, FortranWeaver weaver) { SpecsLogs.debug(() -> "Factory not defined for nodes of class '" + node.getClass().getSimpleName() + "'"); - return new GenericFortranJoinpoint(node); + return new GenericFortranJoinpoint(node, weaver); } - public static AFortranWeaverJoinPoint create(FortranNode node) { + public static AFortranWeaverJoinPoint create(FortranNode node, FortranWeaver weaver) { if (node == null) { SpecsLogs.debug("CxxJoinpoints: tried to create join point from null node, returning undefined"); return null; } - return JOINPOINT_FACTORY.apply(node); + return JOINPOINT_FACTORY.apply(node, weaver); } - public static T create(FortranNode node, Class targetClass) { + public static T create(FortranNode node, FortranWeaver weaver, Class targetClass) { if (targetClass == null) { throw new RuntimeException("Check if you meant to call 'create' with a single argument"); } - return targetClass.cast(create(node)); + return targetClass.cast(create(node, weaver)); } - public static T[] create(List nodes, Class targetClass) { + public static T[] create(List nodes, FortranWeaver weaver, Class targetClass) { return nodes.stream() - .map(node -> create(node, targetClass)) + .map(node -> create(node, weaver, targetClass)) .toArray(size -> SpecsCollections.newArray(targetClass, size)); } } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/FortranWeaver.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/FortranWeaver.java index a2e2702a..9544141c 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/FortranWeaver.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/FortranWeaver.java @@ -3,7 +3,6 @@ import org.lara.interpreter.joptions.config.interpreter.LaraiKeys; import org.lara.interpreter.weaver.interf.AGear; import org.lara.interpreter.weaver.interf.JoinPoint; -import org.lara.interpreter.weaver.interf.WeaverEngine; import org.lara.interpreter.weaver.options.WeaverOption; import org.lara.interpreter.weaver.options.WeaverOptionUtils; import org.lara.interpreter.weaver.utils.SourcesGatherer; @@ -86,7 +85,7 @@ public boolean begin(List sources, File outputDir, DataStore args) { */ @Override public JoinPoint getRootJp() { - return FortranJoinpoints.create(currentRoot); + return FortranJoinpoints.create(currentRoot, this); } /** @@ -146,13 +145,6 @@ public List getOptions() { return WeaverOptionUtils.toWeaverOption(FortranAstOptions.STORE_DEFINITION); } - /** - * Returns thread-local instance of weaver engine. - */ - public static FortranWeaver getFortranWeaver() { - return (FortranWeaver) WeaverEngine.getThreadLocalWeaver(); - } - /** * Builds the language specification, based on the input XML files. * diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/abstracts/AFortranWeaverJoinPoint.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/abstracts/AFortranWeaverJoinPoint.java index 8bf83021..5822ad83 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/abstracts/AFortranWeaverJoinPoint.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/abstracts/AFortranWeaverJoinPoint.java @@ -4,6 +4,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.utils.Position; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AJoinPoint; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AProgram; import pt.up.fe.specs.util.SpecsLogs; @@ -22,6 +23,20 @@ */ public abstract class AFortranWeaverJoinPoint extends AJoinPoint { + /** + * + */ + public AFortranWeaverJoinPoint(FortranWeaver weaver){ + super(weaver); + } + /** + * Returns the Weaving Engine this join point pertains to. + */ + @Override + public FortranWeaver getWeaverEngine() { + return (FortranWeaver) super.getWeaverEngine(); + } + /** * Compares the two join points based on their node reference of the used compiler/parsing tool.
* This is the default implementation for comparing two join points.
@@ -40,7 +55,7 @@ public String getCodeImpl() { @Override public AJoinPoint getParentImpl() { - return FortranJoinpoints.create(getNode().getParent()); + return FortranJoinpoints.create(getNode().getParent(), getWeaverEngine()); } @Override diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FProgram.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FProgram.java index 9369c217..3ac946f8 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FProgram.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FProgram.java @@ -2,13 +2,16 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.program.Application; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; +import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AJoinPoint; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AProgram; public class FProgram extends AProgram { private final Application app; - public FProgram(Application app) { + public FProgram(Application app, FortranWeaver weaver) { + super(weaver); this.app = app; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/GenericFortranJoinpoint.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/GenericFortranJoinpoint.java index fbc784f7..a100f498 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/GenericFortranJoinpoint.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/GenericFortranJoinpoint.java @@ -2,6 +2,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.AFortranWeaverJoinPoint; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AJoinPoint; @@ -9,7 +10,8 @@ public class GenericFortranJoinpoint extends AFortranWeaverJoinPoint { private final FortranNode node; - public GenericFortranJoinpoint(FortranNode node) { + public GenericFortranJoinpoint(FortranNode node, FortranWeaver weaver) { + super(weaver); this.node = node; } From 1260d7df430d1adfea74f9a6a354e6384644a8ba Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Sun, 11 Jan 2026 21:58:21 +0000 Subject: [PATCH 2/6] Fix CI workflows and linter config --- .github/workflows/copilot-setup-steps.yml | 119 ++++++++++++++++++++++ .github/workflows/nightly.yml | 92 ++++++++++++----- Fortran-JS/eslint.config.js | 8 +- 3 files changed, 189 insertions(+), 30 deletions(-) create mode 100644 .github/workflows/copilot-setup-steps.yml diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml new file mode 100644 index 00000000..c5a6bf02 --- /dev/null +++ b/.github/workflows/copilot-setup-steps.yml @@ -0,0 +1,119 @@ +name: "Copilot Setup Steps" + +# Automatically run the setup steps when they are changed +# Allows for streamlined validation, +# and allow manual testing through the repository's "Actions" tab + +on: + workflow_dispatch: + push: + paths: + - .github/workflows/copilot-setup-steps.yml + pull_request: + paths: + - .github/workflows/copilot-setup-steps.yml + +env: + BRANCH_NAME: ${{ github.head_ref || github.ref_name }} + +jobs: + # The job MUST be called `copilot-setup-steps` + # otherwise it will not be picked up by Copilot. + copilot-setup-steps: + runs-on: ubuntu-latest + + # Permissions set just for the setup steps + # Copilot has permissions to its branch + + permissions: + # To allow us to clone the repo for setup + contents: read + + # The setup steps - install our dependencies + steps: + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '21' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + with: + gradle-version: current + + - name: Checkout Metafor + uses: actions/checkout@v6 + with: + path: metafor + + - name: Determine repository refs + id: repo-refs + shell: bash + env: + BRANCH_NAME: ${{ env.BRANCH_NAME }} + BASE_BRANCH: ${{ github.base_ref }} + run: | + set -euo pipefail + + # For each dependency repository, determine which branch to checkout. + # Priority order: + # 1. A branch with the same name as the current branch + # 2. If this is a PR, the target branch (base_ref) + # 3. The default branch of the repository + + determine_ref() { + local prefix=$1 + local repo=$2 + local url="https://github.com/${repo}.git" + + # Get the default branch + local default_branch + default_branch=$(git ls-remote --symref "$url" HEAD | awk '/^ref:/ {print $2}' | sed 's@refs/heads/@@') + echo "${prefix}_default=${default_branch}" >> "$GITHUB_OUTPUT" + echo "Default branch for ${repo} is '${default_branch}'" + + local ref_to_use="" + + # Priority 1: Same branch name + if [ -n "$(git ls-remote --heads "$url" "refs/heads/${BRANCH_NAME}")" ]; then + ref_to_use="${BRANCH_NAME}" + echo "Using matching branch '${BRANCH_NAME}' in ${repo}" + # Priority 2: PR target branch (if this is a PR) + elif [ -n "${BASE_BRANCH}" ] && [ -n "$(git ls-remote --heads "$url" "refs/heads/${BASE_BRANCH}")" ]; then + ref_to_use="${BASE_BRANCH}" + echo "Using PR target branch '${BASE_BRANCH}' in ${repo}" + # Priority 3: Default branch + else + ref_to_use="${default_branch}" + echo "Using default branch '${default_branch}' for ${repo}" + fi + + echo "${prefix}_ref=${ref_to_use}" >> "$GITHUB_OUTPUT" + } + + determine_ref "lara" "specs-feup/lara-framework" + determine_ref "specs" "specs-feup/specs-java-libs" + + - name: Echo checks + run: | + echo "Clava branch: ${{ env.BRANCH_NAME }}" + echo "PR target branch (if any): ${{ github.base_ref }}" + echo "Lara framework ref: ${{ steps.repo-refs.outputs.lara_ref }}" + echo "Lara framework default: ${{ steps.repo-refs.outputs.lara_default }}" + echo "Specs-java-libs ref: ${{ steps.repo-refs.outputs.specs_ref }}" + echo "Specs-java-libs default: ${{ steps.repo-refs.outputs.specs_default }}" + + - name: Checkout lara-framework + uses: actions/checkout@v6 + with: + repository: specs-feup/lara-framework + path: lara-framework + ref: ${{ steps.repo-refs.outputs.lara_ref }} + + - name: Checkout specs-java-libs + uses: actions/checkout@v6 + with: + repository: specs-feup/specs-java-libs + path: specs-java-libs + ref: ${{ steps.repo-refs.outputs.specs_ref }} diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index f17bf60c..9ede322d 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -27,11 +27,6 @@ permissions: env: JAVA_VERSION: 21 BRANCH_NAME: ${{ github.head_ref || github.ref_name }} - # Setting default branch to staging assuming PRs will be done against the staging versions of the repository - # main versions will just receive what comes from the staging - DEFAULT_BRANCH: ${{ github.base_ref || 'staging' }} - #SPECS_JAVA_LIBS_BRANCH: ${{ 'master' }} - #LARA_FRAMEWORK_BRANCH: ${{ github.head_ref || github.ref_name }} jobs: build-java: @@ -39,8 +34,8 @@ jobs: runs-on: ubuntu-26.04 outputs: - branch-exists-lara-framework: ${{ steps.Branch-lara-framework.outputs.value }} - branch-exists-specs-java-libs: ${{ steps.Branch-specs-java-libs.outputs.value }} + lara_ref: ${{ steps.repo-refs.outputs.lara_ref }} + specs_ref: ${{ steps.repo-refs.outputs.specs_ref }} steps: - name: Setup Java @@ -56,42 +51,83 @@ jobs: dependency-graph: generate-and-submit - name: Checkout Metafor - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: path: metafor - - name: Check if branch exists on lara-framework - id: Branch-lara-framework - run: echo "value=$(git ls-remote --heads https://github.com/specs-feup/lara-framework.git refs/heads/${{ env.BRANCH_NAME }} | wc -l)" >> $GITHUB_OUTPUT - - - name: Check if branch exists on specs-java-libs - id: Branch-specs-java-libs - run: echo "value=$(git ls-remote --heads https://github.com/specs-feup/specs-java-libs.git refs/heads/${{ env.BRANCH_NAME }} | wc -l)" >> $GITHUB_OUTPUT + - name: Determine repository refs + id: repo-refs + shell: bash + env: + BRANCH_NAME: ${{ env.BRANCH_NAME }} + BASE_BRANCH: ${{ github.base_ref }} + run: | + set -euo pipefail + + # For each dependency repository, determine which branch to checkout. + # Priority order: + # 1. A branch with the same name as the current branch + # 2. If this is a PR, the target branch (base_ref) + # 3. The default branch of the repository + + determine_ref() { + local prefix=$1 + local repo=$2 + local url="https://github.com/${repo}.git" + + # Get the default branch + local default_branch + default_branch=$(git ls-remote --symref "$url" HEAD | awk '/^ref:/ {print $2}' | sed 's@refs/heads/@@') + echo "${prefix}_default=${default_branch}" >> "$GITHUB_OUTPUT" + echo "Default branch for ${repo} is '${default_branch}'" + + local ref_to_use="" + + # Priority 1: Same branch name + if [ -n "$(git ls-remote --heads "$url" "refs/heads/${BRANCH_NAME}")" ]; then + ref_to_use="${BRANCH_NAME}" + echo "Using matching branch '${BRANCH_NAME}' in ${repo}" + # Priority 2: PR target branch (if this is a PR) + elif [ -n "${BASE_BRANCH}" ] && [ -n "$(git ls-remote --heads "$url" "refs/heads/${BASE_BRANCH}")" ]; then + ref_to_use="${BASE_BRANCH}" + echo "Using PR target branch '${BASE_BRANCH}' in ${repo}" + # Priority 3: Default branch + else + ref_to_use="${default_branch}" + echo "Using default branch '${default_branch}' for ${repo}" + fi + + echo "${prefix}_ref=${ref_to_use}" >> "$GITHUB_OUTPUT" + } + + determine_ref "lara" "specs-feup/lara-framework" + determine_ref "specs" "specs-feup/specs-java-libs" - name: Echo checks run: | - echo "Branch-lara-framework: ${{ steps.Branch-lara-framework.outputs.value }}" - echo "Branch-specs-java-libs: ${{ steps.Branch-specs-java-libs.outputs.value }}" - echo "Branch name: ${{ env.BRANCH_NAME }}" - echo "Default branch: ${{ env.DEFAULT_BRANCH }}" - echo "Branch base_ref: ${{ github.base_ref }}" + echo "Weaver branch: ${{ env.BRANCH_NAME }}" + echo "PR target branch (if any): ${{ github.base_ref }}" + echo "Lara framework ref: ${{ steps.repo-refs.outputs.lara_ref }}" + echo "Lara framework default: ${{ steps.repo-refs.outputs.lara_default }}" + echo "Specs-java-libs ref: ${{ steps.repo-refs.outputs.specs_ref }}" + echo "Specs-java-libs default: ${{ steps.repo-refs.outputs.specs_default }}" - name: Checkout lara-framework - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: specs-feup/lara-framework path: lara-framework - ref: ${{ steps.Branch-lara-framework.outputs.value == '1' && env.BRANCH_NAME || 'master' }} + ref: ${{ steps.repo-refs.outputs.lara_ref }} - name: Checkout specs-java-libs - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: specs-feup/specs-java-libs path: specs-java-libs - ref: ${{ steps.Branch-specs-java-libs.outputs.value == '1' && env.BRANCH_NAME || 'master' }} + ref: ${{ steps.repo-refs.outputs.specs_ref }} - name: Checkout flang dumper, to install flang - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: specs-feup/flang-dumper path: flang-dumper @@ -161,16 +197,16 @@ jobs: registry-url: 'https://registry.npmjs.org/' - name: Checkout Metafor - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: path: metafor - name: Checkout lara-framework - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: specs-feup/lara-framework path: lara-framework - ref: ${{ needs.build-java.outputs.branch-exists-lara-framework == '1' && env.BRANCH_NAME || env.DEFAULT_BRANCH }} + ref: ${{ needs.build-java.outputs.lara_ref }} - name: Setup js workspace run: | diff --git a/Fortran-JS/eslint.config.js b/Fortran-JS/eslint.config.js index 2ad231fb..2273574c 100644 --- a/Fortran-JS/eslint.config.js +++ b/Fortran-JS/eslint.config.js @@ -1,9 +1,14 @@ +import { fileURLToPath } from "url"; +import { dirname } from "path"; import typescriptEslint from "typescript-eslint"; import tsdoc from "eslint-plugin-tsdoc"; import jest from "eslint-plugin-jest"; import js from "@eslint/js"; import eslintConfigPrettier from "eslint-config-prettier"; +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + export default [ js.configs.recommended, eslintConfigPrettier, @@ -18,14 +23,13 @@ export default [ }, languageOptions: { - tsconfigRootDir: __dirname, - parser: typescriptEslint.parser, ecmaVersion: 5, sourceType: "script", parserOptions: { project: ["./*/tsconfig.json", "./tsconfig.*.json"], + tsconfigRootDir: __dirname, }, }, From 0b3cba2cc8a6fb3f1a1ae8a83ba311abb463b357 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Sun, 11 Jan 2026 23:33:57 +0000 Subject: [PATCH 3/6] Update package version and dependencies in package.json --- Fortran-JS/package.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Fortran-JS/package.json b/Fortran-JS/package.json index 1d345711..c6832179 100644 --- a/Fortran-JS/package.json +++ b/Fortran-JS/package.json @@ -57,21 +57,21 @@ "@specs-feup/lara": "~3.5.0" }, "devDependencies": { - "@jest/globals": "^29.7.0", + "@jest/globals": "^30.2.0", "@types/debug": "^4.1.12", "@types/java": "^0.9.6", - "@types/jest": "^29.5.14", + "@types/jest": "^30.0.0", "@types/node": "^20.19.41", - "@types/yargs": "^17.0.33", - "cross-env": "^7.0.3", - "eslint": "^9.22.0", - "eslint-config-prettier": "^10.1.1", - "eslint-plugin-jest": "^28.11.0", - "eslint-plugin-tsdoc": "^0.4.0", - "jest": "^29.7.0", + "@types/yargs": "^17.0.35", + "cross-env": "^10.1.0", + "eslint": "^9.39.2", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jest": "^29.12.1", + "eslint-plugin-tsdoc": "^0.5.0", + "jest": "^30.2.0", "node-notifier": "^10.0.1", - "ts-jest": "^29.2.6", - "typescript": "^5.8.2", - "typescript-eslint": "^8.26.1" + "ts-jest": "^29.4.6", + "typescript": "^5.9.3", + "typescript-eslint": "^8.52.0" } } From c3fc453c3f3bd9d333d1f64e85213d9869883408 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Sun, 18 Jan 2026 23:36:36 +0000 Subject: [PATCH 4/6] Update FFile constructor to include FortranWeaver --- .../fortran/weaver/abstracts/AFortranWeaverJoinPoint.java | 2 +- .../src/pt/up/fe/specs/fortran/weaver/joinpoints/FFile.java | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/abstracts/AFortranWeaverJoinPoint.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/abstracts/AFortranWeaverJoinPoint.java index 5822ad83..3e2d0e22 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/abstracts/AFortranWeaverJoinPoint.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/abstracts/AFortranWeaverJoinPoint.java @@ -65,7 +65,7 @@ public AProgram getRootImpl() { @Override public AJoinPoint[] getChildrenArrayImpl() { - return FortranJoinpoints.create(getNode().getChildren(), AJoinPoint.class); + return FortranJoinpoints.create(getNode().getChildren(), getWeaverEngine(), AJoinPoint.class); } @Override diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FFile.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FFile.java index 7865d9f7..b43b3422 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FFile.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FFile.java @@ -2,13 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.program.FortranFile; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AFile; public class FFile extends AFile { private final FortranFile file; - public FFile(FortranFile file) { + public FFile(FortranFile file, FortranWeaver weaver) { + super(weaver); this.file = file; } From 4a5860c833f606788b630b9d71bf34e86f57ceec Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Mon, 19 Jan 2026 00:14:05 +0000 Subject: [PATCH 5/6] Update echo statement in copilot setup to reflect 'Weaver branch' --- .github/workflows/copilot-setup-steps.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index c5a6bf02..3745b261 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -97,7 +97,7 @@ jobs: - name: Echo checks run: | - echo "Clava branch: ${{ env.BRANCH_NAME }}" + echo "Weaver branch: ${{ env.BRANCH_NAME }}" echo "PR target branch (if any): ${{ github.base_ref }}" echo "Lara framework ref: ${{ steps.repo-refs.outputs.lara_ref }}" echo "Lara framework default: ${{ steps.repo-refs.outputs.lara_default }}" From e3061cdc043101fdbe645b908fab61101b5a6df6 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Mon, 7 Sep 2026 19:53:14 +0100 Subject: [PATCH 6/6] Fix multi-weaver compilation after rebase onto main Main's rebased code still used the removed static weaver accessors and 1-arg FortranJoinpoints.create. Thread the FortranWeaver instance through instead of restoring static/THREAD_LOCAL access: - FortranWeaver: make getFactory()/getContext() instance methods (getContext() referenced the removed getFortranWeaver() static) - AstFactory: take FortranWeaver as first parameter (same shape as the lara-4 branch), call weaver.getFactory() and 3-arg FortranJoinpoints.create(node, weaver, targetClass) - AFortranWeaverJoinPoint: thread getWeaverEngine() into the remaining main-era create() call sites and replace ::create method refs with weaver-capturing lambdas - joinpoints/F*: all concrete joinpoints from main now take (node, FortranWeaver) constructors with super(weaver) (or super(new FWrapper(node, weaver), weaver)); child-collection methods thread getWeaverEngine() into create() Also pin GitHub Actions to full commit SHAs in copilot-setup-steps.yml (Sonar S7637). Verified with: gradle -p FortranWeaver compileJava (BUILD SUCCESSFUL, JDK 17, lara-framework/specs-java-libs multi-weaver/master checkouts) --- .github/workflows/copilot-setup-steps.yml | 10 +- .../specs/fortran/weaver/FortranWeaver.java | 6 +- .../abstracts/AFortranWeaverJoinPoint.java | 24 ++-- .../fortran/weaver/importable/AstFactory.java | 80 +++++++------- .../weaver/joinpoints/FActionStatement.java | 5 +- .../joinpoints/FArraySubscriptExpr.java | 9 +- .../joinpoints/FAssignmentStatement.java | 9 +- .../joinpoints/FAttributeSpecifier.java | 4 +- .../weaver/joinpoints/FBinaryOperator.java | 9 +- .../weaver/joinpoints/FCompilerDirective.java | 7 +- .../fortran/weaver/joinpoints/FDataRef.java | 5 +- .../weaver/joinpoints/FDesignator.java | 5 +- .../weaver/joinpoints/FDoConstruct.java | 11 +- .../fortran/weaver/joinpoints/FElseBlock.java | 6 +- .../weaver/joinpoints/FElseIfBlock.java | 8 +- .../weaver/joinpoints/FElseIfStatement.java | 6 +- .../weaver/joinpoints/FEntityDecl.java | 5 +- .../joinpoints/FExecutableStatement.java | 5 +- .../fortran/weaver/joinpoints/FExecution.java | 7 +- .../fortran/weaver/joinpoints/FExpr.java | 4 +- .../joinpoints/FExprInitialization.java | 7 +- .../weaver/joinpoints/FFortranDecl.java | 4 +- .../weaver/joinpoints/FIfConstruct.java | 11 +- .../weaver/joinpoints/FIfStatement.java | 9 +- .../weaver/joinpoints/FIfThenBlock.java | 8 +- .../weaver/joinpoints/FIfThenStatement.java | 6 +- .../weaver/joinpoints/FInitialization.java | 4 +- .../weaver/joinpoints/FIntLiteral.java | 5 +- .../FKeywordAttributeSpecifier.java | 5 +- .../fortran/weaver/joinpoints/FLiteral.java | 5 +- .../weaver/joinpoints/FLoopControl.java | 4 +- .../weaver/joinpoints/FMainProgram.java | 5 +- .../fortran/weaver/joinpoints/FNameValue.java | 4 +- .../weaver/joinpoints/FOmpBlockConstruct.java | 5 +- .../fortran/weaver/joinpoints/FOmpClause.java | 4 +- .../weaver/joinpoints/FOmpConstruct.java | 103 +++++++++--------- .../joinpoints/FOmpDataSharingClause.java | 5 +- .../weaver/joinpoints/FOmpLoopConstruct.java | 55 +++++----- .../weaver/joinpoints/FOmpOrderedClause.java | 5 +- .../joinpoints/FOmpReductionClause.java | 5 +- .../weaver/joinpoints/FParameterKeyword.java | 5 +- .../weaver/joinpoints/FProgramUnit.java | 6 +- .../weaver/joinpoints/FRangeLoopControl.java | 13 ++- .../weaver/joinpoints/FRealLiteral.java | 5 +- .../weaver/joinpoints/FSectionSubscript.java | 4 +- .../weaver/joinpoints/FSpecification.java | 7 +- .../joinpoints/FSpecificationStatement.java | 5 +- .../fortran/weaver/joinpoints/FStatement.java | 4 +- .../weaver/joinpoints/FStatementBlock.java | 6 +- .../weaver/joinpoints/FStringLiteral.java | 5 +- .../weaver/joinpoints/FSubroutine.java | 5 +- .../fortran/weaver/joinpoints/FSubscript.java | 7 +- .../joinpoints/FTypeDeclarationStatement.java | 9 +- .../weaver/joinpoints/FUseStatement.java | 5 +- 54 files changed, 320 insertions(+), 250 deletions(-) diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index 3745b261..63b91c9a 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -32,18 +32,18 @@ jobs: # The setup steps - install our dependencies steps: - name: Setup Java - uses: actions/setup-java@v4 + uses: actions/setup-java@cf277c60eb25467037889841efdb72551f06f6c3 # v4 with: distribution: 'temurin' java-version: '21' - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 + uses: gradle/actions/setup-gradle@da187c8e6ffbd3802e00f2477aa5a822b25f2dda # v4.4.4 with: gradle-version: current - name: Checkout Metafor - uses: actions/checkout@v6 + uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 with: path: metafor @@ -105,14 +105,14 @@ jobs: echo "Specs-java-libs default: ${{ steps.repo-refs.outputs.specs_default }}" - name: Checkout lara-framework - uses: actions/checkout@v6 + uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 with: repository: specs-feup/lara-framework path: lara-framework ref: ${{ steps.repo-refs.outputs.lara_ref }} - name: Checkout specs-java-libs - uses: actions/checkout@v6 + uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 with: repository: specs-feup/specs-java-libs path: specs-java-libs diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/FortranWeaver.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/FortranWeaver.java index 9544141c..93ced03e 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/FortranWeaver.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/FortranWeaver.java @@ -166,11 +166,11 @@ protected LanguageSpecification buildLangSpecs() { return buildLanguageSpecification(); } - public static FortranNodeFactory getFactory() { + public FortranNodeFactory getFactory() { return getContext().get(FortranContext.FACTORY); } - public static FortranContext getContext() { - return getFortranWeaver().currentRoot.get(FortranNode.CONTEXT); + public FortranContext getContext() { + return currentRoot.get(FortranNode.CONTEXT); } } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/abstracts/AFortranWeaverJoinPoint.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/abstracts/AFortranWeaverJoinPoint.java index 3e2d0e22..87ec7773 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/abstracts/AFortranWeaverJoinPoint.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/abstracts/AFortranWeaverJoinPoint.java @@ -70,7 +70,7 @@ public AJoinPoint[] getChildrenArrayImpl() { @Override public AJoinPoint[] getDescendantsArrayImpl() { - return FortranJoinpoints.create(getNode().getDescendants(), AJoinPoint.class); + return FortranJoinpoints.create(getNode().getDescendants(), getWeaverEngine(), AJoinPoint.class); } @Override @@ -81,7 +81,7 @@ public AJoinPoint[] getScopeNodesArrayImpl() { @Override public Stream getJpChildrenStream() { return getNode().getChildrenStream() - .map(node -> FortranJoinpoints.create(node, AJoinPoint.class)); + .map(node -> FortranJoinpoints.create(node, getWeaverEngine(), AJoinPoint.class)); } @Override @@ -93,28 +93,28 @@ public JoinPoint getJpParent() { public AJoinPoint[] insertImpl(String position, JoinPoint joinPoint) { var insertedNode = getNode().insert(Position.valueOf(position.toUpperCase()), (FortranNode) joinPoint.getNode()); - return new AJoinPoint[]{FortranJoinpoints.create(insertedNode, AJoinPoint.class)}; + return new AJoinPoint[]{FortranJoinpoints.create(insertedNode, getWeaverEngine(), AJoinPoint.class)}; } @Override public AJoinPoint[] insertImpl(String position, String code) { var insertedNode = getNode().insert(Position.valueOf(position.toUpperCase()), code); - return new AJoinPoint[]{FortranJoinpoints.create(insertedNode, AJoinPoint.class)}; + return new AJoinPoint[]{FortranJoinpoints.create(insertedNode, getWeaverEngine(), AJoinPoint.class)}; } @Override public AJoinPoint insertAfterImpl(AJoinPoint node) { var insertedNode = getNode().insert(Position.AFTER, node.getNode()); - return FortranJoinpoints.create(insertedNode); + return FortranJoinpoints.create(insertedNode, getWeaverEngine()); } @Override public AJoinPoint insertBeforeImpl(AJoinPoint node) { var insertedNode = getNode().insert(Position.AFTER, node.getNode()); - return FortranJoinpoints.create(insertedNode); + return FortranJoinpoints.create(insertedNode, getWeaverEngine()); } @@ -124,7 +124,7 @@ public static FortranNode replace(FortranNode target, FortranNode newNode) { @Override public AJoinPoint replaceWithImpl(AJoinPoint node) { - return FortranJoinpoints.create(replace(getNode(), node.getNode())); + return FortranJoinpoints.create(replace(getNode(), node.getNode()), getWeaverEngine()); } @Override @@ -184,7 +184,7 @@ public AJoinPoint getAncestorImpl(String type) { FortranNode currentNode = getNode(); while (currentNode.hasParent()) { // Create join point for testing type - AFortranWeaverJoinPoint parentJp = FortranJoinpoints.create(currentNode.getParent()); + AFortranWeaverJoinPoint parentJp = FortranJoinpoints.create(currentNode.getParent(), getWeaverEngine()); if (parentJp.instanceOf(type)) { return parentJp; @@ -206,12 +206,12 @@ public Boolean containsImpl(AJoinPoint jp) { @Override public AJoinPoint getLeftJpImpl() { - return getNode().getLeft().map(FortranJoinpoints::create).orElse(null); + return getNode().getLeft().map(node -> FortranJoinpoints.create(node, getWeaverEngine())).orElse(null); } @Override public AJoinPoint getRightJpImpl() { - return getNode().getRight().map(FortranJoinpoints::create).orElse(null); + return getNode().getRight().map(node -> FortranJoinpoints.create(node, getWeaverEngine())).orElse(null); } @Override @@ -222,12 +222,12 @@ public Integer getIndexOfSelfImpl() { @Override public AJoinPoint copyImpl() { FortranNode copiedNode = getNode().copyShallow(); - return FortranJoinpoints.create(copiedNode); + return FortranJoinpoints.create(copiedNode, getWeaverEngine()); } @Override public AJoinPoint deepCopyImpl() { FortranNode copiedNode = getNode().copy(); - return FortranJoinpoints.create(copiedNode); + return FortranJoinpoints.create(copiedNode, getWeaverEngine()); } } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/importable/AstFactory.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/importable/AstFactory.java index f61fb901..888925e6 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/importable/AstFactory.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/importable/AstFactory.java @@ -18,7 +18,7 @@ import java.util.stream.Collectors; public class AstFactory { - public static AOmpLoopConstruct ompLoopConstruct(ADoStatement loop, Object[] args) { + public static AOmpLoopConstruct ompLoopConstruct(FortranWeaver weaver, ADoStatement loop, Object[] args) { List clauses = SpecsCollections.asListT(AOmpClause.class, args) .stream() .map(clause -> (OmpClause) clause.getNode()) @@ -26,35 +26,35 @@ public static AOmpLoopConstruct ompLoopConstruct(ADoStatement loop, Object[] arg var doConstruct = (DoConstruct) loop.getNode(); - return FortranJoinpoints.create(FortranWeaver.getFactory().ompLoopConstruct(doConstruct, clauses), AOmpLoopConstruct.class); + return FortranJoinpoints.create(weaver.getFactory().ompLoopConstruct(doConstruct, clauses), weaver, AOmpLoopConstruct.class); } - public static AOmpLoopConstruct emptyOmpLoopConstruct() { - return FortranJoinpoints.create(FortranWeaver.getFactory().emptyOmpLoopConstruct(), AOmpLoopConstruct.class); + public static AOmpLoopConstruct emptyOmpLoopConstruct(FortranWeaver weaver) { + return FortranJoinpoints.create(weaver.getFactory().emptyOmpLoopConstruct(), weaver, AOmpLoopConstruct.class); } - public static AOmpBlockConstruct emptyOmpBlockConstruct() { - return FortranJoinpoints.create(FortranWeaver.getFactory().emptyOmpBlockConstruct(), AOmpBlockConstruct.class); + public static AOmpBlockConstruct emptyOmpBlockConstruct(FortranWeaver weaver) { + return FortranJoinpoints.create(weaver.getFactory().emptyOmpBlockConstruct(), weaver, AOmpBlockConstruct.class); } - public static AOmpDataSharingClause ompPrivateClause(Object[] args) { + public static AOmpDataSharingClause ompPrivateClause(FortranWeaver weaver, Object[] args) { List dataRefs = SpecsCollections.asListT(ADataRef.class, args) .stream() .map(clause -> (DataRef) clause.getNode()) .toList(); - return FortranJoinpoints.create(FortranWeaver.getFactory().ompDataSharingClause(OmpClauseKind.PRIVATE, dataRefs), AOmpDataSharingClause.class); + return FortranJoinpoints.create(weaver.getFactory().ompDataSharingClause(OmpClauseKind.PRIVATE, dataRefs), weaver, AOmpDataSharingClause.class); } - public static ADataRef dataRef(String name) { - return FortranJoinpoints.create(FortranWeaver.getFactory().dataRef(name), ADataRef.class); + public static ADataRef dataRef(FortranWeaver weaver, String name) { + return FortranJoinpoints.create(weaver.getFactory().dataRef(name), weaver, ADataRef.class); } - public static AUseStatement useStatement(String moduleName) { - return FortranJoinpoints.create(FortranWeaver.getFactory().useStmt(moduleName), AUseStatement.class); + public static AUseStatement useStatement(FortranWeaver weaver, String moduleName) { + return FortranJoinpoints.create(weaver.getFactory().useStmt(moduleName), weaver, AUseStatement.class); } - public static AOmpReductionClause ompReductionClause(String operator, Object[] args) { + public static AOmpReductionClause ompReductionClause(FortranWeaver weaver, String operator, Object[] args) { List dataRefs = SpecsCollections.asListT(ADataRef.class, args) .stream() .map(clause -> (DataRef) clause.getNode()) @@ -62,76 +62,80 @@ public static AOmpReductionClause ompReductionClause(String operator, Object[] a BinaryOperatorKind kind = BinaryOperatorKind.valueOf(operator); - return FortranJoinpoints.create(FortranWeaver.getFactory().ompReductionClause(kind, dataRefs), AOmpReductionClause.class); + return FortranJoinpoints.create(weaver.getFactory().ompReductionClause(kind, dataRefs), weaver, AOmpReductionClause.class); } - public static AExecution execution(Object[] args) { + public static AExecution execution(FortranWeaver weaver, Object[] args) { List stmts = SpecsCollections.asListT(AExecutableStatement.class, args) .stream() .map(stmt -> (ExecutableStmt) stmt.getNode()) .toList(); - return FortranJoinpoints.create(FortranWeaver.getFactory().execution(stmts), AExecution.class); + return FortranJoinpoints.create(weaver.getFactory().execution(stmts), weaver, AExecution.class); } - public static AOmpOrderedClause ompOrderedClause(int value) { - return FortranJoinpoints.create(FortranWeaver.getFactory().ompOrderedClause(value), AOmpOrderedClause.class); + public static AOmpOrderedClause ompOrderedClause(FortranWeaver weaver, int value) { + return FortranJoinpoints.create(weaver.getFactory().ompOrderedClause(value), weaver, AOmpOrderedClause.class); } - public static AIntLiteral intLiteral(int value) { - return FortranJoinpoints.create(FortranWeaver.getFactory().intLiteral(value), AIntLiteral.class); + public static AIntLiteral intLiteral(FortranWeaver weaver, int value) { + return FortranJoinpoints.create(weaver.getFactory().intLiteral(value), weaver, AIntLiteral.class); } - public static ABinaryOperator binaryOperatorAdd(AExpr lhs, AExpr rhs) { - return binaryOperator(BinaryOperatorKind.ADD, lhs, rhs); + public static ABinaryOperator binaryOperatorAdd(FortranWeaver weaver, AExpr lhs, AExpr rhs) { + return binaryOperator(weaver, BinaryOperatorKind.ADD, lhs, rhs); } - public static ABinaryOperator binaryOperatorSubtract(AExpr lhs, AExpr rhs) { - return binaryOperator(BinaryOperatorKind.SUBTRACT, lhs, rhs); + public static ABinaryOperator binaryOperatorSubtract(FortranWeaver weaver, AExpr lhs, AExpr rhs) { + return binaryOperator(weaver, BinaryOperatorKind.SUBTRACT, lhs, rhs); } - public static ABinaryOperator binaryOperatorMultiply(AExpr lhs, AExpr rhs) { - return binaryOperator(BinaryOperatorKind.MULTIPLY, lhs, rhs); + public static ABinaryOperator binaryOperatorMultiply(FortranWeaver weaver, AExpr lhs, AExpr rhs) { + return binaryOperator(weaver, BinaryOperatorKind.MULTIPLY, lhs, rhs); } - public static ABinaryOperator binaryOperatorDivide(AExpr lhs, AExpr rhs) { - return binaryOperator(BinaryOperatorKind.DIVIDE, lhs, rhs); + public static ABinaryOperator binaryOperatorDivide(FortranWeaver weaver, AExpr lhs, AExpr rhs) { + return binaryOperator(weaver, BinaryOperatorKind.DIVIDE, lhs, rhs); } - public static ARangeLoopControl rangeLoopControl(ADataRef var, AExpr lower, AExpr upper) { + public static ARangeLoopControl rangeLoopControl(FortranWeaver weaver, ADataRef var, AExpr lower, AExpr upper) { DataRef varNode = (DataRef) var.getNode(); Expr lowerNode = (Expr) lower.getNode(); Expr upperNode = (Expr) upper.getNode(); return FortranJoinpoints.create( - FortranWeaver.getFactory().rangeLoopControl(varNode, lowerNode, upperNode), + weaver.getFactory().rangeLoopControl(varNode, lowerNode, upperNode), + weaver, ARangeLoopControl.class ); } - public static ADoStatement doStatement(ARangeLoopControl control) { + public static ADoStatement doStatement(FortranWeaver weaver, ARangeLoopControl control) { RangeLoopControl ctrl = (RangeLoopControl) control.getNode(); return FortranJoinpoints.create( - FortranWeaver.getFactory().doConstruct(ctrl), + weaver.getFactory().doConstruct(ctrl), + weaver, ADoStatement.class ); } - public static AExpr intrinsicCall(String name, Object[] args) { - DataRef callee = FortranWeaver.getFactory().dataRef(name); + public static AExpr intrinsicCall(FortranWeaver weaver, String name, Object[] args) { + DataRef callee = weaver.getFactory().dataRef(name); List argNodes = SpecsCollections.asListT(AExpr.class, args) .stream() - .map(a -> FortranWeaver.getFactory().argument((Expr) a.getNode())) + .map(a -> weaver.getFactory().argument((Expr) a.getNode())) .collect(Collectors.toList()); return FortranJoinpoints.create( - FortranWeaver.getFactory().functionCall(callee, argNodes), + weaver.getFactory().functionCall(callee, argNodes), + weaver, AExpr.class); } - private static ABinaryOperator binaryOperator(BinaryOperatorKind kind, AExpr lhs, AExpr rhs) { + private static ABinaryOperator binaryOperator(FortranWeaver weaver, BinaryOperatorKind kind, AExpr lhs, AExpr rhs) { Expr lhsNode = (Expr) lhs.getNode(); Expr rhsNode = (Expr) rhs.getNode(); return FortranJoinpoints.create( - FortranWeaver.getFactory().binaryOperator(kind, lhsNode, rhsNode), + weaver.getFactory().binaryOperator(kind, lhsNode, rhsNode), + weaver, ABinaryOperator.class ); } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FActionStatement.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FActionStatement.java index b9380fbf..485a44b4 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FActionStatement.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FActionStatement.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.stmt.ActionStmt; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AActionStatement; public class FActionStatement extends AActionStatement { private final ActionStmt actionStmt; - public FActionStatement(ActionStmt actionStmt) { - super(new FExecutableStatement(actionStmt)); + public FActionStatement(ActionStmt actionStmt, FortranWeaver weaver) { + super(new FExecutableStatement(actionStmt, weaver), weaver); this.actionStmt = actionStmt; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FArraySubscriptExpr.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FArraySubscriptExpr.java index bdc7d7b3..06d42e10 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FArraySubscriptExpr.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FArraySubscriptExpr.java @@ -3,14 +3,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.expr.ArraySubscriptExpr; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.*; public class FArraySubscriptExpr extends AArraySubscriptExpr { private final ArraySubscriptExpr arraySubscriptExpr; - public FArraySubscriptExpr(ArraySubscriptExpr arraySubscriptExpr) { - super(new FDataRef(arraySubscriptExpr)); + public FArraySubscriptExpr(ArraySubscriptExpr arraySubscriptExpr, FortranWeaver weaver) { + super(new FDataRef(arraySubscriptExpr, weaver), weaver); this.arraySubscriptExpr = arraySubscriptExpr; } @@ -18,14 +19,14 @@ public FArraySubscriptExpr(ArraySubscriptExpr arraySubscriptExpr) { public ASectionSubscript[] getSubscriptsArrayImpl() { return arraySubscriptExpr.getSubscripts() .stream() - .map(FortranJoinpoints::create) + .map(node -> FortranJoinpoints.create(node, getWeaverEngine())) .toList() .toArray(new ASectionSubscript[0]); } @Override public ADataRef getVarImpl() { - return FortranJoinpoints.create(arraySubscriptExpr.getRef(), ADataRef.class); + return FortranJoinpoints.create(arraySubscriptExpr.getRef(), getWeaverEngine(), ADataRef.class); } @Override diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FAssignmentStatement.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FAssignmentStatement.java index 87b2346b..e89bf0d3 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FAssignmentStatement.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FAssignmentStatement.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.stmt.AssignmentStmt; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AAssignmentStatement; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ADataRef; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExpr; @@ -11,19 +12,19 @@ public class FAssignmentStatement extends AAssignmentStatement { private final AssignmentStmt assignmentStmt; - public FAssignmentStatement(AssignmentStmt assignmentStmt) { - super(new FActionStatement(assignmentStmt)); + public FAssignmentStatement(AssignmentStmt assignmentStmt, FortranWeaver weaver) { + super(new FActionStatement(assignmentStmt, weaver), weaver); this.assignmentStmt = assignmentStmt; } @Override public AExpr getExprImpl() { - return FortranJoinpoints.create(assignmentStmt.getExpression(), AExpr.class); + return FortranJoinpoints.create(assignmentStmt.getExpression(), getWeaverEngine(), AExpr.class); } @Override public ADataRef getVariableImpl() { - return FortranJoinpoints.create(assignmentStmt.getVariable(), ADataRef.class); + return FortranJoinpoints.create(assignmentStmt.getVariable(), getWeaverEngine(), ADataRef.class); } @Override diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FAttributeSpecifier.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FAttributeSpecifier.java index a1a5ea8c..594f5804 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FAttributeSpecifier.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FAttributeSpecifier.java @@ -2,13 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.type.attributes.AttributeSpecifier; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AAttributeSpecifier; public class FAttributeSpecifier extends AAttributeSpecifier { public final AttributeSpecifier attributeSpecifier; - public FAttributeSpecifier(AttributeSpecifier attributeSpecifier) { + public FAttributeSpecifier(AttributeSpecifier attributeSpecifier, FortranWeaver weaver) { + super(weaver); this.attributeSpecifier = attributeSpecifier; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FBinaryOperator.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FBinaryOperator.java index 08db8c03..4251b656 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FBinaryOperator.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FBinaryOperator.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.expr.BinaryOperator; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ABinaryOperator; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExpr; @@ -10,8 +11,8 @@ public class FBinaryOperator extends ABinaryOperator { private final BinaryOperator binaryOperator; - public FBinaryOperator(BinaryOperator binaryOperator) { - super(new FExpr(binaryOperator)); + public FBinaryOperator(BinaryOperator binaryOperator, FortranWeaver weaver) { + super(new FExpr(binaryOperator, weaver), weaver); this.binaryOperator = binaryOperator; } @@ -22,12 +23,12 @@ public String getKindImpl() { @Override public AExpr getLeftImpl() { - return FortranJoinpoints.create(binaryOperator.getLhs(), AExpr.class); + return FortranJoinpoints.create(binaryOperator.getLhs(), getWeaverEngine(), AExpr.class); } @Override public AExpr getRightImpl() { - return FortranJoinpoints.create(binaryOperator.getRhs(), AExpr.class); + return FortranJoinpoints.create(binaryOperator.getRhs(), getWeaverEngine(), AExpr.class); } @Override diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FCompilerDirective.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FCompilerDirective.java index 75f3f408..b1a0c393 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FCompilerDirective.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FCompilerDirective.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.stmt.CompilerDirective; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ACompilerDirective; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExpr; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ANameValue; @@ -11,8 +12,8 @@ public class FCompilerDirective extends ACompilerDirective { private final CompilerDirective compilerDirective; - public FCompilerDirective(CompilerDirective compilerDirective) { - super(new FExecutableStatement(compilerDirective)); + public FCompilerDirective(CompilerDirective compilerDirective, FortranWeaver weaver) { + super(new FExecutableStatement(compilerDirective, weaver), weaver); this.compilerDirective = compilerDirective; } @@ -25,7 +26,7 @@ public String getDirectiveStringImpl() { public ANameValue[] getPairsArrayImpl() { return (ANameValue[]) compilerDirective.getPairs() .stream() - .map(FortranJoinpoints::create) + .map(node -> FortranJoinpoints.create(node, getWeaverEngine())) .toArray(); } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FDataRef.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FDataRef.java index ba9c9a2e..308e35d3 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FDataRef.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FDataRef.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.expr.DataRef; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ADataRef; public class FDataRef extends ADataRef { private final DataRef dataRef; - public FDataRef(DataRef dataRef) { - super(new FDesignator(dataRef)); + public FDataRef(DataRef dataRef, FortranWeaver weaver) { + super(new FDesignator(dataRef, weaver), weaver); this.dataRef = dataRef; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FDesignator.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FDesignator.java index 6b295df4..1ff5d726 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FDesignator.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FDesignator.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.expr.Designator; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ADesignator; public class FDesignator extends ADesignator { private final Designator designator; - public FDesignator(Designator designator) { - super(new FExpr(designator)); + public FDesignator(Designator designator, FortranWeaver weaver) { + super(new FExpr(designator, weaver), weaver); this.designator = designator; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FDoConstruct.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FDoConstruct.java index 167572c4..a6994853 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FDoConstruct.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FDoConstruct.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.stmt.loop.DoConstruct; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ADoStatement; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExecution; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ALoopControl; @@ -13,19 +14,19 @@ public class FDoConstruct extends ADoStatement { private final DoConstruct doConstruct; - public FDoConstruct(DoConstruct doConstruct) { - super(new FExecutableStatement(doConstruct)); + public FDoConstruct(DoConstruct doConstruct, FortranWeaver weaver) { + super(new FExecutableStatement(doConstruct, weaver), weaver); this.doConstruct = doConstruct; } @Override public AExecution getBodyImpl() { - return FortranJoinpoints.create(doConstruct.getBody(), AExecution.class); + return FortranJoinpoints.create(doConstruct.getBody(), getWeaverEngine(), AExecution.class); } @Override public ALoopControl getControlImpl() { - return FortranJoinpoints.create(doConstruct.getControl().get(), ALoopControl.class); + return FortranJoinpoints.create(doConstruct.getControl().get(), getWeaverEngine(), ALoopControl.class); } @Override @@ -37,7 +38,7 @@ public String getKindImpl() { public ADoStatement copyScopeImpl() { DoConstruct copiedDoStmt = (DoConstruct) doConstruct.copy(); copiedDoStmt.getBody().removeChildren(); - return new FDoConstruct(copiedDoStmt); + return new FDoConstruct(copiedDoStmt, getWeaverEngine()); } @Override diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FElseBlock.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FElseBlock.java index 27ee8e2c..774384cd 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FElseBlock.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FElseBlock.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.stmt.ifstmt.ElseBlock; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AElseBlock; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AStatementBlock; @@ -10,13 +11,14 @@ public class FElseBlock extends AElseBlock { public final ElseBlock elseBlock; - public FElseBlock(ElseBlock elseBlock) { + public FElseBlock(ElseBlock elseBlock, FortranWeaver weaver) { + super(weaver); this.elseBlock = elseBlock; } @Override public AStatementBlock getBodyImpl() { - return FortranJoinpoints.create(elseBlock.getBlock(), AStatementBlock.class); + return FortranJoinpoints.create(elseBlock.getBlock(), getWeaverEngine(), AStatementBlock.class); } @Override diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FElseIfBlock.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FElseIfBlock.java index bcad5ab3..ff6bb47d 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FElseIfBlock.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FElseIfBlock.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.stmt.ifstmt.ElseIfBlock; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AElseIfBlock; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AElseIfStatement; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AStatementBlock; @@ -11,18 +12,19 @@ public class FElseIfBlock extends AElseIfBlock { public final ElseIfBlock elseIfBlock; - public FElseIfBlock(ElseIfBlock elseIfBlock) { + public FElseIfBlock(ElseIfBlock elseIfBlock, FortranWeaver weaver) { + super(weaver); this.elseIfBlock = elseIfBlock; } @Override public AStatementBlock getBodyImpl() { - return FortranJoinpoints.create(elseIfBlock.getBlock(), AStatementBlock.class); + return FortranJoinpoints.create(elseIfBlock.getBlock(), getWeaverEngine(), AStatementBlock.class); } @Override public AElseIfStatement getHeaderImpl() { - return FortranJoinpoints.create(elseIfBlock.getElseIfStmt(), AElseIfStatement.class); + return FortranJoinpoints.create(elseIfBlock.getElseIfStmt(), getWeaverEngine(), AElseIfStatement.class); } @Override diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FElseIfStatement.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FElseIfStatement.java index e7475878..e2248e1c 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FElseIfStatement.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FElseIfStatement.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.stmt.ifstmt.ElseIfStmt; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AElseIfStatement; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExpr; @@ -10,13 +11,14 @@ public class FElseIfStatement extends AElseIfStatement { public final ElseIfStmt elseIfStmt; - public FElseIfStatement(ElseIfStmt elseIfStmt) { + public FElseIfStatement(ElseIfStmt elseIfStmt, FortranWeaver weaver) { + super(weaver); this.elseIfStmt = elseIfStmt; } @Override public AExpr getConditionImpl() { - return FortranJoinpoints.create(elseIfStmt.getCondition(), AExpr.class); + return FortranJoinpoints.create(elseIfStmt.getCondition(), getWeaverEngine(), AExpr.class); } @Override diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FEntityDecl.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FEntityDecl.java index 844fa9f0..8c636ed6 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FEntityDecl.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FEntityDecl.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.decl.EntityDecl; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AEntityDecl; public class FEntityDecl extends AEntityDecl { public final EntityDecl entityDecl; - public FEntityDecl(EntityDecl entityDecl) { - super(new FFortranDecl(entityDecl)); + public FEntityDecl(EntityDecl entityDecl, FortranWeaver weaver) { + super(new FFortranDecl(entityDecl, weaver), weaver); this.entityDecl = entityDecl; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FExecutableStatement.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FExecutableStatement.java index b168dfd7..c7d5814a 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FExecutableStatement.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FExecutableStatement.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.stmt.ExecutableStmt; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExecutableStatement; public class FExecutableStatement extends AExecutableStatement { private final ExecutableStmt executableStmt; - public FExecutableStatement(ExecutableStmt executableStmt) { - super(new FStatement(executableStmt)); + public FExecutableStatement(ExecutableStmt executableStmt, FortranWeaver weaver) { + super(new FStatement(executableStmt, weaver), weaver); this.executableStmt = executableStmt; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FExecution.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FExecution.java index 73825203..d4a6464b 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FExecution.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FExecution.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.program.Execution; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExecutableStatement; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExecution; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AStatement; @@ -13,8 +14,8 @@ public class FExecution extends AExecution { private final Execution execution; - public FExecution(Execution execution) { - super(new FStatementBlock(execution)); + public FExecution(Execution execution, FortranWeaver weaver) { + super(new FStatementBlock(execution, weaver), weaver); this.execution = execution; } @@ -22,7 +23,7 @@ public FExecution(Execution execution) { public AExecutableStatement[] getExecutableStmtsArrayImpl() { return execution.getStatements() .stream() - .map(FortranJoinpoints::create) + .map(node -> FortranJoinpoints.create(node, getWeaverEngine())) .toList() .toArray(new AExecutableStatement[0]); } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FExpr.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FExpr.java index 2c03bd7f..9f9c592c 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FExpr.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FExpr.java @@ -2,13 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.expr.Expr; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExpr; public class FExpr extends AExpr { private final Expr expr; - public FExpr(Expr expr) { + public FExpr(Expr expr, FortranWeaver weaver) { + super(weaver); this.expr = expr; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FExprInitialization.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FExprInitialization.java index ae74463c..2d95143f 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FExprInitialization.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FExprInitialization.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.decl.ExprInitialization; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExpr; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExprInitialization; @@ -10,14 +11,14 @@ public class FExprInitialization extends AExprInitialization { public final ExprInitialization exprInitialization; - public FExprInitialization(ExprInitialization exprInitialization) { - super(new FInitialization(exprInitialization)); + public FExprInitialization(ExprInitialization exprInitialization, FortranWeaver weaver) { + super(new FInitialization(exprInitialization, weaver), weaver); this.exprInitialization = exprInitialization; } @Override public AExpr getExprImpl() { - return FortranJoinpoints.create(exprInitialization.getExpr(), AExpr.class); + return FortranJoinpoints.create(exprInitialization.getExpr(), getWeaverEngine(), AExpr.class); } @Override diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FFortranDecl.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FFortranDecl.java index 09ebbcec..9d67e153 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FFortranDecl.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FFortranDecl.java @@ -2,13 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.decl.FortranDecl; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AFortranDecl; public class FFortranDecl extends AFortranDecl { public final FortranDecl fortranDecl; - public FFortranDecl(FortranDecl fortranDecl) { + public FFortranDecl(FortranDecl fortranDecl, FortranWeaver weaver) { + super(weaver); this.fortranDecl = fortranDecl; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIfConstruct.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIfConstruct.java index 6d0e8357..14299397 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIfConstruct.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIfConstruct.java @@ -3,34 +3,35 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.stmt.ifstmt.IfConstruct; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.*; public class FIfConstruct extends AIfConstruct { public final IfConstruct ifConstruct; - public FIfConstruct(IfConstruct ifConstruct) { - super(new FExecutableStatement(ifConstruct)); + public FIfConstruct(IfConstruct ifConstruct, FortranWeaver weaver) { + super(new FExecutableStatement(ifConstruct, weaver), weaver); this.ifConstruct = ifConstruct; } @Override public AElseBlock getElseBlockImpl() { - return FortranJoinpoints.create(ifConstruct.getElseBlock().get(), AElseBlock.class); + return FortranJoinpoints.create(ifConstruct.getElseBlock().get(), getWeaverEngine(), AElseBlock.class); } @Override public AElseIfBlock[] getElseIfBlocksArrayImpl() { return ifConstruct.getElseIfBlocks() .stream() - .map(FortranJoinpoints::create) + .map(node -> FortranJoinpoints.create(node, getWeaverEngine())) .toList() .toArray(new AElseIfBlock[0]); } @Override public AIfThenBlock getIfThenBlockImpl() { - return FortranJoinpoints.create(ifConstruct.getIfThenBlock(), AIfThenBlock.class); + return FortranJoinpoints.create(ifConstruct.getIfThenBlock(), getWeaverEngine(), AIfThenBlock.class); } @Override diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIfStatement.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIfStatement.java index bcd1fd8b..e3ec850b 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIfStatement.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIfStatement.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.stmt.ifstmt.IfStmt; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AActionStatement; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExpr; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AIfStatement; @@ -11,19 +12,19 @@ public class FIfStatement extends AIfStatement { public final IfStmt ifStmt; - public FIfStatement(IfStmt ifStmt) { - super(new FActionStatement(ifStmt)); + public FIfStatement(IfStmt ifStmt, FortranWeaver weaver) { + super(new FActionStatement(ifStmt, weaver), weaver); this.ifStmt = ifStmt; } @Override public AExpr getConditionImpl() { - return FortranJoinpoints.create(ifStmt.getCondition(), AExpr.class); + return FortranJoinpoints.create(ifStmt.getCondition(), getWeaverEngine(), AExpr.class); } @Override public AActionStatement getStatementImpl() { - return FortranJoinpoints.create(ifStmt.getThenAction(), AActionStatement.class); + return FortranJoinpoints.create(ifStmt.getThenAction(), getWeaverEngine(), AActionStatement.class); } @Override diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIfThenBlock.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIfThenBlock.java index fda9d604..20818eb9 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIfThenBlock.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIfThenBlock.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.stmt.ifstmt.IfThenBlock; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AIfThenBlock; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AIfThenStatement; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AStatementBlock; @@ -11,18 +12,19 @@ public class FIfThenBlock extends AIfThenBlock { public final IfThenBlock ifThenBlock; - public FIfThenBlock(IfThenBlock ifThenBlock) { + public FIfThenBlock(IfThenBlock ifThenBlock, FortranWeaver weaver) { + super(weaver); this.ifThenBlock = ifThenBlock; } @Override public AStatementBlock getBodyImpl() { - return FortranJoinpoints.create(ifThenBlock.getBlock(), AStatementBlock.class); + return FortranJoinpoints.create(ifThenBlock.getBlock(), getWeaverEngine(), AStatementBlock.class); } @Override public AIfThenStatement getHeaderImpl() { - return FortranJoinpoints.create(ifThenBlock.getIfThenStmt(), AIfThenStatement.class); + return FortranJoinpoints.create(ifThenBlock.getIfThenStmt(), getWeaverEngine(), AIfThenStatement.class); } @Override diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIfThenStatement.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIfThenStatement.java index bd4f3825..0c4457ea 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIfThenStatement.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIfThenStatement.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.stmt.ifstmt.IfThenStmt; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExpr; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AIfThenStatement; @@ -10,13 +11,14 @@ public class FIfThenStatement extends AIfThenStatement { public final IfThenStmt ifThenStmt; - public FIfThenStatement(IfThenStmt ifThenStmt) { + public FIfThenStatement(IfThenStmt ifThenStmt, FortranWeaver weaver) { + super(weaver); this.ifThenStmt = ifThenStmt; } @Override public AExpr getConditionImpl() { - return FortranJoinpoints.create(ifThenStmt.getCondition(), AExpr.class); + return FortranJoinpoints.create(ifThenStmt.getCondition(), getWeaverEngine(), AExpr.class); } @Override diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FInitialization.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FInitialization.java index 966e819b..2f73fe07 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FInitialization.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FInitialization.java @@ -2,13 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.decl.Initialization; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AInitialization; public class FInitialization extends AInitialization { public final Initialization initialization; - public FInitialization(Initialization initialization) { + public FInitialization(Initialization initialization, FortranWeaver weaver) { + super(weaver); this.initialization = initialization; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIntLiteral.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIntLiteral.java index 2bc8e158..9898b2d1 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIntLiteral.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FIntLiteral.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.expr.IntLiteral; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AIntLiteral; public class FIntLiteral extends AIntLiteral { private final IntLiteral intLiteral; - public FIntLiteral(IntLiteral intLiteral) { - super(new FLiteral(intLiteral)); + public FIntLiteral(IntLiteral intLiteral, FortranWeaver weaver) { + super(new FLiteral(intLiteral, weaver), weaver); this.intLiteral = intLiteral; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FKeywordAttributeSpecifier.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FKeywordAttributeSpecifier.java index f1b83914..5f591375 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FKeywordAttributeSpecifier.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FKeywordAttributeSpecifier.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.type.attributes.KeywordAttributeSpecifier; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AKeywordAttributeSpecifier; public class FKeywordAttributeSpecifier extends AKeywordAttributeSpecifier { public final KeywordAttributeSpecifier keywordAttributeSpecifier; - public FKeywordAttributeSpecifier(KeywordAttributeSpecifier keywordAttributeSpecifier) { - super(new FAttributeSpecifier(keywordAttributeSpecifier)); + public FKeywordAttributeSpecifier(KeywordAttributeSpecifier keywordAttributeSpecifier, FortranWeaver weaver) { + super(new FAttributeSpecifier(keywordAttributeSpecifier, weaver), weaver); this.keywordAttributeSpecifier = keywordAttributeSpecifier; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FLiteral.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FLiteral.java index f4c24ba6..d5b2dc34 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FLiteral.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FLiteral.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.expr.Literal; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ALiteral; public class FLiteral extends ALiteral { private final Literal literal; - public FLiteral(Literal literal) { - super(new FExpr(literal)); + public FLiteral(Literal literal, FortranWeaver weaver) { + super(new FExpr(literal, weaver), weaver); this.literal = literal; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FLoopControl.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FLoopControl.java index a767b56f..3ac68cde 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FLoopControl.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FLoopControl.java @@ -2,13 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.loops.LoopControl; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ALoopControl; public class FLoopControl extends ALoopControl { private final LoopControl loopControl; - public FLoopControl(LoopControl loopControl) { + public FLoopControl(LoopControl loopControl, FortranWeaver weaver) { + super(weaver); this.loopControl = loopControl; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FMainProgram.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FMainProgram.java index a331f2bf..16603154 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FMainProgram.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FMainProgram.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.program.MainProgram; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AMainProgram; public class FMainProgram extends AMainProgram { public final MainProgram mainProgram; - public FMainProgram(MainProgram mainProgram) { - super(new FProgramUnit(mainProgram)); + public FMainProgram(MainProgram mainProgram, FortranWeaver weaver) { + super(new FProgramUnit(mainProgram, weaver), weaver); this.mainProgram = mainProgram; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FNameValue.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FNameValue.java index 8ac64145..e8c7fdbd 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FNameValue.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FNameValue.java @@ -2,13 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.utils.NameValue; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ANameValue; public class FNameValue extends ANameValue { private final NameValue nameValue; - public FNameValue(NameValue nameValue) { + public FNameValue(NameValue nameValue, FortranWeaver weaver) { + super(weaver); this.nameValue = nameValue; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpBlockConstruct.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpBlockConstruct.java index 75ec0d84..63e79512 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpBlockConstruct.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpBlockConstruct.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.omp.OmpBlockConstruct; import pt.up.fe.specs.fortran.ast.nodes.program.Execution; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExecution; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AOmpBlockConstruct; @@ -10,8 +11,8 @@ public class FOmpBlockConstruct extends AOmpBlockConstruct { public final OmpBlockConstruct ompBlockConstruct; - public FOmpBlockConstruct(OmpBlockConstruct ompBlockConstruct) { - super(new FOmpConstruct(ompBlockConstruct)); + public FOmpBlockConstruct(OmpBlockConstruct ompBlockConstruct, FortranWeaver weaver) { + super(new FOmpConstruct(ompBlockConstruct, weaver), weaver); this.ompBlockConstruct = ompBlockConstruct; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpClause.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpClause.java index e50658a9..5d1afdee 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpClause.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpClause.java @@ -2,13 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.omp.clause.OmpClause; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AOmpClause; public class FOmpClause extends AOmpClause { public final OmpClause ompClause; - public FOmpClause(OmpClause ompClause) { + public FOmpClause(OmpClause ompClause, FortranWeaver weaver) { + super(weaver); this.ompClause = ompClause; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpConstruct.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpConstruct.java index d6332fb1..f3dd40b4 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpConstruct.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpConstruct.java @@ -1,51 +1,52 @@ -package pt.up.fe.specs.fortran.weaver.joinpoints; - -import pt.up.fe.specs.fortran.ast.nodes.FortranNode; -import pt.up.fe.specs.fortran.ast.nodes.omp.OmpConstruct; -import pt.up.fe.specs.fortran.ast.nodes.omp.clause.OmpClause; -import pt.up.fe.specs.fortran.ast.nodes.omp.enums.OmpDirectiveKind; -import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; -import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExpr; -import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AOmpClause; -import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AOmpConstruct; - -import java.util.Arrays; -import java.util.List; - -public class FOmpConstruct extends AOmpConstruct { - - public final OmpConstruct ompConstruct; - - public FOmpConstruct(OmpConstruct ompConstruct) { - super(new FExecutableStatement(ompConstruct)); - this.ompConstruct = ompConstruct; - } - - @Override - public AOmpClause[] getClausesArrayImpl() { - return ompConstruct.getClauses() - .stream() - .map(FortranJoinpoints::create) - .toList() - .toArray(new AOmpClause[0]); - } - - @Override - public void setClausesImpl(AOmpClause[] clauses) { - List clauseList = Arrays.stream(clauses) - .map(c -> (OmpClause) c.getNode()) - .toList(); - - ompConstruct.setClauses(clauseList); - } - - @Override - public void setDirectiveImpl(String directive) { - ompConstruct.set(OmpConstruct.KINDS, OmpDirectiveKind.getKinds(directive)); - } - - @Override - public FortranNode getNode() { - return ompConstruct; - } -} +package pt.up.fe.specs.fortran.weaver.joinpoints; + +import pt.up.fe.specs.fortran.ast.nodes.FortranNode; +import pt.up.fe.specs.fortran.ast.nodes.omp.OmpConstruct; +import pt.up.fe.specs.fortran.ast.nodes.omp.clause.OmpClause; +import pt.up.fe.specs.fortran.ast.nodes.omp.enums.OmpDirectiveKind; +import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; +import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExpr; +import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AOmpClause; +import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AOmpConstruct; + +import java.util.Arrays; +import java.util.List; + +public class FOmpConstruct extends AOmpConstruct { + + public final OmpConstruct ompConstruct; + + public FOmpConstruct(OmpConstruct ompConstruct, FortranWeaver weaver) { + super(new FExecutableStatement(ompConstruct, weaver), weaver); + this.ompConstruct = ompConstruct; + } + + @Override + public AOmpClause[] getClausesArrayImpl() { + return ompConstruct.getClauses() + .stream() + .map(node -> FortranJoinpoints.create(node, getWeaverEngine())) + .toList() + .toArray(new AOmpClause[0]); + } + + @Override + public void setClausesImpl(AOmpClause[] clauses) { + List clauseList = Arrays.stream(clauses) + .map(c -> (OmpClause) c.getNode()) + .toList(); + + ompConstruct.setClauses(clauseList); + } + + @Override + public void setDirectiveImpl(String directive) { + ompConstruct.set(OmpConstruct.KINDS, OmpDirectiveKind.getKinds(directive)); + } + + @Override + public FortranNode getNode() { + return ompConstruct; + } +} diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpDataSharingClause.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpDataSharingClause.java index a08785cb..5f172e8a 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpDataSharingClause.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpDataSharingClause.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.omp.clause.OmpDataSharingClause; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AOmpDataSharingClause; public class FOmpDataSharingClause extends AOmpDataSharingClause { public final OmpDataSharingClause ompDataSharingClause; - public FOmpDataSharingClause(OmpDataSharingClause ompDataSharingClause) { - super(new FOmpClause(ompDataSharingClause)); + public FOmpDataSharingClause(OmpDataSharingClause ompDataSharingClause, FortranWeaver weaver) { + super(new FOmpClause(ompDataSharingClause, weaver), weaver); this.ompDataSharingClause = ompDataSharingClause; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpLoopConstruct.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpLoopConstruct.java index bd6471f6..96d458ed 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpLoopConstruct.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpLoopConstruct.java @@ -1,27 +1,28 @@ -package pt.up.fe.specs.fortran.weaver.joinpoints; - -import pt.up.fe.specs.fortran.ast.nodes.FortranNode; -import pt.up.fe.specs.fortran.ast.nodes.omp.OmpLoopConstruct; -import pt.up.fe.specs.fortran.ast.nodes.stmt.loop.DoConstruct; -import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ADoStatement; -import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AOmpLoopConstruct; - -public class FOmpLoopConstruct extends AOmpLoopConstruct { - - public final OmpLoopConstruct ompLoopConstruct; - - public FOmpLoopConstruct(OmpLoopConstruct ompLoopConstruct) { - super(new FOmpConstruct(ompLoopConstruct)); - this.ompLoopConstruct = ompLoopConstruct; - } - - @Override - public void setLoopImpl(ADoStatement loop) { - ompLoopConstruct.setLoop((DoConstruct) loop.getNode()); - } - - @Override - public FortranNode getNode() { - return ompLoopConstruct; - } -} +package pt.up.fe.specs.fortran.weaver.joinpoints; + +import pt.up.fe.specs.fortran.ast.nodes.FortranNode; +import pt.up.fe.specs.fortran.ast.nodes.omp.OmpLoopConstruct; +import pt.up.fe.specs.fortran.ast.nodes.stmt.loop.DoConstruct; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; +import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ADoStatement; +import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AOmpLoopConstruct; + +public class FOmpLoopConstruct extends AOmpLoopConstruct { + + public final OmpLoopConstruct ompLoopConstruct; + + public FOmpLoopConstruct(OmpLoopConstruct ompLoopConstruct, FortranWeaver weaver) { + super(new FOmpConstruct(ompLoopConstruct, weaver), weaver); + this.ompLoopConstruct = ompLoopConstruct; + } + + @Override + public void setLoopImpl(ADoStatement loop) { + ompLoopConstruct.setLoop((DoConstruct) loop.getNode()); + } + + @Override + public FortranNode getNode() { + return ompLoopConstruct; + } +} diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpOrderedClause.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpOrderedClause.java index bb8b2d8d..afe9812d 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpOrderedClause.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpOrderedClause.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.omp.clause.OmpOrderedClause; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AOmpOrderedClause; public class FOmpOrderedClause extends AOmpOrderedClause { public final OmpOrderedClause ompOrderedClause; - public FOmpOrderedClause(OmpOrderedClause ompOrderedClause) { - super(new FOmpClause(ompOrderedClause)); + public FOmpOrderedClause(OmpOrderedClause ompOrderedClause, FortranWeaver weaver) { + super(new FOmpClause(ompOrderedClause, weaver), weaver); this.ompOrderedClause = ompOrderedClause; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpReductionClause.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpReductionClause.java index 1aa2532c..e7f3ed5a 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpReductionClause.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FOmpReductionClause.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.omp.clause.OmpReductionClause; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AOmpReductionClause; public class FOmpReductionClause extends AOmpReductionClause { public final OmpReductionClause ompReductionClause; - public FOmpReductionClause(OmpReductionClause ompReductionClause) { - super(new FOmpClause(ompReductionClause)); + public FOmpReductionClause(OmpReductionClause ompReductionClause, FortranWeaver weaver) { + super(new FOmpClause(ompReductionClause, weaver), weaver); this.ompReductionClause = ompReductionClause; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FParameterKeyword.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FParameterKeyword.java index be8c4ac3..0929e7ad 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FParameterKeyword.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FParameterKeyword.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.type.attributes.ParameterKeyword; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AParameterKeyword; public class FParameterKeyword extends AParameterKeyword { public final ParameterKeyword parameterKeyword; - public FParameterKeyword(ParameterKeyword parameterKeyword) { - super(new FKeywordAttributeSpecifier(parameterKeyword)); + public FParameterKeyword(ParameterKeyword parameterKeyword, FortranWeaver weaver) { + super(new FKeywordAttributeSpecifier(parameterKeyword, weaver), weaver); this.parameterKeyword = parameterKeyword; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FProgramUnit.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FProgramUnit.java index 8286d049..c6dd7236 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FProgramUnit.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FProgramUnit.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.program.ProgramUnit; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AProgramUnit; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ASpecification; @@ -10,13 +11,14 @@ public class FProgramUnit extends AProgramUnit { public final ProgramUnit programUnit; - public FProgramUnit(ProgramUnit programUnit) { + public FProgramUnit(ProgramUnit programUnit, FortranWeaver weaver) { + super(weaver); this.programUnit = programUnit; } @Override public ASpecification getSpecificationImpl() { - return FortranJoinpoints.create(programUnit.getSpecification(), ASpecification.class); + return FortranJoinpoints.create(programUnit.getSpecification(), getWeaverEngine(), ASpecification.class); } @Override diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FRangeLoopControl.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FRangeLoopControl.java index 872b2ea8..c6cd48d9 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FRangeLoopControl.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FRangeLoopControl.java @@ -4,6 +4,7 @@ import pt.up.fe.specs.fortran.ast.nodes.expr.Expr; import pt.up.fe.specs.fortran.ast.nodes.loops.RangeLoopControl; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ADataRef; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExpr; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ARangeLoopControl; @@ -12,30 +13,30 @@ public class FRangeLoopControl extends ARangeLoopControl { private final RangeLoopControl rangeLoopControl; - public FRangeLoopControl(RangeLoopControl rangeLoopControl) { - super(new FLoopControl(rangeLoopControl)); + public FRangeLoopControl(RangeLoopControl rangeLoopControl, FortranWeaver weaver) { + super(new FLoopControl(rangeLoopControl, weaver), weaver); this.rangeLoopControl = rangeLoopControl; } @Override public AExpr getLowerImpl() { - return FortranJoinpoints.create(rangeLoopControl.getLower(), AExpr.class); + return FortranJoinpoints.create(rangeLoopControl.getLower(), getWeaverEngine(), AExpr.class); } @Override public AExpr getUpperImpl() { - return FortranJoinpoints.create(rangeLoopControl.getUpper(), AExpr.class); + return FortranJoinpoints.create(rangeLoopControl.getUpper(), getWeaverEngine(), AExpr.class); } @Override public ADataRef getVarImpl() { - return FortranJoinpoints.create(rangeLoopControl.getVar(), ADataRef.class); + return FortranJoinpoints.create(rangeLoopControl.getVar(), getWeaverEngine(), ADataRef.class); } @Override public AExpr getStepImpl() { return rangeLoopControl.getStep() - .map(step -> FortranJoinpoints.create(step, AExpr.class)) + .map(step -> FortranJoinpoints.create(step, getWeaverEngine(), AExpr.class)) .orElse(null); } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FRealLiteral.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FRealLiteral.java index e56c7e12..3cbfafdc 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FRealLiteral.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FRealLiteral.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.expr.RealLiteral; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ARealLiteral; public class FRealLiteral extends ARealLiteral { private final RealLiteral realLiteral; - public FRealLiteral(RealLiteral realLiteral) { - super(new FLiteral(realLiteral)); + public FRealLiteral(RealLiteral realLiteral, FortranWeaver weaver) { + super(new FLiteral(realLiteral, weaver), weaver); this.realLiteral = realLiteral; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSectionSubscript.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSectionSubscript.java index c6bfc9b1..5e4fcd2b 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSectionSubscript.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSectionSubscript.java @@ -2,13 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.expr.SectionSubscript; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ASectionSubscript; public class FSectionSubscript extends ASectionSubscript { private final SectionSubscript sectionSubscript; - public FSectionSubscript(SectionSubscript sectionSubscript) { + public FSectionSubscript(SectionSubscript sectionSubscript, FortranWeaver weaver) { + super(weaver); this.sectionSubscript = sectionSubscript; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSpecification.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSpecification.java index 6c22f902..2b52f49d 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSpecification.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSpecification.java @@ -4,6 +4,7 @@ import pt.up.fe.specs.fortran.ast.nodes.program.Specification; import pt.up.fe.specs.fortran.ast.nodes.stmt.UseStmt; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExpr; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ASpecification; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ASpecificationStatement; @@ -13,8 +14,8 @@ public class FSpecification extends ASpecification { public final Specification specification; - public FSpecification(Specification specification) { - super(new FStatementBlock(specification)); + public FSpecification(Specification specification, FortranWeaver weaver) { + super(new FStatementBlock(specification, weaver), weaver); this.specification = specification; } @@ -22,7 +23,7 @@ public FSpecification(Specification specification) { public ASpecificationStatement[] getSpecificationStmtsArrayImpl() { return specification.getSpecificationStatements() .stream() - .map(FortranJoinpoints::create) + .map(node -> FortranJoinpoints.create(node, getWeaverEngine())) .toList() .toArray(new ASpecificationStatement[0]); } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSpecificationStatement.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSpecificationStatement.java index 818eef0e..648eb933 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSpecificationStatement.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSpecificationStatement.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.stmt.SpecificationStmt; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ASpecificationStatement; public class FSpecificationStatement extends ASpecificationStatement { public final SpecificationStmt specificationStmt; - public FSpecificationStatement(SpecificationStmt specificationStmt) { - super(new FStatement(specificationStmt)); + public FSpecificationStatement(SpecificationStmt specificationStmt, FortranWeaver weaver) { + super(new FStatement(specificationStmt, weaver), weaver); this.specificationStmt = specificationStmt; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FStatement.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FStatement.java index ac7b8f1d..28912764 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FStatement.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FStatement.java @@ -2,6 +2,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.stmt.Stmt; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AStatement; import pt.up.fe.specs.util.exceptions.NotImplementedException; @@ -9,7 +10,8 @@ public class FStatement extends AStatement { private final Stmt stmt; - public FStatement(Stmt stmt) { + public FStatement(Stmt stmt, FortranWeaver weaver) { + super(weaver); this.stmt = stmt; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FStatementBlock.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FStatementBlock.java index 2de65620..ddff92f6 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FStatementBlock.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FStatementBlock.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.program.StmtBlock; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExpr; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AStatement; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AStatementBlock; @@ -11,7 +12,8 @@ public class FStatementBlock extends AStatementBlock { private final StmtBlock stmtBlock; - public FStatementBlock(StmtBlock stmtBlock) { + public FStatementBlock(StmtBlock stmtBlock, FortranWeaver weaver) { + super(weaver); this.stmtBlock = stmtBlock; } @@ -19,7 +21,7 @@ public FStatementBlock(StmtBlock stmtBlock) { public AStatement[] getStmtsArrayImpl() { return (AStatement[]) stmtBlock.getStatements() .stream() - .map(FortranJoinpoints::create) + .map(node -> FortranJoinpoints.create(node, getWeaverEngine())) .toArray(); } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FStringLiteral.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FStringLiteral.java index 13e62664..3afdddf1 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FStringLiteral.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FStringLiteral.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.expr.StringLiteral; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AStringLiteral; public class FStringLiteral extends AStringLiteral { private final StringLiteral stringLiteral; - public FStringLiteral(StringLiteral stringLiteral) { - super(new FLiteral(stringLiteral)); + public FStringLiteral(StringLiteral stringLiteral, FortranWeaver weaver) { + super(new FLiteral(stringLiteral, weaver), weaver); this.stringLiteral = stringLiteral; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSubroutine.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSubroutine.java index 9d76803e..e41669b6 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSubroutine.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSubroutine.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.program.Subroutine; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ASubroutine; public class FSubroutine extends ASubroutine { public final Subroutine subroutine; - public FSubroutine(Subroutine subroutine) { - super(new FProgramUnit(subroutine)); + public FSubroutine(Subroutine subroutine, FortranWeaver weaver) { + super(new FProgramUnit(subroutine, weaver), weaver); this.subroutine = subroutine; } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSubscript.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSubscript.java index bad0990d..6120b624 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSubscript.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FSubscript.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.expr.Subscript; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExpr; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.ASubscript; @@ -10,14 +11,14 @@ public class FSubscript extends ASubscript { private final Subscript subscript; - public FSubscript(Subscript subscript) { - super(new FSectionSubscript(subscript)); + public FSubscript(Subscript subscript, FortranWeaver weaver) { + super(new FSectionSubscript(subscript, weaver), weaver); this.subscript = subscript; } @Override public AExpr getExprImpl() { - return FortranJoinpoints.create(subscript.getValue(), AExpr.class); + return FortranJoinpoints.create(subscript.getValue(), getWeaverEngine(), AExpr.class); } @Override diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FTypeDeclarationStatement.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FTypeDeclarationStatement.java index b673097a..c830e1be 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FTypeDeclarationStatement.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FTypeDeclarationStatement.java @@ -3,6 +3,7 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.stmt.TypeDeclarationStmt; import pt.up.fe.specs.fortran.weaver.FortranJoinpoints; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AAttributeSpecifier; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AEntityDecl; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AExpr; @@ -12,8 +13,8 @@ public class FTypeDeclarationStatement extends ATypeDeclarationStatement { public final TypeDeclarationStmt typeDeclarationStmt; - public FTypeDeclarationStatement(TypeDeclarationStmt typeDeclarationStmt) { - super(new FSpecificationStatement(typeDeclarationStmt)); + public FTypeDeclarationStatement(TypeDeclarationStmt typeDeclarationStmt, FortranWeaver weaver) { + super(new FSpecificationStatement(typeDeclarationStmt, weaver), weaver); this.typeDeclarationStmt = typeDeclarationStmt; } @@ -21,7 +22,7 @@ public FTypeDeclarationStatement(TypeDeclarationStmt typeDeclarationStmt) { public AAttributeSpecifier[] getAttrsArrayImpl() { return typeDeclarationStmt.getAttributes() .stream() - .map(FortranJoinpoints::create) + .map(node -> FortranJoinpoints.create(node, getWeaverEngine())) .toList() .toArray(new AAttributeSpecifier[0]); } @@ -30,7 +31,7 @@ public AAttributeSpecifier[] getAttrsArrayImpl() { public AEntityDecl[] getDeclsArrayImpl() { return typeDeclarationStmt.getDecls() .stream() - .map(FortranJoinpoints::create) + .map(node -> FortranJoinpoints.create(node, getWeaverEngine())) .toList() .toArray(new AEntityDecl[0]); } diff --git a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FUseStatement.java b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FUseStatement.java index f48db5e9..c3131b7c 100644 --- a/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FUseStatement.java +++ b/FortranWeaver/src/pt/up/fe/specs/fortran/weaver/joinpoints/FUseStatement.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.fortran.ast.nodes.FortranNode; import pt.up.fe.specs.fortran.ast.nodes.stmt.UseStmt; +import pt.up.fe.specs.fortran.weaver.FortranWeaver; import pt.up.fe.specs.fortran.weaver.abstracts.joinpoints.AUseStatement; public class FUseStatement extends AUseStatement { public final UseStmt useStmt; - public FUseStatement(UseStmt useStmt) { - super(new FStatement(useStmt)); + public FUseStatement(UseStmt useStmt, FortranWeaver weaver) { + super(new FStatement(useStmt, weaver), weaver); this.useStmt = useStmt; }