From 75f973c257dc9b68b6248b1cf130642bed1c31bd Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Fri, 14 Aug 2020 19:23:25 +0200 Subject: [PATCH] Update to version 0.2.2 - allow normal tokens to be sent --- ragconnect.base/build.gradle | 6 +++--- ragconnect.base/src/main/jastadd/Analysis.jrag | 16 +++++++++++++++- ragconnect.base/src/main/jastadd/Errors.jrag | 4 ---- ragconnect.base/src/main/jastadd/Navigation.jrag | 4 ++++ .../src/main/jastadd/RagConnect.relast | 2 +- .../src/main/jastadd/backend/Generation.jadd | 13 +++++++++++-- .../jastadd/ragconnect/compiler/Compiler.java | 13 ++++--------- .../main/resources/ragConnectVersion.properties | 4 ++-- .../src/main/resources/sendDefinition.mustache | 2 ++ .../src/main/resources/tokenComponent.mustache | 5 +++++ 10 files changed, 47 insertions(+), 22 deletions(-) diff --git a/ragconnect.base/build.gradle b/ragconnect.base/build.gradle index 953e9c5..5fd73e5 100644 --- a/ragconnect.base/build.gradle +++ b/ragconnect.base/build.gradle @@ -51,9 +51,9 @@ task newVersion() { } } -sourceSets.main.java { - srcDir "src/gen/java" -} +File genSrc = file("src/gen/java"); +sourceSets.main.java.srcDir genSrc +idea.module.generatedSourceDirs += genSrc jar { manifest { diff --git a/ragconnect.base/src/main/jastadd/Analysis.jrag b/ragconnect.base/src/main/jastadd/Analysis.jrag index b623999..a1367a9 100644 --- a/ragconnect.base/src/main/jastadd/Analysis.jrag +++ b/ragconnect.base/src/main/jastadd/Analysis.jrag @@ -24,9 +24,17 @@ aspect Analysis { } // --- isAlreadyDefined --- - syn boolean TokenEndpointDefinition.isAlreadyDefined() = lookupTokenEndpointDefinitions(getToken()).size() > 1; + syn boolean TokenEndpointDefinition.isAlreadyDefined() { + return lookupTokenEndpointDefinitions(getToken()).stream() + .filter(this::matchesType) + .count() > 1; + } syn boolean DependencyDefinition.isAlreadyDefined() = lookupDependencyDefinition(getSource().containingTypeDecl(), getID()) != this; + syn boolean TokenEndpointDefinition.matchesType(TokenEndpointDefinition other); + eq ReceiveTokenEndpointDefinition.matchesType(TokenEndpointDefinition other) = other.isReceiveTokenEndpointDefinition(); + eq SendTokenEndpointDefinition.matchesType(TokenEndpointDefinition other) = other.isSendTokenEndpointDefinition(); + syn boolean MappingDefinitionType.assignableTo(JavaTypeUse target); eq JavaMappingDefinitionType.assignableTo(JavaTypeUse target) = getType().assignableTo(target); eq JavaArrayMappingDefinitionType.assignableTo(JavaTypeUse target) { @@ -54,4 +62,10 @@ aspect Analysis { default: return getName(); } } + + // --- shouldSendValue --- + syn boolean TokenEndpointDefinition.shouldSendValue() = isSendTokenEndpointDefinition() && !getToken().getNTA(); + + // --- needProxyToken --- + syn boolean TokenComponent.needProxyToken() = !getDependencySourceDefinitionList().isEmpty() || getTokenEndpointDefinitionList().stream().anyMatch(TokenEndpointDefinition::shouldSendValue); } diff --git a/ragconnect.base/src/main/jastadd/Errors.jrag b/ragconnect.base/src/main/jastadd/Errors.jrag index fe2fcd5..88f3aec 100644 --- a/ragconnect.base/src/main/jastadd/Errors.jrag +++ b/ragconnect.base/src/main/jastadd/Errors.jrag @@ -28,10 +28,6 @@ aspect Errors { getToken().effectiveJavaTypeUse()) to RagConnect.errors(); - SendTokenEndpointDefinition contributes error("Sending target token must be an NTA token!") - when !getToken().getNTA() - to RagConnect.errors(); - SendTokenEndpointDefinition contributes error("Send definition already defined for " + getToken().getName()) when isAlreadyDefined() to RagConnect.errors(); diff --git a/ragconnect.base/src/main/jastadd/Navigation.jrag b/ragconnect.base/src/main/jastadd/Navigation.jrag index 752fc36..f6fc20b 100644 --- a/ragconnect.base/src/main/jastadd/Navigation.jrag +++ b/ragconnect.base/src/main/jastadd/Navigation.jrag @@ -35,6 +35,10 @@ aspect Navigation { syn SendTokenEndpointDefinition EndpointDefinition.asSendTokenEndpointDefinition() = null; eq SendTokenEndpointDefinition.asSendTokenEndpointDefinition() = this; + // --- isReceiveTokenEndpointDefinition --- + syn boolean EndpointDefinition.isReceiveTokenEndpointDefinition() = false; + eq ReceiveTokenEndpointDefinition.isReceiveTokenEndpointDefinition() = true; + // --- asReceiveTokenEndpointDefinition --- syn ReceiveTokenEndpointDefinition EndpointDefinition.asReceiveTokenEndpointDefinition() = null; eq ReceiveTokenEndpointDefinition.asReceiveTokenEndpointDefinition() = this; diff --git a/ragconnect.base/src/main/jastadd/RagConnect.relast b/ragconnect.base/src/main/jastadd/RagConnect.relast index accc617..9958106 100644 --- a/ragconnect.base/src/main/jastadd/RagConnect.relast +++ b/ragconnect.base/src/main/jastadd/RagConnect.relast @@ -5,7 +5,7 @@ abstract EndpointDefinition ::= <AlwaysApply:boolean> ; rel EndpointDefinition.Mapping* <-> MappingDefinition.UsedAt*; abstract TokenEndpointDefinition : EndpointDefinition; -rel TokenEndpointDefinition.Token -> TokenComponent; +rel TokenEndpointDefinition.Token <-> TokenComponent.TokenEndpointDefinition*; ReceiveTokenEndpointDefinition : TokenEndpointDefinition; SendTokenEndpointDefinition : TokenEndpointDefinition; diff --git a/ragconnect.base/src/main/jastadd/backend/Generation.jadd b/ragconnect.base/src/main/jastadd/backend/Generation.jadd index 4b8d357..6b63992 100644 --- a/ragconnect.base/src/main/jastadd/backend/Generation.jadd +++ b/ragconnect.base/src/main/jastadd/backend/Generation.jadd @@ -71,6 +71,7 @@ aspect AttributesForMustache { syn String MSendDefinition.updateMethod() = "_update_" + tokenName(); syn String MSendDefinition.writeMethod() = "_writeLastValue_" + tokenName(); syn String MSendDefinition.tokenResetMethod() = "get" + tokenName() + "_reset"; + syn boolean MSendDefinition.shouldSendValue() = endpointDef().shouldSendValue(); // --- MMappingDefinition --- syn String MMappingDefinition.toType() = getMappingDefinition().getToType().prettyPrint(); @@ -96,8 +97,16 @@ aspect AttributesForMustache { syn String MTokenComponent.parentTypeName() = getTokenComponent().containingTypeDecl().getName(); syn String MTokenComponent.name() = getTokenComponent().getName(); syn String MTokenComponent.javaType() = getTokenComponent().effectiveJavaTypeUse().prettyPrint(); - syn String MTokenComponent.internalName() = getTokenComponent().getDependencySourceDefinitionList().isEmpty() ? externalName() : "_internal_" + name(); + syn String MTokenComponent.internalName() = getTokenComponent().needProxyToken() ? "_internal_" + name() : externalName(); syn String MTokenComponent.externalName() = name(); + syn MSendDefinition MTokenComponent.normalTokenSendDef() { + for (TokenEndpointDefinition endpointDef : getTokenComponent().getTokenEndpointDefinitionList()) { + if (endpointDef.shouldSendValue()) { + return endpointDef.asSendTokenEndpointDefinition().toMustache(); + } + } + return null; + } // --- toMustache --- syn lazy MRagConnect RagConnect.toMustache() { @@ -118,7 +127,7 @@ aspect AttributesForMustache { result.addDependencyDefinition(def.toMustache()); } for (TokenComponent token : getProgram().allTokenComponents()) { - if (!token.getDependencySourceDefinitionList().isEmpty()) { + if (token.needProxyToken()) { result.addTokenComponent(token.toMustache()); } } 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 711169e..28a3f20 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 @@ -216,6 +216,7 @@ public class Compiler extends AbstractCompiler { if (!atLeastOneGrammar && !atLeastOneRagConnect) { System.exit(1); } + ragConnect.flushTreeCache(); ragConnect.treeResolveAll(); ragConnect.additionalRelations().forEach(ragConnectGrammarPart::addDeclaration); ASTNode.loggingEnabledForReads = optionLogReads.value(); @@ -264,15 +265,9 @@ public class Compiler extends AbstractCompiler { } private void mergeRagConnectDefinitions(RagConnect ragConnect, RagConnect ragConnectToIntegrate) { - for (EndpointDefinition endpointDefinition : ragConnectToIntegrate.getEndpointDefinitionList()) { - ragConnect.addEndpointDefinition(endpointDefinition); - } - for (MappingDefinition mappingDefinition : ragConnectToIntegrate.getMappingDefinitionList()) { - ragConnect.addMappingDefinition(mappingDefinition); - } - for (DependencyDefinition dependencyDefinition : ragConnectToIntegrate.getDependencyDefinitionList()) { - ragConnect.addDependencyDefinition(dependencyDefinition); - } + ragConnect.setEndpointDefinitionList(ragConnectToIntegrate.getEndpointDefinitionList()); + ragConnect.setMappingDefinitionList(ragConnectToIntegrate.getMappingDefinitionList()); + ragConnect.setDependencyDefinitionList(ragConnectToIntegrate.getDependencyDefinitionList()); } // protected void printUsage() { diff --git a/ragconnect.base/src/main/resources/ragConnectVersion.properties b/ragconnect.base/src/main/resources/ragConnectVersion.properties index 768893e..a2fe048 100644 --- a/ragconnect.base/src/main/resources/ragConnectVersion.properties +++ b/ragconnect.base/src/main/resources/ragConnectVersion.properties @@ -1,2 +1,2 @@ -#Fri Aug 14 13:28:32 CEST 2020 -version=0.2.1 +#Fri Aug 14 19:22:30 CEST 2020 +version=0.2.2 diff --git a/ragconnect.base/src/main/resources/sendDefinition.mustache b/ragconnect.base/src/main/resources/sendDefinition.mustache index d6601aa..60f5efc 100644 --- a/ragconnect.base/src/main/resources/sendDefinition.mustache +++ b/ragconnect.base/src/main/resources/sendDefinition.mustache @@ -36,7 +36,9 @@ public boolean {{parentTypeName}}.{{connectMethod}}(String {{connectParameterNam } protected boolean {{parentTypeName}}.{{updateMethod}}() { + {{^shouldSendValue}} {{tokenResetMethod}}(); + {{/shouldSendValue}} {{> mappingApplication}} {{lastValue}} = {{lastResult}}; // normally we would return true here. unless no connect method was called so far to initialize {{sender}} yet diff --git a/ragconnect.base/src/main/resources/tokenComponent.mustache b/ragconnect.base/src/main/resources/tokenComponent.mustache index ec91e68..169f5f6 100644 --- a/ragconnect.base/src/main/resources/tokenComponent.mustache +++ b/ragconnect.base/src/main/resources/tokenComponent.mustache @@ -9,6 +9,11 @@ public {{parentTypeName}} {{parentTypeName}}.set{{name}}({{javaType}} value) { {{/targetEndpointDefinition}} } {{/DependencyDefinitions}} + {{#normalTokenSendDef}} + if ({{updateMethod}}()) { + {{writeMethod}}(); + } + {{/normalTokenSendDef}} return this; } -- GitLab