diff --git a/ragconnect.base/src/main/jastadd/Intermediate.jadd b/ragconnect.base/src/main/jastadd/Intermediate.jadd index 1fdb8c82051890d91d11e1a76a880bfc257be945..bcd4cc4da4242ccd317f3d23bb66bb70a62f3599 100644 --- a/ragconnect.base/src/main/jastadd/Intermediate.jadd +++ b/ragconnect.base/src/main/jastadd/Intermediate.jadd @@ -3,72 +3,6 @@ Design considerations - InnerMappingDefinition needed for iteration attribute (first, last) - not possible with list-relation - no complete intermediate structure, but instead single nodes where applicable/needed */ -aspect NewStuff { - // unsorted - inh boolean EndpointDefinition.isImplied(); - eq ConnectSpecification.getEndpointDefinition().isImplied() = false; - eq EndpointTarget.impliedEndpointDefinitions().isImplied() = true; - - syn String TypeComponent.disconnectMethodName() { - List<TypeEndpointTarget> typeEndpointTargets = getTypeEndpointTargets(); - if (typeEndpointTargets.isEmpty()) { - return "MISSING_ENDPOINT"; - } else { - return typeEndpointTargets.get(0).containingEndpointDefinition().disconnectMethodName(); - } - } - syn String RagConnect.observerInstanceFieldName() = internalRagConnectPrefix() + "ObserverInstance"; - syn String RagConnect.observerInstanceSingletonMethodName() = internalRagConnectPrefix() + "Observer"; - syn String RagConnect.observerInstanceResetMethodName() = internalRagConnectPrefix() + "resetObserver"; - syn String RagConnect.touchedTerminalsMethodName() = internalRagConnectPrefix() + "touchedTerminals"; - syn String TypeComponent.touchedTerminalsMethodName() = ragconnect().touchedTerminalsMethodName(); - syn java.util.List<Component> TypeDecl.tokenComponents() { - return filteredComponents(Component::isTokenComponent); - } - syn java.util.List<Component> TypeDecl.normalComponents() { - return filteredComponents(comp -> comp.isTypeComponent() && !comp.isListComponent()); - } - syn java.util.List<Component> TypeDecl.listComponents() { - return filteredComponents(Component::isListComponent); - } - private java.util.List<Component> TypeDecl.filteredComponents(java.util.function.Predicate<Component> filter) { - java.util.List<Component> result = new java.util.ArrayList<>(); - for (Component comp : getComponentList()) { - if (filter.test(comp)) { - result.add(comp); - } - } - return result; - } - syn List<TypeDecl> RagConnect.allTypeDecls() { - return getProgram().typeDecls().stream() - .sorted(java.util.Comparator.comparing(TypeDecl::getName)) - .collect(java.util.stream.Collectors.toList()); - } - // send.mustache - syn boolean EndpointDefinition.needForwardingNTA() = getEndpointTarget().needForwardingNTA(); - syn String EndpointDefinition.forwardingNTA_Name() = getEndpointTarget().forwardingNTA_Name(); - syn String EndpointDefinition.forwardingNTA_Type() = getEndpointTarget().forwardingNTA_Type(); - - syn boolean EndpointTarget.needForwardingNTA() = false; - eq TypeEndpointTarget.needForwardingNTA() = containingEndpointDefinition().getSend() && !getType().getNTA(); - - syn String EndpointTarget.forwardingNTA_Name() = null; - eq TypeEndpointTarget.forwardingNTA_Name() = ragconnect().internalRagConnectPrefix() + getType().getName(); - - syn String EndpointTarget.forwardingNTA_Type() = null; - eq TypeEndpointTarget.forwardingNTA_Type() = getType().forwardingNTA_Type( - containingEndpointDefinition().getIndexBasedListAccess()); - - syn String TypeComponent.forwardingNTA_Type(boolean indexBasedListAccess); - eq NormalComponent.forwardingNTA_Type(boolean indexBasedListAccess) = getTypeDecl().getName(); - eq OptComponent.forwardingNTA_Type(boolean indexBasedListAccess) = - ragconnect().configJastAddOpt() + "<" + getTypeDecl().getName() + ">"; - eq ListComponent.forwardingNTA_Type(boolean indexBasedListAccess) = indexBasedListAccess ? - getTypeDecl().getName() : - ragconnect().configJastAddList() + "<" + getTypeDecl().getName() + ">"; -} - aspect SharedMustache { // === RagConnect === syn boolean RagConnect.configIncrementalOptionActive() = getConfiguration().getIncrementalOptionActive(); @@ -83,6 +17,9 @@ aspect SharedMustache { syn String RagConnect.internalRagConnectPrefix() = "_ragconnect_"; + syn String RagConnect.observerInstanceSingletonMethodName() = internalRagConnectPrefix() + "Observer"; + syn String RagConnect.observerInstanceResetMethodName() = internalRagConnectPrefix() + "resetObserver"; + syn String RagConnect.rootNodeName() = getConfiguration().getRootNode().getName(); // === EndpointDefinition === @@ -286,8 +223,26 @@ aspect MustacheRagConnect { return result; } + syn List<TypeDecl> RagConnect.allTypeDecls() { + return getProgram().typeDecls().stream() + .sorted(java.util.Comparator.comparing(TypeDecl::getName)) + .collect(java.util.stream.Collectors.toList()); + } + // > allMappingDefinitions in Mappings.jrag + syn String RagConnect.observerInstanceFieldName() = internalRagConnectPrefix() + "ObserverInstance"; + + syn java.util.List<Component> TypeDecl.tokenComponents() { + return filteredComponents(Component::isTokenComponent); + } + syn java.util.List<Component> TypeDecl.normalComponents() { + return filteredComponents(comp -> comp.isTypeComponent() && !comp.isListComponent()); + } + syn java.util.List<Component> TypeDecl.listComponents() { + return filteredComponents(Component::isListComponent); + } + syn List<TokenComponent> RagConnect.tokenComponentsThatNeedProxy() { List<TokenComponent> result = new ArrayList<>(); for (TokenComponent token : getProgram().allTokenComponents()) { @@ -298,6 +253,8 @@ aspect MustacheRagConnect { return result; } + syn String RagConnect.touchedTerminalsMethodName() = internalRagConnectPrefix() + "touchedTerminals"; + syn List<TypeDecl> RagConnect.typeDeclsOfContextFreeEndpointTargets() { List<TypeDecl> result = new ArrayList<>(); for (EndpointTarget target : givenEndpointTargetList()) { @@ -353,6 +310,15 @@ aspect MustacheRagConnect { return result; } + private java.util.List<Component> TypeDecl.filteredComponents(java.util.function.Predicate<Component> filter) { + java.util.List<Component> result = new java.util.ArrayList<>(); + for (Component comp : getComponentList()) { + if (filter.test(comp)) { + result.add(comp); + } + } + return result; + } } aspect MustacheReceiveAndSendAndHandleUri { @@ -457,6 +423,10 @@ aspect MustacheSendDefinition { syn String EndpointDefinition.lastValueSetter() = senderName() + ".setLastValue"; + syn boolean EndpointDefinition.needForwardingNTA() = getEndpointTarget().needForwardingNTA(); + syn String EndpointDefinition.forwardingNTA_Name() = getEndpointTarget().forwardingNTA_Name(); + syn String EndpointDefinition.forwardingNTA_Type() = getEndpointTarget().forwardingNTA_Type(); + syn String EndpointDefinition.senderName() = getEndpointTarget().senderName(); syn boolean EndpointDefinition.shouldSendValue() = getSend() && getEndpointTarget().entityIsNormalAttribute(); @@ -468,6 +438,24 @@ aspect MustacheSendDefinition { syn String EndpointDefinition.writeMethodName() = toMustache().writeMethodName(); // === attributes needed for computing above ones === + syn boolean EndpointTarget.needForwardingNTA() = false; + eq TypeEndpointTarget.needForwardingNTA() = containingEndpointDefinition().getSend() && !getType().getNTA(); + + syn String EndpointTarget.forwardingNTA_Name() = null; + eq TypeEndpointTarget.forwardingNTA_Name() = ragconnect().internalRagConnectPrefix() + getType().getName(); + + syn String EndpointTarget.forwardingNTA_Type() = null; + eq TypeEndpointTarget.forwardingNTA_Type() = getType().forwardingNTA_Type( + containingEndpointDefinition().getIndexBasedListAccess()); + + syn String TypeComponent.forwardingNTA_Type(boolean indexBasedListAccess); + eq NormalComponent.forwardingNTA_Type(boolean indexBasedListAccess) = getTypeDecl().getName(); + eq OptComponent.forwardingNTA_Type(boolean indexBasedListAccess) = + ragconnect().configJastAddOpt() + "<" + getTypeDecl().getName() + ">"; + eq ListComponent.forwardingNTA_Type(boolean indexBasedListAccess) = indexBasedListAccess ? + getTypeDecl().getName() : + ragconnect().configJastAddList() + "<" + getTypeDecl().getName() + ">"; + syn String EndpointTarget.senderName(); eq TokenEndpointTarget.senderName() = ragconnect().internalRagConnectPrefix() + "_sender_" + getToken().getName(); eq TypeEndpointTarget.senderName() = ragconnect().internalRagConnectPrefix() + "_sender_" + getType().getName(); @@ -546,6 +534,14 @@ aspect MustacheTokenComponent { aspect MustacheTypeDecl { // === TypeComponent === syn String TypeComponent.parentTypeName() = containingTypeDecl().getName(); + syn String TypeComponent.disconnectMethodName() { + List<TypeEndpointTarget> typeEndpointTargets = getTypeEndpointTargets(); + if (typeEndpointTargets.isEmpty()) { + return "MISSING_ENDPOINT"; + } else { + return typeEndpointTargets.get(0).containingEndpointDefinition().disconnectMethodName(); + } + } // === TypeDecl === syn List<TypeComponent> TypeDecl.occurencesInProductionRules() {