diff --git a/statemachine.task/build.gradle b/statemachine.task/build.gradle index 1ba0944f70c3408b4ef05385c3517ce482b11bdc..d2e348fad63c4ad50e3f3f8cd4c679420eab8bc3 100644 --- a/statemachine.task/build.gradle +++ b/statemachine.task/build.gradle @@ -21,7 +21,11 @@ configurations { File genSrc = file("src/gen/java") idea.module.generatedSourceDirs += genSrc sourceSets.main.java.srcDir genSrc -//jar.manifest.attributes('Main-Class': 'de.tudresden.inf.st.statemachine.Main') + +jar { + from { sourceSets.main.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } + manifest.attributes('Main-Class': 'de.tudresden.inf.st.statemachine.Main') +} dependencies { implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: "${jackson_version}" @@ -29,7 +33,7 @@ dependencies { implementation group: 'de.tudresden.inf.st', name: 'dumpAstWithPlantuml', version: '0.3.5' jastadd2 "org.jastadd:jastadd:2.3.4" - ragdoc files('../libs/rd-builder.jar') + ragdoc files('../libs/rd-builder-1.3.0.jar') } // Default run configuration @@ -58,6 +62,29 @@ task ecoreToRelast(type: JavaExec) { outputs.files file(relastFile) } +task('ragdoc-java-8', type: JavaExec, group: 'documentation') { + description 'Generates RagDoc metadata for this JastAdd project.' + + inputs.files { + sourceSets.main.allJava.files + } + + main = 'org.extendj.ragdoc.RagDocBuilder' + + doFirst { + def destDir = new File(docsDir, 'ragdoc') + if (!destDir.isDirectory()) { + destDir.mkdirs() + } + classpath = configurations.ragdoc + def sourceFiles = sourceSets.main.allJava.files + args(['-d', "$destDir", + '-bootclasspath', '/usr/lib/jvm/java-1.8.0/jre/lib/rt.jar', + ] + sourceFiles) + } +} + + // Second phase: RelAst -> JastAdd task relastToJastAdd(type: JavaExec) { group = 'Build' diff --git a/statemachine.task/src/main/jastadd/SMtoDotG.jrag b/statemachine.task/src/main/jastadd/SMtoDotG.jrag new file mode 100644 index 0000000000000000000000000000000000000000..18155d5366dc3d6f5778fba8f6193d09143c2f68 --- /dev/null +++ b/statemachine.task/src/main/jastadd/SMtoDotG.jrag @@ -0,0 +1,18 @@ +aspect StateMachinetoDotG { + syn String StateMachine.toDot() { + StringBuilder b = new StringBuilder(); + b.append("strict digraph cycles {\n"); + + for (State from : states()) { + b.append(" ").append(from.getLabel()).append("[label=\"").append(from.getLabel()).append("\"];\n"); + + for (Transition out : from.getOutgoingList()) { + b.append(" ").append(from.getLabel()).append(" -> ").append(out.getTo().getLabel()) + .append("[label=\"").append(out.getLabel()).append("\"];\n"); + } + } + + b.append("}\n"); + return b.toString(); + } +} diff --git a/statemachine.task/src/main/java/de/tudresden/inf/st/statemachine/Main.java b/statemachine.task/src/main/java/de/tudresden/inf/st/statemachine/Main.java index 2c381ce4eb76b424107ac398579615e56030c509..2d0d558c834e3afa9f095054d76196090d3db454 100644 --- a/statemachine.task/src/main/java/de/tudresden/inf/st/statemachine/Main.java +++ b/statemachine.task/src/main/java/de/tudresden/inf/st/statemachine/Main.java @@ -41,6 +41,8 @@ public class Main { printHeading("StateMachine after"); System.out.println(stateMachine.prettyPrint()); } + printHeading("DotGraph"); + System.out.println(stateMachine.toDot()); Dumper.read(stateMachine).dumpAsPNG(Paths.get("02-transformed.png")); DrAST_root_node = stateMachine; }