From 29110428cf7b3fc2b5d808dccd966c22e2655bed Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Thu, 21 Jan 2021 19:47:55 +0100 Subject: [PATCH] Continue working on incremental dependencies. --- libs/buildSrc.jar | Bin 8942 -> 0 bytes .../src/main/jastadd/Configuration.jadd | 1 + .../jastadd/ragconnect/compiler/Compiler.java | 3 +- .../src/main/resources/MqttHandler.jadd | 2 +- .../main/resources/RagConnectObserver.jadd | 54 ---------------- .../src/main/resources/ragconnect.mustache | 59 ++++++++++++++++++ .../main/resources/sendDefinition.mustache | 26 ++++++-- ragconnect.tests/build.gradle | 16 +++-- 8 files changed, 96 insertions(+), 65 deletions(-) delete mode 100644 libs/buildSrc.jar diff --git a/libs/buildSrc.jar b/libs/buildSrc.jar deleted file mode 100644 index b0ca2cbc4fc7f12022592944d7446a429d855add..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8942 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 Kz_3sr!~+0saM`W^ diff --git a/ragconnect.base/src/main/jastadd/Configuration.jadd b/ragconnect.base/src/main/jastadd/Configuration.jadd index 8d3b16c..4116807 100644 --- a/ragconnect.base/src/main/jastadd/Configuration.jadd +++ b/ragconnect.base/src/main/jastadd/Configuration.jadd @@ -4,4 +4,5 @@ aspect Configuration { public static TypeDecl ASTNode.rootNode; public static boolean ASTNode.usesMqtt; public static boolean ASTNode.usesRest; + public static boolean ASTNode.incrementalOptionActive; } diff --git a/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java b/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java index d2894e6..b14ed91 100644 --- a/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java +++ b/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java @@ -78,7 +78,6 @@ public class Compiler extends AbstractCompiler { printMessage("Writing output files"); final List<String> handlers = new ArrayList<>(); - handlers.add("RagConnectObserver.jadd"); if (ASTNode.usesMqtt) { handlers.add("MqttHandler.jadd"); } @@ -224,6 +223,8 @@ public class Compiler extends AbstractCompiler { ragConnect.additionalRelations().forEach(ragConnectGrammarPart::addDeclaration); ASTNode.loggingEnabledForReads = optionLogReads.value(); ASTNode.loggingEnabledForWrites = optionLogWrites.value(); + // reuse "--incremental" option of JastAdd + ASTNode.incrementalOptionActive = getConfiguration().incremental() && getConfiguration().traceFlush(); ASTNode.usesMqtt = optionProtocols.hasValue(OPTION_PROTOCOL_MQTT); ASTNode.usesRest = optionProtocols.hasValue(OPTION_PROTOCOL_REST); return ragConnect; diff --git a/ragconnect.base/src/main/resources/MqttHandler.jadd b/ragconnect.base/src/main/resources/MqttHandler.jadd index 6b0ea71..987c0c4 100644 --- a/ragconnect.base/src/main/resources/MqttHandler.jadd +++ b/ragconnect.base/src/main/resources/MqttHandler.jadd @@ -252,7 +252,7 @@ public class MqttHandler { } // register callback logger.debug("new connection for {}", topic); - if (callbacks.get(topic) == null) { + if (callbacks.get(topic) == null || callbacks.get(topic).isEmpty()) { callbacks.put(topic, new java.util.ArrayList<>()); // subscribe at broker diff --git a/ragconnect.base/src/main/resources/RagConnectObserver.jadd b/ragconnect.base/src/main/resources/RagConnectObserver.jadd index 3658f7b..e69de29 100644 --- a/ragconnect.base/src/main/resources/RagConnectObserver.jadd +++ b/ragconnect.base/src/main/resources/RagConnectObserver.jadd @@ -1,54 +0,0 @@ -aspect RagConnectObserver { - class RagConnectObserver implements ASTState.Trace.Receiver { - ASTState.Trace.Receiver oldReceiver; - class RagConnectObserverEntry { - ASTNode node; - String attributeString; - Runnable attributeCall; - RagConnectObserverEntry(ASTNode node, String attributeString, Runnable attributeCall) { - this.node = node; - this.attributeString = attributeString; - this.attributeCall = attributeCall; - } - } - java.util.List<RagConnectObserverEntry> observedNodes = new java.util.ArrayList<>(); - RagConnectObserver(ASTNode node) { - // set the receiver. potentially dangerous because overriding existing receiver! - oldReceiver = node.trace().getReceiver(); - node.trace().setReceiver(this); - } - void add(ASTNode node, String attributeString, Runnable attributeCall) { - System.out.println("** observer add " + node + " on " + attributeString); - observedNodes.add(new RagConnectObserverEntry(node, attributeString, attributeCall)); - } - void remove(ASTNode node, String attributeString, Runnable attributeCall) { - observedNodes.remove(new RagConnectObserverEntry(node, attributeString, attributeCall)); - } - @Override - public void accept(ASTState.Trace.Event event, ASTNode node, String attribute, Object params, Object value) { - oldReceiver.accept(event, node, attribute, params, value); - // ignore all events but INC_FLUSH_ATTR - if (event != ASTState.Trace.Event.INC_FLUSH_ATTR) { - return; - } - System.out.println("** observer check INC_FLUSH_ATTR event"); - // iterate through list, if matching pair. could maybe be more efficient. - for (RagConnectObserverEntry entry : observedNodes) { - if (entry.node.equals(node) && entry.attributeString.equals(attribute)) { - // hit. call the attribute/nta-token - System.out.println("** observer hit " + entry.node + " on " + entry.attributeString); - entry.attributeCall.run(); - } - } - } - } - - private static RagConnectObserver ASTNode._ragConnectObserverInstance; - RagConnectObserver ASTNode._ragConnectObserver() { - if (_ragConnectObserverInstance == null) { - // does not matter, which node is used to create the observer as ASTState/tracing is also static - _ragConnectObserverInstance = new RagConnectObserver(this); - } - return _ragConnectObserverInstance; - } -} diff --git a/ragconnect.base/src/main/resources/ragconnect.mustache b/ragconnect.base/src/main/resources/ragconnect.mustache index 49d1721..d82f430 100644 --- a/ragconnect.base/src/main/resources/ragconnect.mustache +++ b/ragconnect.base/src/main/resources/ragconnect.mustache @@ -21,3 +21,62 @@ aspect ROS2RAG { {{> tokenComponent}} {{/TokenComponents}} } + +{{#incrementalOptionActive}} +aspect RagConnectObserver { + class RagConnectObserver implements ASTState.Trace.Receiver { + ASTState.Trace.Receiver oldReceiver; + class RagConnectObserverEntry { + final ConnectToken connectToken; + final ASTNode node; + final String attributeString; + final Runnable attributeCall; + RagConnectObserverEntry(ConnectToken connectToken, ASTNode node, String attributeString, Runnable attributeCall) { + this.connectToken = connectToken; + this.node = node; + this.attributeString = attributeString; + this.attributeCall = attributeCall; + } + } + java.util.List<RagConnectObserverEntry> observedNodes = new java.util.ArrayList<>(); + RagConnectObserver(ASTNode node) { + // set the receiver. potentially dangerous because overriding existing receiver! + oldReceiver = node.trace().getReceiver(); + node.trace().setReceiver(this); + } + void add(ConnectToken connectToken, ASTNode node, String attributeString, Runnable attributeCall) { + System.out.println("** observer add " + node + " on " + attributeString); + observedNodes.add(new RagConnectObserverEntry(connectToken, node, attributeString, attributeCall)); + } + void remove(ConnectToken connectToken) { + observedNodes.removeIf(entry -> entry.connectToken.equals(connectToken)); + } + @Override + public void accept(ASTState.Trace.Event event, ASTNode node, String attribute, Object params, Object value) { + oldReceiver.accept(event, node, attribute, params, value); + // ignore all events but INC_FLUSH_ATTR + if (event != ASTState.Trace.Event.INC_FLUSH_ATTR) { + return; + } + System.out.println("** observer check INC_FLUSH_ATTR event"); + // iterate through list, if matching pair. could maybe be more efficient. + for (RagConnectObserverEntry entry : observedNodes) { + if (entry.node.equals(node) && entry.attributeString.equals(attribute)) { + // hit. call the attribute/nta-token + System.out.println("** observer hit " + entry.node + " on " + entry.attributeString); + entry.attributeCall.run(); + } + } + } + } + + private static RagConnectObserver ASTNode._ragConnectObserverInstance; + RagConnectObserver ASTNode._ragConnectObserver() { + if (_ragConnectObserverInstance == null) { + // does not matter, which node is used to create the observer as ASTState/tracing is also static + _ragConnectObserverInstance = new RagConnectObserver(this); + } + return _ragConnectObserverInstance; + } +} +{{/incrementalOptionActive}} diff --git a/ragconnect.base/src/main/resources/sendDefinition.mustache b/ragconnect.base/src/main/resources/sendDefinition.mustache index 44db8f7..bee941f 100644 --- a/ragconnect.base/src/main/resources/sendDefinition.mustache +++ b/ragconnect.base/src/main/resources/sendDefinition.mustache @@ -3,6 +3,12 @@ private byte[] {{parentTypeName}}.{{lastValue}} = null; public boolean {{parentTypeName}}.{{connectMethod}}(String {{connectParameterName}}, boolean writeCurrentValue) throws java.io.IOException { {{>handleUri}} + ConnectToken connectToken; + if (connectTokens.computeIfAbsent(this, astNode -> new java.util.HashMap<java.net.URI, ConnectToken>()) + .get(uri) != null) { + System.err.println("Already connected for " + uri + " on " + this + "!"); + return true; + } switch (scheme) { {{#usesMqtt}} case "mqtt": @@ -18,35 +24,45 @@ public boolean {{parentTypeName}}.{{connectMethod}}(String {{connectParameterNam if (writeCurrentValue) { {{writeMethod}}(); } + connectToken = new ConnectToken(uri); break; {{/usesMqtt}} {{#usesRest}} case "rest": - ConnectToken connectToken = {{restHandlerAttribute}}().newGETConnection(uri, () -> { + connectToken = {{restHandlerAttribute}}().newGETConnection(uri, () -> { {{updateMethod}}(); return new String({{lastValue}}); }); if (connectToken == null) { return false; } - connectTokens.computeIfAbsent(this, astNode -> new java.util.HashMap<java.net.URI, ConnectToken>()) - .put(uri, connectToken); break; {{/usesRest}} default: System.err.println("Unknown protocol '" + scheme + "'."); return false; } - _ragConnectObserver().add(this, "{{parentTypeName}}.get{{tokenName}}()", () -> { + connectTokens.computeIfAbsent(this, astNode -> new java.util.HashMap<java.net.URI, ConnectToken>()) + .put(uri, connectToken); + {{#incrementalOptionActive}} + _ragConnectObserver().add(connectToken, this, "{{parentTypeName}}.get{{tokenName}}()", () -> { if (this.{{updateMethod}}()) { this.{{writeMethod}}(); } }); + {{/incrementalOptionActive}} return true; } public boolean {{parentTypeName}}.{{disconnectMethod}}(String {{connectParameterName}}) throws java.io.IOException { {{>handleUri}} + ConnectToken connectToken = connectTokens.get(this).remove(uri); + if (connectToken == null) { + System.err.println("Disconnect without connect for " + uri + " on " + this + "!"); + } + {{#incrementalOptionActive}} + _ragConnectObserver().remove(connectToken); + {{/incrementalOptionActive}} switch (scheme) { {{#usesMqtt}} case "mqtt": @@ -56,7 +72,7 @@ public boolean {{parentTypeName}}.{{disconnectMethod}}(String {{connectParameter {{/usesMqtt}} {{#usesRest}} case "rest": - {{restHandlerAttribute}}().disconnect(connectTokens.get(this).get(uri)); + {{restHandlerAttribute}}().disconnect(connectToken); break; {{/usesRest}} default: diff --git a/ragconnect.tests/build.gradle b/ragconnect.tests/build.gradle index 9af1e5b..0788d66 100644 --- a/ragconnect.tests/build.gradle +++ b/ragconnect.tests/build.gradle @@ -1,8 +1,14 @@ buildscript { - repositories.mavenCentral() + repositories { + mavenCentral() + maven { + name "gitlab-maven" + url "https://git-st.inf.tu-dresden.de/api/v4/groups/jastadd/-/packages/maven" + } + } dependencies { classpath 'org.jastadd:jastaddgradle:1.13.3' - classpath fileTree(include: ['buildSrc.jar'], dir: '../libs') + classpath 'org.jastadd.relast:relast-test:0.2.4' } } @@ -24,7 +30,6 @@ group = 'de.tudresden.inf.st' repositories { mavenCentral() - jcenter() } dependencies { @@ -82,7 +87,9 @@ sourceSets.test.java.srcDir genSrc idea.module.generatedSourceDirs += genSrc clean { - delete 'src/test/02-after-ragconnect/*/', 'src/test/03-after-relast/*/', 'src/test/java-gen/*/' + delete fileTree(dir: 'src/test/02-after-ragconnect/', exclude: '.gitignore') + delete fileTree(dir: 'src/test/03-after-relast/', exclude: '.gitignore') + delete fileTree(dir: 'src/test/java-gen/', exclude: '.gitignore') } // --- Test: Example --- @@ -332,6 +339,7 @@ task compileTutorialTest(type: RelastTest) { moreInputFiles 'src/test/01-input/tutorial/Test.jadd', 'src/test/02-after-ragconnect/tutorial/MqttHandler.jadd', 'src/test/02-after-ragconnect/tutorial/RagConnect.jadd' +// extraJastAddOptions "--tracing=cache,flush" } compileTestJava.dependsOn compileTutorialTest -- GitLab