Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ on:
branches:
- master
- staging
- multi-weaver

push:
branches:
Expand Down Expand Up @@ -157,7 +158,7 @@ jobs:
strategy:
fail-fast: false
matrix:
node-version: ["22.x"]
node-version: ['25.x', '24.x']
os: [ubuntu-latest, windows-2022, macos-latest]

runs-on: ${{ matrix.os }}
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,6 @@ ivy/
build/


**/node_modules/*
**/node_modules/*
# Test artifacts from the legacy weaver tests
/src/
8 changes: 3 additions & 5 deletions JavaWeaver/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@ src-weaved/*
package.json

src/weaver/kadabra/abstracts/
!src/weaver/kadabra/abstracts/AJavaWeaverJoinPoint.java
src/weaver/kadabra/exceptions/
src/weaver/kadabra/enums/
*.dotty
JavaWeaver.json
JavaWeaver.png
JavaWeaver.svg
JWeaver.json
JWeaver.png
JWeaver.svg
102 changes: 70 additions & 32 deletions JavaWeaver/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,30 @@ configurations {
weaverGeneratorRuntime
}

// Project sources
sourceSets {
// Spec source set: compiled independently to avoid circular dependency
spec {
java {
srcDir 'src-spec'
}
}
main {
java {
srcDir 'src'
}
resources {
srcDir 'resources'
}
}

test {
java {
srcDir 'test'
}
}
}

dependencies {
testImplementation "junit:junit:4.13.1"

Expand All @@ -34,7 +58,7 @@ dependencies {

implementation ':KadabraAPI'

implementation ':LanguageSpecification'
implementation ':LangSpec2'
implementation ':LaraUtils'
implementation ':LARAI'
implementation ':WeaverInterface'
Expand All @@ -44,26 +68,11 @@ dependencies {
implementation 'org.ow2.asm:asm:9.8'
implementation 'org.json:json:20251224'

weaverGeneratorRuntime ":WeaverGenerator"
}

// Project sources
sourceSets {
main {
java {
srcDir 'src'
srcDir 'api'
}
resources {
srcDir 'resources'
}
}
weaverGeneratorRuntime ":WeaverGen2"

test {
java {
srcDir 'test'
}
}
// Spec source set: only needs LangSpec2 and WeaverInterface (for BaseJoinPointSpec)
specImplementation ":LangSpec2"
specImplementation ":WeaverInterface"
}

application {
Expand All @@ -79,22 +88,51 @@ tasks.register('kadabra', JavaExec) {
args = []
}

// Weaver Generator
// Generate weaver abstracts using WeaverGen2 (Java DSL-based)
tasks.register('generateWeaver', JavaExec) {
group = "Execution"
description = "Generates the join point classes from the Language Specification"
classpath = configurations.weaverGeneratorRuntime
mainClass = 'org.lara.interpreter.weaver.generator.commandline.WeaverGenerator'

description = "Generates the Weaver Abstracts using WeaverGen2"
classpath = configurations.weaverGeneratorRuntime + sourceSets.spec.runtimeClasspath
mainClass = 'org.lara.weavergen2.cli.WeaverGen2Cli'
args = [
'-w', 'JavaWeaver',
'-x', './resources/specs/kadabra',
'-o', './src',
'-p', 'weaver.kadabra',
'-n', 'spoon.reflect.declaration.CtElement',
"-e",
'-j'
"weaver.kadabra.KadabraSpec",
"${projectDir}/src",
"--base", "org.lara.interpreter.weaver.interf.BaseJoinPointSpec",
"--node", "spoon.reflect.declaration.CtElement"
]
}

compileJava.dependsOn generateWeaver

def javaWeaverInstallDir = layout.buildDirectory.dir('install/JavaWeaver')
def kadabraJsJavaBinaries = layout.projectDirectory.dir('../Kadabra-JS/java-binaries')

def syncKadabraJsJavaBinaries = tasks.register('syncKadabraJsJavaBinaries', Sync) {
group = 'distribution'
description = 'Synchronizes the JavaWeaver installDist output used by Kadabra-JS.'
dependsOn tasks.named('installDist')
from javaWeaverInstallDir
into kadabraJsJavaBinaries

// The destination is also used by npm packaging and must not retain files
// that are no longer part of installDist.
outputs.upToDateWhen { false }

doFirst {
def installLib = javaWeaverInstallDir.get().dir('lib').asFile
if (!installLib.isDirectory()) {
throw new GradleException("JavaWeaver installDist output is missing: ${installLib}")
}

def destination = kadabraJsJavaBinaries.asFile.toPath()
if (java.nio.file.Files.isSymbolicLink(destination)) {
java.nio.file.Files.delete(destination)
} else if (java.nio.file.Files.exists(destination) && !java.nio.file.Files.isDirectory(destination)) {
throw new GradleException("Kadabra-JS java-binaries is not a directory: ${destination}")
}
}
}

tasks.named('installDist') {
finalizedBy syncKadabraJsJavaBinaries
}
Loading
Loading