Bug 512819 - [actioneditor] missing highlighting and proposal for event
ports in guard window
diff --git a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/DefaultDetailExpressionProvider.xtend b/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/DefaultDetailExpressionProvider.xtend
index b6ee19d..8a72ed9 100644
--- a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/DefaultDetailExpressionProvider.xtend
+++ b/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/DefaultDetailExpressionProvider.xtend
@@ -30,28 +30,25 @@
 		// no super call, keep it simple
 		val List<ExpressionFeature> scope = newArrayList
 
-		if (transitionEventData != null)
-			scope += createExprFeature(transitionEventData)
+		if(transitionEventData != null) { 
+			scope += transitionEventData.createExprFeature(ExpressionPostfix.NONE)
+		}
+		scope += actorClass.latestOperations.map[createExprFeature]
+		scope += actorClass.allAttributes.map[createExprFeature]
 		actorClass.allInterfaceItems.forEach [
 			switch it {
 				SPP case isEventDriven/* fall through */,
 				Port case isEventDriven && isReplicated: {
-					scope += createExprFeature // additional feature for broadcast 
+					scope += createExprFeature(ExpressionPostfix.NONE) // additional feature for broadcast 
 					scope += createExprFeature(ExpressionPostfix.BRACKETS)
 				}
 				Port case isReplicated/* fall through  */,
 				SPP:
 					scope += createExprFeature(ExpressionPostfix.BRACKETS)
 				default:
-					scope += createExprFeature
+					scope += createExprFeature(ExpressionPostfix.NONE)
 			}
 		]
-		scope += actorClass.latestOperations.map[createExprFeature(ExpressionPostfix.PARENTHESES)]
-		scope += actorClass.allAttributes.map[
-			switch (size) {
-				case size > 1: createExprFeature(ExpressionPostfix.BRACKETS)
-				default: createExprFeature
-			}]
 
 		return scope
 	}
@@ -64,29 +61,27 @@
 		switch obj : ctx.data {
 			Port case obj.multiplicity == 1/* fall through  */,
 			SAP: scope +=
-				obj.protocol.getAllOperations(!obj.conjugated).map[createExprFeature(ExpressionPostfix.PARENTHESES)]
+				obj.protocol.getAllOperations(!obj.conjugated).map[createExprFeature]
 		}
 		switch obj : ctx.data {
 			InterfaceItem: {
 				val pc = obj.protocol
 				switch pc.commType {
 					case EVENT_DRIVEN:
-						scope += pc.getAllMessages(obj.conjugated).map[createExprFeature(ExpressionPostfix.PARENTHESES)]
+						scope += pc.getAllMessages(obj.conjugated).map[createExprFeature]
 					case DATA_DRIVEN:
 						if (obj.conjugated)
-							scope += pc.allIncomingMessages.map[createExprFeature(ExpressionPostfix.PARENTHESES)]
-						else
 							scope += pc.allIncomingMessages.map[createExprFeature]
-					case SYNCHRONOUS: {
-					}
+						else
+							scope += pc.allIncomingMessages.map[createExprFeature(ExpressionPostfix.NONE)] // data message has no Parenthesis
+					case SYNCHRONOUS: {}
 				}
 
 			// TODO Attributes ?
 			}
 			Attribute case obj.type.type instanceof DataClass: {
 				val dc = obj.type.type as DataClass
-				scope += dc.allAttributes.map[
-					if(size > 1) createExprFeature(ExpressionPostfix.BRACKETS) else createExprFeature]
+				scope += dc.allAttributes.map[createExprFeature]
 				// not supported yet by code translation:
 				// scope += dc.latestOperations.map[createExprFeature(ExpressionPostfix.PARENTHESES)]
 			}
diff --git a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/GuardDetailExpressionProvider.xtend b/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/GuardDetailExpressionProvider.xtend
index 955af89..f379933 100644
--- a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/GuardDetailExpressionProvider.xtend
+++ b/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/GuardDetailExpressionProvider.xtend
@@ -31,6 +31,9 @@
 
 import static extension org.eclipse.xtend.lib.annotations.AccessorType.*
 import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
+import org.eclipse.etrice.core.room.SAP
+import org.eclipse.etrice.core.room.Operation
+import org.eclipse.etrice.core.room.Message
 
 /**
  * Defines expression for fsm guards of an ActorClass
@@ -53,19 +56,16 @@
 	override getInitialFeatures() {
 		val List<ExpressionFeature> scope = newArrayList
 
-		if(transitionEventData != null)
-			scope += createExprFeature(transitionEventData)
-		scope += actorClass.allInterfaceItems.filter[isDataDriven && !isConjugated].map[
+		if(transitionEventData != null) { 
+			scope += transitionEventData.createExprFeature(ExpressionPostfix.NONE)
+		}
+		scope += actorClass.allInterfaceItems.filter[isEventDriven || !isConjugated].map[
 			switch it {
 				Port case isReplicated: createExprFeature(ExpressionPostfix.BRACKETS)
-				default: createExprFeature
-			}]
-		scope += actorClass.latestOperations.map[createExprFeature(ExpressionPostfix.PARENTHESES)]
-		scope += actorClass.allAttributes.map[
-			switch (size) {
-				case size > 1: createExprFeature(ExpressionPostfix.BRACKETS)
-				default: createExprFeature
-			}]
+				default: createExprFeature(ExpressionPostfix.NONE)
+		}]
+		scope += actorClass.latestOperations.map[createExprFeature]
+		scope += actorClass.allAttributes.map[createExprFeature]
 
 		return scope
 	}
@@ -75,27 +75,46 @@
 
 		val List<ExpressionFeature> scope = newArrayList
 		switch obj : ctx.data {
+			Port case obj.multiplicity == 1/* fall through  */,
+			SAP: scope +=
+				obj.protocol.getAllOperations(!obj.conjugated).map[createExprFeature]
+		}
+		switch obj : ctx.data {
 			InterfaceItem: {
 				val pc = obj.protocol
 				switch pc.commType {
 					case DATA_DRIVEN:
-						if (!obj.conjugated)
-							scope += pc.allIncomingMessages.map[createExprFeature]
+						if (!obj.conjugated) scope += pc.allIncomingMessages.map[createExprFeature]
+					case EVENT_DRIVEN: { /* no async message calls */}
+					case SYNCHRONOUS: {}
 				}
 			}
 			Attribute case obj.type.type instanceof DataClass: {
 				val dc = obj.type.type as DataClass
-				scope += dc.allAttributes.map[
-					if(size > 1) createExprFeature(ExpressionPostfix.BRACKETS) else createExprFeature]
-				scope += dc.latestOperations.map[createExprFeature(ExpressionPostfix.PARENTHESES)]
+				scope += dc.allAttributes.map[createExprFeature]
+				scope += dc.latestOperations.map[createExprFeature]
 			}
 		}
 
 		return scope
 	}
-
-	def protected createExprFeature(EObject eObj) {
-		createExprFeature(eObj, ExpressionPostfix.NONE)
+	
+	def ExpressionFeature createExprFeature(Operation it){
+		// assuming all operations have parenthesis
+		createExprFeature(ExpressionPostfix.PARENTHESES)
+	}
+	
+	def ExpressionFeature createExprFeature(Message it){
+		// assuming all message have parenthesis
+		createExprFeature(ExpressionPostfix.PARENTHESES)
+	}
+	
+	def ExpressionFeature createExprFeature(Attribute it){
+		// assuming all attributes have brackets or not depending on size
+		switch (size) {
+			case size > 1: createExprFeature(ExpressionPostfix.BRACKETS)
+			default: createExprFeature(ExpressionPostfix.NONE)
+		}
 	}
 
 	def protected createExprFeature(EObject eObj, ExpressionPostfix postfix) {
diff --git a/plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/DefaultDetailExpressionProvider.java b/plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/DefaultDetailExpressionProvider.java
index 81e8370..1d525ac 100644
--- a/plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/DefaultDetailExpressionProvider.java
+++ b/plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/DefaultDetailExpressionProvider.java
@@ -13,6 +13,7 @@
 import com.google.common.base.Objects;
 import com.google.common.collect.Iterables;
 import java.util.List;
+import java.util.function.Consumer;
 import org.eclipse.etrice.core.room.ActorClass;
 import org.eclipse.etrice.core.room.Attribute;
 import org.eclipse.etrice.core.room.CommunicationType;
@@ -32,9 +33,7 @@
 import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor;
 import org.eclipse.xtext.xbase.lib.CollectionLiterals;
 import org.eclipse.xtext.xbase.lib.Functions.Function1;
-import org.eclipse.xtext.xbase.lib.IterableExtensions;
 import org.eclipse.xtext.xbase.lib.ListExtensions;
-import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
 
 /**
  * Defines expression for fsm detail code of an ActorClass
@@ -47,13 +46,31 @@
     final List<IDetailExpressionProvider.ExpressionFeature> scope = CollectionLiterals.<IDetailExpressionProvider.ExpressionFeature>newArrayList();
     boolean _notEquals = (!Objects.equal(this.transitionEventData, null));
     if (_notEquals) {
-      IDetailExpressionProvider.ExpressionFeature _createExprFeature = this.createExprFeature(this.transitionEventData);
+      IDetailExpressionProvider.ExpressionFeature _createExprFeature = this.createExprFeature(this.transitionEventData, IDetailExpressionProvider.ExpressionPostfix.NONE);
       scope.add(_createExprFeature);
     }
-    List<InterfaceItem> _allInterfaceItems = this.roomHelpers.getAllInterfaceItems(this.actorClass);
-    final Procedure1<InterfaceItem> _function = new Procedure1<InterfaceItem>() {
+    List<StandardOperation> _latestOperations = this.roomHelpers.getLatestOperations(this.actorClass);
+    final Function1<StandardOperation, IDetailExpressionProvider.ExpressionFeature> _function = new Function1<StandardOperation, IDetailExpressionProvider.ExpressionFeature>() {
       @Override
-      public void apply(final InterfaceItem it) {
+      public IDetailExpressionProvider.ExpressionFeature apply(final StandardOperation it) {
+        return DefaultDetailExpressionProvider.this.createExprFeature(it);
+      }
+    };
+    List<IDetailExpressionProvider.ExpressionFeature> _map = ListExtensions.<StandardOperation, IDetailExpressionProvider.ExpressionFeature>map(_latestOperations, _function);
+    Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map);
+    List<Attribute> _allAttributes = this.roomHelpers.getAllAttributes(this.actorClass);
+    final Function1<Attribute, IDetailExpressionProvider.ExpressionFeature> _function_1 = new Function1<Attribute, IDetailExpressionProvider.ExpressionFeature>() {
+      @Override
+      public IDetailExpressionProvider.ExpressionFeature apply(final Attribute it) {
+        return DefaultDetailExpressionProvider.this.createExprFeature(it);
+      }
+    };
+    List<IDetailExpressionProvider.ExpressionFeature> _map_1 = ListExtensions.<Attribute, IDetailExpressionProvider.ExpressionFeature>map(_allAttributes, _function_1);
+    Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map_1);
+    List<InterfaceItem> _allInterfaceItems = this.roomHelpers.getAllInterfaceItems(this.actorClass);
+    final Consumer<InterfaceItem> _function_2 = new Consumer<InterfaceItem>() {
+      @Override
+      public void accept(final InterfaceItem it) {
         boolean _matched = false;
         if (it instanceof SPP) {
           boolean _isEventDriven = ((SPP)it).isEventDriven();
@@ -69,7 +86,7 @@
           }
         }
         if (_matched) {
-          IDetailExpressionProvider.ExpressionFeature _createExprFeature = DefaultDetailExpressionProvider.this.createExprFeature(it);
+          IDetailExpressionProvider.ExpressionFeature _createExprFeature = DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.NONE);
           scope.add(_createExprFeature);
           IDetailExpressionProvider.ExpressionFeature _createExprFeature_1 = DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.BRACKETS);
           scope.add(_createExprFeature_1);
@@ -92,42 +109,12 @@
           }
         }
         if (!_matched) {
-          IDetailExpressionProvider.ExpressionFeature _createExprFeature_3 = DefaultDetailExpressionProvider.this.createExprFeature(it);
+          IDetailExpressionProvider.ExpressionFeature _createExprFeature_3 = DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.NONE);
           scope.add(_createExprFeature_3);
         }
       }
     };
-    IterableExtensions.<InterfaceItem>forEach(_allInterfaceItems, _function);
-    List<StandardOperation> _latestOperations = this.roomHelpers.getLatestOperations(this.actorClass);
-    final Function1<StandardOperation, IDetailExpressionProvider.ExpressionFeature> _function_1 = new Function1<StandardOperation, IDetailExpressionProvider.ExpressionFeature>() {
-      @Override
-      public IDetailExpressionProvider.ExpressionFeature apply(final StandardOperation it) {
-        return DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.PARENTHESES);
-      }
-    };
-    List<IDetailExpressionProvider.ExpressionFeature> _map = ListExtensions.<StandardOperation, IDetailExpressionProvider.ExpressionFeature>map(_latestOperations, _function_1);
-    Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map);
-    List<Attribute> _allAttributes = this.roomHelpers.getAllAttributes(this.actorClass);
-    final Function1<Attribute, IDetailExpressionProvider.ExpressionFeature> _function_2 = new Function1<Attribute, IDetailExpressionProvider.ExpressionFeature>() {
-      @Override
-      public IDetailExpressionProvider.ExpressionFeature apply(final Attribute it) {
-        IDetailExpressionProvider.ExpressionFeature _switchResult = null;
-        int _size = it.getSize();
-        boolean _matched = false;
-        int _size_1 = it.getSize();
-        boolean _greaterThan = (_size_1 > 1);
-        if (_greaterThan) {
-          _matched=true;
-          _switchResult = DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.BRACKETS);
-        }
-        if (!_matched) {
-          _switchResult = DefaultDetailExpressionProvider.this.createExprFeature(it);
-        }
-        return _switchResult;
-      }
-    };
-    List<IDetailExpressionProvider.ExpressionFeature> _map_1 = ListExtensions.<Attribute, IDetailExpressionProvider.ExpressionFeature>map(_allAttributes, _function_2);
-    Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map_1);
+    _allInterfaceItems.forEach(_function_2);
     return scope;
   }
   
@@ -158,7 +145,7 @@
       final Function1<PortOperation, IDetailExpressionProvider.ExpressionFeature> _function = new Function1<PortOperation, IDetailExpressionProvider.ExpressionFeature>() {
         @Override
         public IDetailExpressionProvider.ExpressionFeature apply(final PortOperation it) {
-          return DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.PARENTHESES);
+          return DefaultDetailExpressionProvider.this.createExprFeature(it);
         }
       };
       List<IDetailExpressionProvider.ExpressionFeature> _map = ListExtensions.<PortOperation, IDetailExpressionProvider.ExpressionFeature>map(_allOperations, _function);
@@ -179,7 +166,7 @@
             final Function1<Message, IDetailExpressionProvider.ExpressionFeature> _function_1 = new Function1<Message, IDetailExpressionProvider.ExpressionFeature>() {
               @Override
               public IDetailExpressionProvider.ExpressionFeature apply(final Message it) {
-                return DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.PARENTHESES);
+                return DefaultDetailExpressionProvider.this.createExprFeature(it);
               }
             };
             List<IDetailExpressionProvider.ExpressionFeature> _map_1 = ListExtensions.<Message, IDetailExpressionProvider.ExpressionFeature>map(_allMessages, _function_1);
@@ -192,7 +179,7 @@
               final Function1<Message, IDetailExpressionProvider.ExpressionFeature> _function_2 = new Function1<Message, IDetailExpressionProvider.ExpressionFeature>() {
                 @Override
                 public IDetailExpressionProvider.ExpressionFeature apply(final Message it) {
-                  return DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.PARENTHESES);
+                  return DefaultDetailExpressionProvider.this.createExprFeature(it);
                 }
               };
               List<IDetailExpressionProvider.ExpressionFeature> _map_2 = ListExtensions.<Message, IDetailExpressionProvider.ExpressionFeature>map(_allIncomingMessages, _function_2);
@@ -202,7 +189,7 @@
               final Function1<Message, IDetailExpressionProvider.ExpressionFeature> _function_3 = new Function1<Message, IDetailExpressionProvider.ExpressionFeature>() {
                 @Override
                 public IDetailExpressionProvider.ExpressionFeature apply(final Message it) {
-                  return DefaultDetailExpressionProvider.this.createExprFeature(it);
+                  return DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.NONE);
                 }
               };
               List<IDetailExpressionProvider.ExpressionFeature> _map_3 = ListExtensions.<Message, IDetailExpressionProvider.ExpressionFeature>map(_allIncomingMessages_1, _function_3);
@@ -229,15 +216,7 @@
           final Function1<Attribute, IDetailExpressionProvider.ExpressionFeature> _function_1 = new Function1<Attribute, IDetailExpressionProvider.ExpressionFeature>() {
             @Override
             public IDetailExpressionProvider.ExpressionFeature apply(final Attribute it) {
-              IDetailExpressionProvider.ExpressionFeature _xifexpression = null;
-              int _size = it.getSize();
-              boolean _greaterThan = (_size > 1);
-              if (_greaterThan) {
-                _xifexpression = DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.BRACKETS);
-              } else {
-                _xifexpression = DefaultDetailExpressionProvider.this.createExprFeature(it);
-              }
-              return _xifexpression;
+              return DefaultDetailExpressionProvider.this.createExprFeature(it);
             }
           };
           List<IDetailExpressionProvider.ExpressionFeature> _map_1 = ListExtensions.<Attribute, IDetailExpressionProvider.ExpressionFeature>map(_allAttributes, _function_1);
diff --git a/plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/GuardDetailExpressionProvider.java b/plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/GuardDetailExpressionProvider.java
index b5c88cf..14360cd 100644
--- a/plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/GuardDetailExpressionProvider.java
+++ b/plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/GuardDetailExpressionProvider.java
@@ -24,9 +24,12 @@
 import org.eclipse.etrice.core.room.DataType;
 import org.eclipse.etrice.core.room.InterfaceItem;
 import org.eclipse.etrice.core.room.Message;
+import org.eclipse.etrice.core.room.Operation;
 import org.eclipse.etrice.core.room.Port;
+import org.eclipse.etrice.core.room.PortOperation;
 import org.eclipse.etrice.core.room.ProtocolClass;
 import org.eclipse.etrice.core.room.RefableType;
+import org.eclipse.etrice.core.room.SAP;
 import org.eclipse.etrice.core.room.StandardOperation;
 import org.eclipse.etrice.core.room.VarDecl;
 import org.eclipse.etrice.core.room.util.RoomHelpers;
@@ -67,14 +70,14 @@
     final List<IDetailExpressionProvider.ExpressionFeature> scope = CollectionLiterals.<IDetailExpressionProvider.ExpressionFeature>newArrayList();
     boolean _notEquals = (!Objects.equal(this.transitionEventData, null));
     if (_notEquals) {
-      IDetailExpressionProvider.ExpressionFeature _createExprFeature = this.createExprFeature(this.transitionEventData);
+      IDetailExpressionProvider.ExpressionFeature _createExprFeature = this.createExprFeature(this.transitionEventData, IDetailExpressionProvider.ExpressionPostfix.NONE);
       scope.add(_createExprFeature);
     }
     List<InterfaceItem> _allInterfaceItems = this.roomHelpers.getAllInterfaceItems(this.actorClass);
     final Function1<InterfaceItem, Boolean> _function = new Function1<InterfaceItem, Boolean>() {
       @Override
       public Boolean apply(final InterfaceItem it) {
-        return Boolean.valueOf((GuardDetailExpressionProvider.this.roomHelpers.isDataDriven(it) && (!GuardDetailExpressionProvider.this.roomHelpers.isConjugated(it))));
+        return Boolean.valueOf((it.isEventDriven() || (!GuardDetailExpressionProvider.this.roomHelpers.isConjugated(it))));
       }
     };
     Iterable<InterfaceItem> _filter = IterableExtensions.<InterfaceItem>filter(_allInterfaceItems, _function);
@@ -91,7 +94,7 @@
           }
         }
         if (!_matched) {
-          _switchResult = GuardDetailExpressionProvider.this.createExprFeature(it);
+          _switchResult = GuardDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.NONE);
         }
         return _switchResult;
       }
@@ -102,7 +105,7 @@
     final Function1<StandardOperation, IDetailExpressionProvider.ExpressionFeature> _function_2 = new Function1<StandardOperation, IDetailExpressionProvider.ExpressionFeature>() {
       @Override
       public IDetailExpressionProvider.ExpressionFeature apply(final StandardOperation it) {
-        return GuardDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.PARENTHESES);
+        return GuardDetailExpressionProvider.this.createExprFeature(it);
       }
     };
     List<IDetailExpressionProvider.ExpressionFeature> _map_1 = ListExtensions.<StandardOperation, IDetailExpressionProvider.ExpressionFeature>map(_latestOperations, _function_2);
@@ -111,19 +114,7 @@
     final Function1<Attribute, IDetailExpressionProvider.ExpressionFeature> _function_3 = new Function1<Attribute, IDetailExpressionProvider.ExpressionFeature>() {
       @Override
       public IDetailExpressionProvider.ExpressionFeature apply(final Attribute it) {
-        IDetailExpressionProvider.ExpressionFeature _switchResult = null;
-        int _size = it.getSize();
-        boolean _matched = false;
-        int _size_1 = it.getSize();
-        boolean _greaterThan = (_size_1 > 1);
-        if (_greaterThan) {
-          _matched=true;
-          _switchResult = GuardDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.BRACKETS);
-        }
-        if (!_matched) {
-          _switchResult = GuardDetailExpressionProvider.this.createExprFeature(it);
-        }
-        return _switchResult;
+        return GuardDetailExpressionProvider.this.createExprFeature(it);
       }
     };
     List<IDetailExpressionProvider.ExpressionFeature> _map_2 = ListExtensions.<Attribute, IDetailExpressionProvider.ExpressionFeature>map(_allAttributes, _function_3);
@@ -138,75 +129,120 @@
     Object _data = ctx.getData();
     final Object obj = _data;
     boolean _matched = false;
-    if (obj instanceof InterfaceItem) {
-      _matched=true;
-      final ProtocolClass pc = this.roomHelpers.getProtocol(((InterfaceItem)obj));
+    if (obj instanceof Port) {
+      int _multiplicity = ((Port)obj).getMultiplicity();
+      boolean _equals = (_multiplicity == 1);
+      if (_equals) {
+        _matched=true;
+      }
+    }
+    if (!_matched) {
+      if (obj instanceof SAP) {
+        _matched=true;
+      }
+    }
+    if (_matched) {
+      ProtocolClass _protocol = this.roomHelpers.getProtocol(((InterfaceItem)obj));
+      boolean _isConjugated = this.roomHelpers.isConjugated(((InterfaceItem)obj));
+      boolean _not = (!_isConjugated);
+      List<PortOperation> _allOperations = this.roomHelpers.getAllOperations(_protocol, _not);
+      final Function1<PortOperation, IDetailExpressionProvider.ExpressionFeature> _function = new Function1<PortOperation, IDetailExpressionProvider.ExpressionFeature>() {
+        @Override
+        public IDetailExpressionProvider.ExpressionFeature apply(final PortOperation it) {
+          return GuardDetailExpressionProvider.this.createExprFeature(it);
+        }
+      };
+      List<IDetailExpressionProvider.ExpressionFeature> _map = ListExtensions.<PortOperation, IDetailExpressionProvider.ExpressionFeature>map(_allOperations, _function);
+      Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map);
+    }
+    Object _data_1 = ctx.getData();
+    final Object obj_1 = _data_1;
+    boolean _matched_1 = false;
+    if (obj_1 instanceof InterfaceItem) {
+      _matched_1=true;
+      final ProtocolClass pc = this.roomHelpers.getProtocol(((InterfaceItem)obj_1));
       CommunicationType _commType = pc.getCommType();
       if (_commType != null) {
         switch (_commType) {
           case DATA_DRIVEN:
-            boolean _isConjugated = this.roomHelpers.isConjugated(((InterfaceItem)obj));
-            boolean _not = (!_isConjugated);
-            if (_not) {
+            boolean _isConjugated_1 = this.roomHelpers.isConjugated(((InterfaceItem)obj_1));
+            boolean _not_1 = (!_isConjugated_1);
+            if (_not_1) {
               List<Message> _allIncomingMessages = this.roomHelpers.getAllIncomingMessages(pc);
-              final Function1<Message, IDetailExpressionProvider.ExpressionFeature> _function = new Function1<Message, IDetailExpressionProvider.ExpressionFeature>() {
+              final Function1<Message, IDetailExpressionProvider.ExpressionFeature> _function_1 = new Function1<Message, IDetailExpressionProvider.ExpressionFeature>() {
                 @Override
                 public IDetailExpressionProvider.ExpressionFeature apply(final Message it) {
                   return GuardDetailExpressionProvider.this.createExprFeature(it);
                 }
               };
-              List<IDetailExpressionProvider.ExpressionFeature> _map = ListExtensions.<Message, IDetailExpressionProvider.ExpressionFeature>map(_allIncomingMessages, _function);
-              Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map);
+              List<IDetailExpressionProvider.ExpressionFeature> _map_1 = ListExtensions.<Message, IDetailExpressionProvider.ExpressionFeature>map(_allIncomingMessages, _function_1);
+              Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map_1);
             }
             break;
+          case EVENT_DRIVEN:
+            break;
+          case SYNCHRONOUS:
+            break;
           default:
             break;
         }
       }
     }
-    if (!_matched) {
-      if (obj instanceof Attribute) {
-        RefableType _type = ((Attribute)obj).getType();
+    if (!_matched_1) {
+      if (obj_1 instanceof Attribute) {
+        RefableType _type = ((Attribute)obj_1).getType();
         DataType _type_1 = _type.getType();
         if ((_type_1 instanceof DataClass)) {
-          _matched=true;
-          RefableType _type_2 = ((Attribute)obj).getType();
+          _matched_1=true;
+          RefableType _type_2 = ((Attribute)obj_1).getType();
           DataType _type_3 = _type_2.getType();
           final DataClass dc = ((DataClass) _type_3);
           List<Attribute> _allAttributes = this.roomHelpers.getAllAttributes(dc);
-          final Function1<Attribute, IDetailExpressionProvider.ExpressionFeature> _function = new Function1<Attribute, IDetailExpressionProvider.ExpressionFeature>() {
+          final Function1<Attribute, IDetailExpressionProvider.ExpressionFeature> _function_1 = new Function1<Attribute, IDetailExpressionProvider.ExpressionFeature>() {
             @Override
             public IDetailExpressionProvider.ExpressionFeature apply(final Attribute it) {
-              IDetailExpressionProvider.ExpressionFeature _xifexpression = null;
-              int _size = it.getSize();
-              boolean _greaterThan = (_size > 1);
-              if (_greaterThan) {
-                _xifexpression = GuardDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.BRACKETS);
-              } else {
-                _xifexpression = GuardDetailExpressionProvider.this.createExprFeature(it);
-              }
-              return _xifexpression;
+              return GuardDetailExpressionProvider.this.createExprFeature(it);
             }
           };
-          List<IDetailExpressionProvider.ExpressionFeature> _map = ListExtensions.<Attribute, IDetailExpressionProvider.ExpressionFeature>map(_allAttributes, _function);
-          Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map);
+          List<IDetailExpressionProvider.ExpressionFeature> _map_1 = ListExtensions.<Attribute, IDetailExpressionProvider.ExpressionFeature>map(_allAttributes, _function_1);
+          Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map_1);
           List<StandardOperation> _latestOperations = this.roomHelpers.getLatestOperations(dc);
-          final Function1<StandardOperation, IDetailExpressionProvider.ExpressionFeature> _function_1 = new Function1<StandardOperation, IDetailExpressionProvider.ExpressionFeature>() {
+          final Function1<StandardOperation, IDetailExpressionProvider.ExpressionFeature> _function_2 = new Function1<StandardOperation, IDetailExpressionProvider.ExpressionFeature>() {
             @Override
             public IDetailExpressionProvider.ExpressionFeature apply(final StandardOperation it) {
-              return GuardDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.PARENTHESES);
+              return GuardDetailExpressionProvider.this.createExprFeature(it);
             }
           };
-          List<IDetailExpressionProvider.ExpressionFeature> _map_1 = ListExtensions.<StandardOperation, IDetailExpressionProvider.ExpressionFeature>map(_latestOperations, _function_1);
-          Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map_1);
+          List<IDetailExpressionProvider.ExpressionFeature> _map_2 = ListExtensions.<StandardOperation, IDetailExpressionProvider.ExpressionFeature>map(_latestOperations, _function_2);
+          Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map_2);
         }
       }
     }
     return scope;
   }
   
-  protected IDetailExpressionProvider.ExpressionFeature createExprFeature(final EObject eObj) {
-    return this.createExprFeature(eObj, IDetailExpressionProvider.ExpressionPostfix.NONE);
+  public IDetailExpressionProvider.ExpressionFeature createExprFeature(final Operation it) {
+    return this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.PARENTHESES);
+  }
+  
+  public IDetailExpressionProvider.ExpressionFeature createExprFeature(final Message it) {
+    return this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.PARENTHESES);
+  }
+  
+  public IDetailExpressionProvider.ExpressionFeature createExprFeature(final Attribute it) {
+    IDetailExpressionProvider.ExpressionFeature _switchResult = null;
+    int _size = it.getSize();
+    boolean _matched = false;
+    int _size_1 = it.getSize();
+    boolean _greaterThan = (_size_1 > 1);
+    if (_greaterThan) {
+      _matched=true;
+      _switchResult = this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.BRACKETS);
+    }
+    if (!_matched) {
+      _switchResult = this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.NONE);
+    }
+    return _switchResult;
   }
   
   protected IDetailExpressionProvider.ExpressionFeature createExprFeature(final EObject eObj, final IDetailExpressionProvider.ExpressionPostfix postfix) {
diff --git a/tests/org.eclipse.etrice.generator.common.tests/models/DetailExpressionTest.room b/tests/org.eclipse.etrice.generator.common.tests/models/DetailExpressionTest.room
index f45443d..0330485 100644
--- a/tests/org.eclipse.etrice.generator.common.tests/models/DetailExpressionTest.room
+++ b/tests/org.eclipse.etrice.generator.common.tests/models/DetailExpressionTest.room
@@ -29,11 +29,11 @@
 					triggers {
 						<out1: cPortEvent guard {
 							"/* TODO activate action code editor */"
-							"rPortData.in1 == numberArray[3] &&"
-							"accessibleMessageData && infoData.flag"
+							"rPortData.in1 == numberArray[3] && accessibleMessageData && infoData.flag && actorOp(32)  && rPortEvent.regularOp(32) && cPortEvent.conjugatedOp(32)"
 						}>
 					}
-					action {
+					action 
+				{
 						"// TODO syntax highlightiing"
 						"rPortEvent.out1(true);"
 						"rPortData.in1;"
@@ -67,8 +67,9 @@
 					}
 				}
 				Transition guardedTrans: idle -> state2 {
-					guard {
-						"rPortData.in1 == numberArray[3] && infoData.flag"
+					guard 
+				{
+						"rPortData.in1 == numberArray[3] && infoData.flag && actorOp(32)  && rPortEvent.regularOp(32) && cPortEvent.conjugatedOp(32)"
 					}
 				}
 				Transition init: initial -> idle