aspect Navigation { // --- program --- eq Ros2Rag.getChild().program() = getProgram(); eq MRos2Rag.getChild().program() = getRos2Rag().program(); // --- ros2rag --- inh Ros2Rag ASTNode.ros2rag(); eq Ros2Rag.getChild().ros2rag() = this; eq MRos2Rag.getChild().ros2rag() = getRos2Rag(); // --- containedFile (first equation should be in preprocessor) --- eq Program.getChild().containedFile() = null; eq Ros2Rag.getChild().containedFile() = null; // --- isTypeComponent (should be in preprocessor) --- syn boolean Component.isTypeComponent() = false; eq TypeComponent.isTypeComponent() = true; // --- asTypeComponent (should be in preprocessor) --- syn TypeComponent Component.asTypeComponent() = null; eq TypeComponent.asTypeComponent() = this; // --- isListComponent (should be in preprocessor) --- syn boolean Component.isListComponent() = false; eq ListComponent.isListComponent() = true; // --- asListComponent (should be in preprocessor) --- syn ListComponent Component.asListComponent() = null; eq ListComponent.asListComponent() = this; // --- containedFileName (should replace containedFile in preprocessor) --- inh String ASTNode.containedFileName(); eq GrammarFile.getChild().containedFileName() = getFileName(); eq Ros2Rag.getChild().containedFileName() = getFileName(); eq Program.getChild().containedFileName() = null; eq MRos2Rag.getChild().containedFileName() = null; // --- isTokenUpdateDefinition --- syn boolean UpdateDefinition.isTokenUpdateDefinition() = false; eq TokenUpdateDefinition.isTokenUpdateDefinition() = true; // --- asTokenUpdateDefinition --- syn TokenUpdateDefinition UpdateDefinition.asTokenUpdateDefinition() = null; eq TokenUpdateDefinition.asTokenUpdateDefinition() = this; // --- isWriteToMqttDefinition --- syn boolean UpdateDefinition.isWriteToMqttDefinition() = false; eq WriteToMqttDefinition.isWriteToMqttDefinition() = true; // --- asWriteToMqttDefinition --- syn WriteToMqttDefinition UpdateDefinition.asWriteToMqttDefinition() = null; eq WriteToMqttDefinition.asWriteToMqttDefinition() = this; // --- asReadFromMqttDefinition --- syn ReadFromMqttDefinition UpdateDefinition.asReadFromMqttDefinition() = null; eq ReadFromMqttDefinition.asReadFromMqttDefinition() = this; // --- targetUpdateDefinition --- syn WriteToMqttDefinition DependencyDefinition.targetUpdateDefinition() { // resolve definition in here, as we do not need resolveMethod in any other place (yet) for (UpdateDefinition updateDefinition : ros2rag().getUpdateDefinitionList()) { if (updateDefinition.isWriteToMqttDefinition() && updateDefinition.asWriteToMqttDefinition().getToken().equals(this.getTarget())) { return updateDefinition.asWriteToMqttDefinition(); } } return null; } // --- isDefaultMappingDefinition --- syn boolean MappingDefinition.isDefaultMappingDefinition() = false; eq DefaultMappingDefinition.isDefaultMappingDefinition() = true; // --- allTokenComponents --- coll java.util.Set Program.allTokenComponents() [new java.util.HashSet<>()] root Program; TokenComponent contributes this to Program.allTokenComponents() for program(); }