/// <summary> /// Visits the syntax node. /// </summary> /// <param name="parentNode">Node</param> /// <param name="typeIdentifier">Type identifier</param> /// <param name="identifier">Identifier</param> /// <param name="accMod">Access modifier</param> /// <param name="inhMod">Inheritance modifier</param> /// <param name="isAsync">Is async</param> /// <param name="isPartial">Is partial</param> internal void Visit(MachineDeclaration parentNode, Token typeIdentifier, Token identifier, AccessModifier accMod, InheritanceModifier inhMod, bool isAsync, bool isPartial) { var node = new MethodDeclaration(base.TokenStream.Program, parentNode); node.AccessModifier = accMod; node.InheritanceModifier = inhMod; node.TypeIdentifier = typeIdentifier; node.Identifier = identifier; node.IsAsync = isAsync; node.IsPartial = isPartial; node.LeftParenthesisToken = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); while (!base.TokenStream.Done && base.TokenStream.Peek().Type != TokenType.RightParenthesis) { base.TokenStream.Swap(new Token(base.TokenStream.Peek().TextUnit)); node.Parameters.Add(base.TokenStream.Peek()); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); } node.RightParenthesisToken = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Done || (base.TokenStream.Peek().Type != TokenType.LeftCurlyBracket && base.TokenStream.Peek().Type != TokenType.Semicolon)) { throw new ParsingException("Expected \"{\" or \";\".", new List <TokenType> { TokenType.LeftCurlyBracket, TokenType.Semicolon }); } if (base.TokenStream.Peek().Type == TokenType.LeftCurlyBracket) { var blockNode = new BlockSyntax(base.TokenStream.Program, parentNode, null); new BlockSyntaxVisitor(base.TokenStream).Visit(blockNode); node.StatementBlock = blockNode; } else if (base.TokenStream.Peek().Type == TokenType.Semicolon) { node.SemicolonToken = base.TokenStream.Peek(); } parentNode.MethodDeclarations.Add(node); }
/// <summary> /// Visits the syntax node. /// </summary> /// <param name="parentNode">Node</param> /// <param name="typeIdentifier">Type identifier</param> /// <param name="identifier">Identifier</param> /// <param name="accMod">Access modifier</param> /// <param name="inhMod">Inheritance modifier</param> /// <param name="isAsync">Is async</param> /// <param name="isPartial">Is partial</param> internal void Visit(MachineDeclaration parentNode, Token typeIdentifier, Token identifier, AccessModifier accMod, InheritanceModifier inhMod, bool isAsync, bool isPartial) { var node = new MethodDeclaration(base.TokenStream.Program, parentNode); node.AccessModifier = accMod; node.InheritanceModifier = inhMod; node.TypeIdentifier = typeIdentifier; node.Identifier = identifier; node.IsAsync = isAsync; node.IsPartial = isPartial; node.LeftParenthesisToken = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); while (!base.TokenStream.Done && base.TokenStream.Peek().Type != TokenType.RightParenthesis) { base.TokenStream.Swap(new Token(base.TokenStream.Peek().TextUnit)); node.Parameters.Add(base.TokenStream.Peek()); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); } node.RightParenthesisToken = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Done || (base.TokenStream.Peek().Type != TokenType.LeftCurlyBracket && base.TokenStream.Peek().Type != TokenType.Semicolon)) { throw new ParsingException("Expected \"{\" or \";\".", new List<TokenType> { TokenType.LeftCurlyBracket, TokenType.Semicolon }); } if (base.TokenStream.Peek().Type == TokenType.LeftCurlyBracket) { var blockNode = new BlockSyntax(base.TokenStream.Program, parentNode, null); new BlockSyntaxVisitor(base.TokenStream).Visit(blockNode); node.StatementBlock = blockNode; } else if (base.TokenStream.Peek().Type == TokenType.Semicolon) { node.SemicolonToken = base.TokenStream.Peek(); } parentNode.MethodDeclarations.Add(node); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="namespaceNode">NamespaceDeclaration</param> /// <param name="isMonitor">Is a monitor</param> /// <param name="modSet">Modifier set</param> internal MachineDeclaration(IPSharpProgram program, NamespaceDeclaration namespaceNode, bool isMonitor, ModifierSet modSet) : base(program) { this.Namespace = namespaceNode; this.IsMonitor = isMonitor; this.AccessModifier = modSet.AccessModifier; this.InheritanceModifier = modSet.InheritanceModifier; this.IsPartial = modSet.IsPartial; this.BaseNameTokens = new List <Token>(); this.EventDeclarations = new EventDeclarations(); this.FieldDeclarations = new List <FieldDeclaration>(); this.StateDeclarations = new List <StateDeclaration>(); this.StateGroupDeclarations = new List <StateGroupDeclaration>(); this.MethodDeclarations = new List <MethodDeclaration>(); this.RewrittenMethods = new HashSet <QualifiedMethod>(); }
private void SetModifierLabel(InheritanceModifier modifier) { InheritanceModifier[] modifierOrder; if (project.Language == Language.CSharp) { modifierOrder = csharpModifierOrder; } else { modifierOrder = javaModifierOrder; } for (int i = 0; i < modifierOrder.Length; i++) { if (modifierOrder[i] == modifier) { cboModifier.SelectedIndex = i; return; } } cboModifier.SelectedIndex = 0; }
/// <summary> /// Visits an event or machine declaration. /// </summary> /// <param name="parentNode">Node</param> private void VisitEventOrMachineDeclaration(NamespaceDeclaration parentNode) { AccessModifier am = AccessModifier.None; InheritanceModifier im = InheritanceModifier.None; bool isPartial = false; while (!base.TokenStream.Done && base.TokenStream.Peek().Type != TokenType.EventDecl && base.TokenStream.Peek().Type != TokenType.MachineDecl && base.TokenStream.Peek().Type != TokenType.Monitor) { if (am != AccessModifier.None && (base.TokenStream.Peek().Type == TokenType.Public || base.TokenStream.Peek().Type == TokenType.Private || base.TokenStream.Peek().Type == TokenType.Protected || base.TokenStream.Peek().Type == TokenType.Internal)) { throw new ParsingException("More than one protection modifier.", new List <TokenType>()); } else if (im != InheritanceModifier.None && base.TokenStream.Peek().Type == TokenType.Abstract) { throw new ParsingException("Duplicate abstract modifier.", new List <TokenType>()); } else if (isPartial && base.TokenStream.Peek().Type == TokenType.Partial) { throw new ParsingException("Duplicate partial modifier.", new List <TokenType>()); } if (base.TokenStream.Peek().Type == TokenType.Public) { am = AccessModifier.Public; } else if (base.TokenStream.Peek().Type == TokenType.Private) { am = AccessModifier.Private; } else if (base.TokenStream.Peek().Type == TokenType.Protected) { am = AccessModifier.Protected; } else if (base.TokenStream.Peek().Type == TokenType.Internal) { am = AccessModifier.Internal; } else if (base.TokenStream.Peek().Type == TokenType.Abstract) { im = InheritanceModifier.Abstract; } else if (base.TokenStream.Peek().Type == TokenType.Partial) { isPartial = true; } base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); } if (base.TokenStream.Done || (base.TokenStream.Peek().Type != TokenType.EventDecl && base.TokenStream.Peek().Type != TokenType.MachineDecl && base.TokenStream.Peek().Type != TokenType.Monitor)) { throw new ParsingException("Expected event, machine or monitor declaration.", new List <TokenType> { TokenType.EventDecl, TokenType.MachineDecl, TokenType.Monitor }); } if (base.TokenStream.Peek().Type == TokenType.EventDecl) { if (am == AccessModifier.Private) { throw new ParsingException("An event cannot be private.", new List <TokenType>()); } else if (am == AccessModifier.Protected) { throw new ParsingException("An event cannot be protected.", new List <TokenType>()); } if (im == InheritanceModifier.Abstract) { throw new ParsingException("An event cannot be abstract.", new List <TokenType>()); } if (isPartial) { throw new ParsingException("An event cannot be declared as partial.", new List <TokenType>()); } new EventDeclarationVisitor(base.TokenStream).Visit(null, parentNode, am); } else if (base.TokenStream.Peek().Type == TokenType.MachineDecl) { if (am == AccessModifier.Private) { throw new ParsingException("A machine cannot be private.", new List <TokenType>()); } else if (am == AccessModifier.Protected) { throw new ParsingException("A machine cannot be protected.", new List <TokenType>()); } new MachineDeclarationVisitor(base.TokenStream).Visit(null, parentNode, false, isPartial, am, im); } else if (base.TokenStream.Peek().Type == TokenType.Monitor) { if (am == AccessModifier.Private) { throw new ParsingException("A monitor cannot be private.", new List <TokenType>()); } else if (am == AccessModifier.Protected) { throw new ParsingException("A monitor cannot be protected.", new List <TokenType>()); } new MachineDeclarationVisitor(base.TokenStream).Visit(null, parentNode, true, isPartial, am, im); } }
/// <summary> /// Visits the syntax node. /// </summary> /// <param name="program">Program</param> /// <param name="parentNode">Node</param> /// <param name="isMonitor">Is a monitor</param> /// <param name="isPartial">Is partial</param> /// <param name="accMod">Access modifier</param> /// <param name="inhMod">Inheritance modifier</param> internal void Visit(IPSharpProgram program, NamespaceDeclaration parentNode, bool isMonitor, bool isPartial, AccessModifier accMod, InheritanceModifier inhMod) { var node = new MachineDeclaration(base.TokenStream.Program, parentNode, isMonitor, isPartial); node.AccessModifier = accMod; node.InheritanceModifier = inhMod; node.MachineKeyword = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Done || base.TokenStream.Peek().Type != TokenType.Identifier) { throw new ParsingException("Expected machine identifier.", new List<TokenType> { TokenType.Identifier }); } base.TokenStream.Swap(new Token(base.TokenStream.Peek().TextUnit, TokenType.MachineIdentifier)); node.Identifier = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Program is PSharpProgram) { if (base.TokenStream.Done || (base.TokenStream.Peek().Type != TokenType.Colon && base.TokenStream.Peek().Type != TokenType.LeftCurlyBracket)) { throw new ParsingException("Expected \":\" or \"{\".", new List<TokenType> { TokenType.Colon, TokenType.LeftCurlyBracket }); } if (base.TokenStream.Peek().Type == TokenType.Colon) { node.ColonToken = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Done || base.TokenStream.Peek().Type != TokenType.Identifier) { throw new ParsingException("Expected base machine identifier.", new List<TokenType> { TokenType.Identifier }); } while (!base.TokenStream.Done && base.TokenStream.Peek().Type != TokenType.LeftCurlyBracket) { if (base.TokenStream.Peek().Type != TokenType.Identifier && base.TokenStream.Peek().Type != TokenType.Dot && base.TokenStream.Peek().Type != TokenType.NewLine) { throw new ParsingException("Expected base machine identifier.", new List<TokenType> { TokenType.Identifier, TokenType.Dot }); } else { node.BaseNameTokens.Add(base.TokenStream.Peek()); } base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); } } } if (base.TokenStream.Done || base.TokenStream.Peek().Type != TokenType.LeftCurlyBracket) { throw new ParsingException("Expected \"{\".", new List<TokenType> { TokenType.LeftCurlyBracket }); } base.TokenStream.Swap(new Token(base.TokenStream.Peek().TextUnit, TokenType.MachineLeftCurlyBracket)); node.LeftCurlyBracketToken = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); this.VisitNextPSharpIntraMachineDeclaration(node); parentNode.MachineDeclarations.Add(node); var stateDeclarations = node.GetAllStateDeclarations(); if (stateDeclarations.Count == 0 && node.BaseNameTokens.Count == 0) { throw new ParsingException("A machine must declare at least one state.", new List<TokenType>()); } var startStates = stateDeclarations.FindAll(s => s.IsStart); if (startStates.Count == 0 && node.BaseNameTokens.Count == 0) { throw new ParsingException("A machine must declare a start state.", new List<TokenType>()); } else if (startStates.Count > 1) { throw new ParsingException("A machine can declare only a single start state.", new List<TokenType>()); } }
/// <summary> /// Visits a group level declaration. /// </summary> /// <param name="parentNode">Node</param> private void VisitGroupLevelDeclaration(StateGroupDeclaration parentNode) { AccessModifier am = AccessModifier.None; InheritanceModifier im = InheritanceModifier.None; bool isStart = false; bool isHot = false; bool isCold = false; bool isAsync = false; bool isPartial = false; while (!base.TokenStream.Done && base.TokenStream.Peek().Type != TokenType.StateDecl && base.TokenStream.Peek().Type != TokenType.StateGroupDecl && base.TokenStream.Peek().Type != TokenType.MachineDecl) { if (am != AccessModifier.None && (base.TokenStream.Peek().Type == TokenType.Public || base.TokenStream.Peek().Type == TokenType.Private || base.TokenStream.Peek().Type == TokenType.Protected || base.TokenStream.Peek().Type == TokenType.Internal)) { throw new ParsingException("More than one protection modifier.", new List <TokenType>()); } else if (im != InheritanceModifier.None && base.TokenStream.Peek().Type == TokenType.Abstract) { throw new ParsingException("Duplicate abstract modifier.", new List <TokenType>()); } else if (isStart && base.TokenStream.Peek().Type == TokenType.StartState) { throw new ParsingException("Duplicate start state modifier.", new List <TokenType>()); } else if (isHot && base.TokenStream.Peek().Type == TokenType.HotState) { throw new ParsingException("Duplicate hot state modifier.", new List <TokenType>()); } else if (isCold && base.TokenStream.Peek().Type == TokenType.ColdState) { throw new ParsingException("Duplicate cold state modifier.", new List <TokenType>()); } else if ((isCold && base.TokenStream.Peek().Type == TokenType.HotState) || (isHot && base.TokenStream.Peek().Type == TokenType.ColdState)) { throw new ParsingException("State cannot be both hot and cold.", new List <TokenType>()); } else if (isAsync && base.TokenStream.Peek().Type == TokenType.Async) { throw new ParsingException("Duplicate async method modifier.", new List <TokenType>()); } else if (isPartial && base.TokenStream.Peek().Type == TokenType.Partial) { throw new ParsingException("Duplicate partial method modifier.", new List <TokenType>()); } if (base.TokenStream.Peek().Type == TokenType.Public) { am = AccessModifier.Public; } else if (base.TokenStream.Peek().Type == TokenType.Private) { am = AccessModifier.Private; } else if (base.TokenStream.Peek().Type == TokenType.Protected) { am = AccessModifier.Protected; } else if (base.TokenStream.Peek().Type == TokenType.Internal) { am = AccessModifier.Internal; } else if (base.TokenStream.Peek().Type == TokenType.Abstract) { im = InheritanceModifier.Abstract; } else if (base.TokenStream.Peek().Type == TokenType.Virtual) { im = InheritanceModifier.Virtual; } else if (base.TokenStream.Peek().Type == TokenType.Override) { im = InheritanceModifier.Override; } else if (base.TokenStream.Peek().Type == TokenType.StartState) { isStart = true; } else if (base.TokenStream.Peek().Type == TokenType.HotState) { isHot = true; } else if (base.TokenStream.Peek().Type == TokenType.ColdState) { isCold = true; } else if (base.TokenStream.Peek().Type == TokenType.Async) { isAsync = true; } else if (base.TokenStream.Peek().Type == TokenType.Partial) { isPartial = true; } base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); } if (base.TokenStream.Done || (base.TokenStream.Peek().Type != TokenType.StateDecl && base.TokenStream.Peek().Type != TokenType.StateGroupDecl)) { throw new ParsingException("Expected state or group declaration.", new List <TokenType> { TokenType.StateDecl, TokenType.StateGroupDecl }); } if (base.TokenStream.Peek().Type == TokenType.StateDecl) { if (am == AccessModifier.Public) { throw new ParsingException("A state cannot be public.", new List <TokenType>()); } else if (am == AccessModifier.Internal) { throw new ParsingException("A state cannot be internal.", new List <TokenType>()); } if (im == InheritanceModifier.Abstract) { throw new ParsingException("A state cannot be abstract.", new List <TokenType>()); } else if (im == InheritanceModifier.Virtual) { throw new ParsingException("A state cannot be virtual.", new List <TokenType>()); } else if (im == InheritanceModifier.Override) { throw new ParsingException("A state cannot be overriden.", new List <TokenType>()); } if (isAsync) { throw new ParsingException("A state cannot be async.", new List <TokenType>()); } if (isPartial) { throw new ParsingException("A state cannot be partial.", new List <TokenType>()); } new StateDeclarationVisitor(base.TokenStream).Visit(parentNode.Machine, parentNode, isStart, isHot, isCold, am); } else if (base.TokenStream.Peek().Type == TokenType.StateGroupDecl) { if (am == AccessModifier.Public) { throw new ParsingException("A state group cannot be public.", new List <TokenType>()); } else if (am == AccessModifier.Internal) { throw new ParsingException("A state group cannot be internal.", new List <TokenType>()); } if (im == InheritanceModifier.Abstract) { throw new ParsingException("A state group cannot be abstract.", new List <TokenType>()); } else if (im == InheritanceModifier.Virtual) { throw new ParsingException("A state group cannot be virtual.", new List <TokenType>()); } else if (im == InheritanceModifier.Override) { throw new ParsingException("A state group cannot be overriden.", new List <TokenType>()); } if (isAsync) { throw new ParsingException("A state group cannot be async.", new List <TokenType>()); } if (isPartial) { throw new ParsingException("A state group cannot be partial.", new List <TokenType>()); } if (isStart) { throw new ParsingException("A state group cannot be marked start.", new List <TokenType>()); } else if (isHot) { throw new ParsingException("A state group cannot be hot.", new List <TokenType>()); } else if (isCold) { throw new ParsingException("A state group cannot be cold.", new List <TokenType>()); } new StateGroupDeclarationVisitor(base.TokenStream).Visit(parentNode.Machine, parentNode, am); } }
/// <summary> /// Visits the syntax node. /// </summary> /// <param name="parentNode">Node</param> /// <param name="accMod">Access modifier</param> /// <param name="inhMod">Inheritance modifier</param> /// <param name="isAsync">Is async</param> /// <param name="isPartial">Is partial</param> internal void Visit(MachineDeclaration parentNode, AccessModifier accMod, InheritanceModifier inhMod, bool isAsync, bool isPartial) { TextUnit textUnit = null; new TypeIdentifierVisitor(base.TokenStream).Visit(ref textUnit); var typeIdentifier = new Token(textUnit, TokenType.TypeIdentifier); if (base.TokenStream.Done || base.TokenStream.Peek().Type != TokenType.Identifier) { throw new ParsingException("Expected field or method identifier.", new List <TokenType> { TokenType.Identifier }); } var identifierToken = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Done || (base.TokenStream.Peek().Type != TokenType.LeftParenthesis && base.TokenStream.Peek().Type != TokenType.Semicolon)) { throw new ParsingException("Expected \"(\" or \";\".", new List <TokenType> { TokenType.LeftParenthesis, TokenType.Semicolon }); } if (base.TokenStream.Peek().Type == TokenType.LeftParenthesis) { new MethodDeclarationVisitor(base.TokenStream).Visit(parentNode, typeIdentifier, identifierToken, accMod, inhMod, isAsync, isPartial); } else if (base.TokenStream.Peek().Type == TokenType.Semicolon) { if (inhMod == InheritanceModifier.Abstract) { throw new ParsingException("A field cannot be abstract.", new List <TokenType>()); } else if (inhMod == InheritanceModifier.Virtual) { throw new ParsingException("A field cannot be virtual.", new List <TokenType>()); } else if (inhMod == InheritanceModifier.Override) { throw new ParsingException("A field cannot be overriden.", new List <TokenType>()); } if (isAsync) { throw new ParsingException("A field cannot be async.", new List <TokenType>()); } if (isPartial) { throw new ParsingException("A field cannot be partial.", new List <TokenType>()); } var node = new FieldDeclaration(base.TokenStream.Program, parentNode); node.AccessModifier = accMod; node.TypeIdentifier = typeIdentifier; node.Identifier = identifierToken; node.SemicolonToken = base.TokenStream.Peek(); parentNode.FieldDeclarations.Add(node); } }
/// <summary> /// Visits the syntax node. /// </summary> /// <param name="program">Program</param> /// <param name="parentNode">Node</param> /// <param name="isMain">Is main machine</param> /// <param name="isModel">Is a model</param> /// <param name="isMonitor">Is a monitor</param> /// <param name="accMod">Access modifier</param> /// <param name="inhMod">Inheritance modifier</param> internal void Visit(IPSharpProgram program, NamespaceDeclaration parentNode, bool isMain, bool isModel, bool isMonitor, AccessModifier accMod, InheritanceModifier inhMod) { var node = new MachineDeclaration(base.TokenStream.Program, isMain, isModel, isMonitor); node.AccessModifier = accMod; node.InheritanceModifier = inhMod; node.MachineKeyword = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Done || base.TokenStream.Peek().Type != TokenType.Identifier) { throw new ParsingException("Expected machine identifier.", new List <TokenType> { TokenType.Identifier }); } base.TokenStream.CurrentMachine = base.TokenStream.Peek().Text; base.TokenStream.Swap(new Token(base.TokenStream.Peek().TextUnit, TokenType.MachineIdentifier)); node.Identifier = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Program is PSharpProgram) { if (base.TokenStream.Done || (base.TokenStream.Peek().Type != TokenType.Colon && base.TokenStream.Peek().Type != TokenType.LeftCurlyBracket)) { throw new ParsingException("Expected \":\" or \"{\".", new List <TokenType> { TokenType.Colon, TokenType.LeftCurlyBracket }); } if (base.TokenStream.Peek().Type == TokenType.Colon) { node.ColonToken = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Done || base.TokenStream.Peek().Type != TokenType.Identifier) { throw new ParsingException("Expected base machine identifier.", new List <TokenType> { TokenType.Identifier }); } while (!base.TokenStream.Done && base.TokenStream.Peek().Type != TokenType.LeftCurlyBracket) { if (base.TokenStream.Peek().Type != TokenType.Identifier && base.TokenStream.Peek().Type != TokenType.Dot && base.TokenStream.Peek().Type != TokenType.NewLine) { throw new ParsingException("Expected base machine identifier.", new List <TokenType> { TokenType.Identifier, TokenType.Dot }); } else { node.BaseNameTokens.Add(base.TokenStream.Peek()); } base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); } } } if (base.TokenStream.Done || base.TokenStream.Peek().Type != TokenType.LeftCurlyBracket) { throw new ParsingException("Expected \"{\".", new List <TokenType> { TokenType.LeftCurlyBracket }); } base.TokenStream.Swap(new Token(base.TokenStream.Peek().TextUnit, TokenType.MachineLeftCurlyBracket)); node.LeftCurlyBracketToken = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Program is PSharpProgram) { this.VisitNextPSharpIntraMachineDeclaration(node); parentNode.MachineDeclarations.Add(node); } else { this.VisitNextPIntraMachineDeclaration(node); (program as PProgram).MachineDeclarations.Add(node); } if (node.StateDeclarations.Count == 0 && node.BaseNameTokens.Count == 0) { throw new ParsingException("A machine must declare at least one state.", new List <TokenType>()); } var initialStates = node.StateDeclarations.FindAll(s => s.IsInitial); if (initialStates.Count == 0 && node.BaseNameTokens.Count == 0) { throw new ParsingException("A machine must declare a start state.", new List <TokenType>()); } else if (initialStates.Count > 1) { throw new ParsingException("A machine can declare only a single start state.", new List <TokenType>()); } }
/// <summary> /// Visits a machine level declaration. /// </summary> /// <param name="parentNode">Node</param> private void VisitMachineLevelDeclaration(MachineDeclaration parentNode) { AccessModifier am = AccessModifier.None; InheritanceModifier im = InheritanceModifier.None; bool isStart = false; bool isModel = false; bool isAsync = false; while (!base.TokenStream.Done && base.TokenStream.Peek().Type != TokenType.StateDecl && base.TokenStream.Peek().Type != TokenType.MachineDecl && base.TokenStream.Peek().Type != TokenType.Void && base.TokenStream.Peek().Type != TokenType.Object && base.TokenStream.Peek().Type != TokenType.String && base.TokenStream.Peek().Type != TokenType.Sbyte && base.TokenStream.Peek().Type != TokenType.Byte && base.TokenStream.Peek().Type != TokenType.Short && base.TokenStream.Peek().Type != TokenType.Ushort && base.TokenStream.Peek().Type != TokenType.Int && base.TokenStream.Peek().Type != TokenType.Uint && base.TokenStream.Peek().Type != TokenType.Long && base.TokenStream.Peek().Type != TokenType.Ulong && base.TokenStream.Peek().Type != TokenType.Char && base.TokenStream.Peek().Type != TokenType.Bool && base.TokenStream.Peek().Type != TokenType.Decimal && base.TokenStream.Peek().Type != TokenType.Float && base.TokenStream.Peek().Type != TokenType.Double && base.TokenStream.Peek().Type != TokenType.Identifier) { if (am != AccessModifier.None && (base.TokenStream.Peek().Type == TokenType.Public || base.TokenStream.Peek().Type == TokenType.Private || base.TokenStream.Peek().Type == TokenType.Protected || base.TokenStream.Peek().Type == TokenType.Internal)) { throw new ParsingException("More than one protection modifier.", new List <TokenType>()); } else if (im != InheritanceModifier.None && base.TokenStream.Peek().Type == TokenType.Abstract) { throw new ParsingException("Duplicate abstract modifier.", new List <TokenType>()); } else if (isStart && base.TokenStream.Peek().Type == TokenType.StartState) { throw new ParsingException("Duplicate start state modifier.", new List <TokenType>()); } else if (isModel && base.TokenStream.Peek().Type == TokenType.ModelDecl) { throw new ParsingException("Duplicate model method modifier.", new List <TokenType>()); } else if (isAsync && base.TokenStream.Peek().Type == TokenType.Async) { throw new ParsingException("Duplicate async method modifier.", new List <TokenType>()); } if (base.TokenStream.Peek().Type == TokenType.Public) { am = AccessModifier.Public; } else if (base.TokenStream.Peek().Type == TokenType.Private) { am = AccessModifier.Private; } else if (base.TokenStream.Peek().Type == TokenType.Protected) { am = AccessModifier.Protected; } else if (base.TokenStream.Peek().Type == TokenType.Internal) { am = AccessModifier.Internal; } else if (base.TokenStream.Peek().Type == TokenType.Abstract) { im = InheritanceModifier.Abstract; } else if (base.TokenStream.Peek().Type == TokenType.Virtual) { im = InheritanceModifier.Virtual; } else if (base.TokenStream.Peek().Type == TokenType.Override) { im = InheritanceModifier.Override; } else if (base.TokenStream.Peek().Type == TokenType.StartState) { isStart = true; } else if (base.TokenStream.Peek().Type == TokenType.ModelDecl) { isModel = true; } else if (base.TokenStream.Peek().Type == TokenType.Async) { isAsync = true; } base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); } if (base.TokenStream.Done || (base.TokenStream.Peek().Type != TokenType.StateDecl && base.TokenStream.Peek().Type != TokenType.MachineDecl && base.TokenStream.Peek().Type != TokenType.Void && base.TokenStream.Peek().Type != TokenType.Object && base.TokenStream.Peek().Type != TokenType.String && base.TokenStream.Peek().Type != TokenType.Sbyte && base.TokenStream.Peek().Type != TokenType.Byte && base.TokenStream.Peek().Type != TokenType.Short && base.TokenStream.Peek().Type != TokenType.Ushort && base.TokenStream.Peek().Type != TokenType.Int && base.TokenStream.Peek().Type != TokenType.Uint && base.TokenStream.Peek().Type != TokenType.Long && base.TokenStream.Peek().Type != TokenType.Ulong && base.TokenStream.Peek().Type != TokenType.Char && base.TokenStream.Peek().Type != TokenType.Bool && base.TokenStream.Peek().Type != TokenType.Decimal && base.TokenStream.Peek().Type != TokenType.Float && base.TokenStream.Peek().Type != TokenType.Double && base.TokenStream.Peek().Type != TokenType.Identifier)) { throw new ParsingException("Expected state or method declaration.", new List <TokenType> { TokenType.StateDecl, TokenType.MachineDecl, TokenType.Void, TokenType.Object, TokenType.String, TokenType.Sbyte, TokenType.Byte, TokenType.Short, TokenType.Ushort, TokenType.Int, TokenType.Uint, TokenType.Long, TokenType.Ulong, TokenType.Char, TokenType.Bool, TokenType.Decimal, TokenType.Float, TokenType.Double, TokenType.Identifier }); } if (base.TokenStream.Peek().Type == TokenType.StateDecl) { if (am == AccessModifier.Public) { throw new ParsingException("A state cannot be public.", new List <TokenType>()); } else if (am == AccessModifier.Internal) { throw new ParsingException("A state cannot be internal.", new List <TokenType>()); } if (im == InheritanceModifier.Abstract) { throw new ParsingException("A state cannot be abstract.", new List <TokenType>()); } else if (im == InheritanceModifier.Virtual) { throw new ParsingException("A state cannot be virtual.", new List <TokenType>()); } else if (im == InheritanceModifier.Override) { throw new ParsingException("A state cannot be overriden.", new List <TokenType>()); } if (isModel) { throw new ParsingException("A state cannot be a model.", new List <TokenType>()); } if (isAsync) { throw new ParsingException("A state cannot be async.", new List <TokenType>()); } new StateDeclarationVisitor(base.TokenStream).Visit(parentNode, isStart, am); } else { if (am == AccessModifier.Public) { throw new ParsingException("A field or method cannot be public.", new List <TokenType>()); } else if (am == AccessModifier.Internal) { throw new ParsingException("A field or method cannot be internal.", new List <TokenType>()); } new FieldOrMethodDeclarationVisitor(base.TokenStream).Visit(parentNode, isModel, am, im, isAsync); } }
public static string ToSource(this InheritanceModifier modifier, bool pad = false) => modifier.ToCodeOrEmpty(InheritanceModifier.None, pad);
/// <summary> /// Visits the syntax node. /// </summary> /// <param name="parentNode">Node</param> /// <param name="isModel">Is model</param> /// <param name="accMod">Access modifier</param> /// <param name="inhMod">Inheritance modifier</param> /// <param name="isAsync">Is async</param> internal void Visit(MachineDeclaration parentNode, bool isModel, AccessModifier accMod, InheritanceModifier inhMod, bool isAsync) { TextUnit textUnit = null; new TypeIdentifierVisitor(base.TokenStream).Visit(ref textUnit); var typeIdentifier = new Token(textUnit, TokenType.TypeIdentifier); if (base.TokenStream.Done || base.TokenStream.Peek().Type != TokenType.Identifier) { throw new ParsingException("Expected field or method identifier.", new List<TokenType> { TokenType.Identifier }); } var identifierToken = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Done || (base.TokenStream.Peek().Type != TokenType.LeftParenthesis && base.TokenStream.Peek().Type != TokenType.Semicolon)) { throw new ParsingException("Expected \"(\" or \";\".", new List<TokenType> { TokenType.LeftParenthesis, TokenType.Semicolon }); } if (base.TokenStream.Peek().Type == TokenType.LeftParenthesis) { new MethodDeclarationVisitor(base.TokenStream).Visit(parentNode, typeIdentifier, identifierToken, isModel, accMod, inhMod, isAsync); } else if (base.TokenStream.Peek().Type == TokenType.Semicolon) { if (inhMod == InheritanceModifier.Abstract) { throw new ParsingException("A field cannot be abstract.", new List<TokenType>()); } else if (inhMod == InheritanceModifier.Virtual) { throw new ParsingException("A field cannot be virtual.", new List<TokenType>()); } else if (inhMod == InheritanceModifier.Override) { throw new ParsingException("A field cannot be overriden.", new List<TokenType>()); } if (isModel) { throw new ParsingException("A field cannot be a model.", new List<TokenType>()); } if (isAsync) { throw new ParsingException("A field cannot be async.", new List<TokenType>()); } var node = new FieldDeclaration(base.TokenStream.Program, parentNode, parentNode.IsModel); node.AccessModifier = accMod; node.TypeIdentifier = typeIdentifier; node.Identifier = identifierToken; node.SemicolonToken = base.TokenStream.Peek(); parentNode.FieldDeclarations.Add(node); } }
public void GenerateShapes(LibraryModelContext modelContext) { foreach (DiagramClass diagram in modelContext.DiagramClasses) { Dictionary <ShapeClass, List <ShapeClass> > childParentMapping = new Dictionary <ShapeClass, List <ShapeClass> >(); Dictionary <DomainClass, List <EmbeddingRelationship> > embeddingChildParentMapping = new Dictionary <DomainClass, List <EmbeddingRelationship> >(); foreach (PresentationElementClass presentationElement in diagram.PresentationElements) { if (presentationElement is ShapeClass) { ShapeClass shapeClass = presentationElement as ShapeClass; DomainClass domainClass = shapeClass.DomainClass; if (domainClass == null) { continue; } if (shapeClass.Parent != null) { if (shapeClass.Parent.DomainClass == null) { continue; } if (!childParentMapping.ContainsKey(shapeClass.Parent)) { childParentMapping.Add(shapeClass.Parent, new List <ShapeClass>()); } childParentMapping[shapeClass.Parent].Add(shapeClass); } if (!embeddingChildParentMapping.ContainsKey(domainClass)) { embeddingChildParentMapping.Add(domainClass, new List <EmbeddingRelationship>()); } foreach (DomainRole rolesPlayed in domainClass.RolesPlayed) { if (rolesPlayed.Relationship.Target == rolesPlayed && rolesPlayed.Relationship is EmbeddingRelationship && rolesPlayed.Relationship.InheritanceModifier != InheritanceModifier.Abstract) { if (!embeddingChildParentMapping[domainClass].Contains(rolesPlayed.Relationship as EmbeddingRelationship)) { embeddingChildParentMapping[domainClass].Add(rolesPlayed.Relationship as EmbeddingRelationship); } } } if (embeddingChildParentMapping[domainClass].Count > 0) { IEnumerable <AttributedDomainElement> sortedByInheritanceRS = CodeGenerationUtilities.SortDomainClassesByInheritance(embeddingChildParentMapping[domainClass]); embeddingChildParentMapping[domainClass].Clear(); foreach (EmbeddingRelationship r in sortedByInheritanceRS) { embeddingChildParentMapping[domainClass].Add(r); } } } } foreach (PresentationElementClass presentationElement in diagram.PresentationElements) { string baseClass = "DslEditorDiagrams::NodeShape"; string className = presentationElement.Name; bool hasBaseClass = false; InheritanceModifier modifier = presentationElement.InheritanceModifier; if (!(presentationElement is ShapeClass)) { baseClass = "DslEditorDiagrams::LinkShape"; } else if (presentationElement is ShapeClass) { if ((presentationElement as ShapeClass).BaseShape != null) { ShapeClass s = (presentationElement as ShapeClass).BaseShape; baseClass = s.Namespace + "." + s.Name; hasBaseClass = true; } } if (presentationElement.GeneratesDoubleDerived) { className += "Base"; modifier = InheritanceModifier.Abstract; } #line default #line hidden #line 96 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("namespace "); #line default #line hidden #line 97 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(presentationElement.Namespace)); #line default #line hidden #line 97 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\r\n{\r\n\t/// <summary>\r\n /// "); #line default #line hidden #line 100 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(className)); #line default #line hidden #line 100 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(" class representing a Shape.\r\n /// </summary>\r\n\t[DslModeling::DomainObjectId(\"" + ""); #line default #line hidden #line 102 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(presentationElement.Id.ToString("D"))); #line default #line hidden #line 102 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\")]\r\n\t"); #line default #line hidden #line 103 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(CodeGenerationUtilities.GetAccessModifier(presentationElement.AccessModifier))); #line default #line hidden #line 103 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(CodeGenerationUtilities.GetInheritanceModifier(modifier))); #line default #line hidden #line 103 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(" partial class "); #line default #line hidden #line 103 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(className)); #line default #line hidden #line 103 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(" : "); #line default #line hidden #line 103 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(baseClass)); #line default #line hidden #line 103 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\r\n\t{\r\n\t\t#region Constructors, domain class Id\r\n\r\n\t\t/// <summary>\r\n\t\t/// "); #line default #line hidden #line 108 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(presentationElement.Name)); #line default #line hidden #line 108 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(" domain class Id.\r\n\t\t/// </summary>\r\n\t\tpublic static readonly new global::System." + "Guid DomainClassId = new System.Guid(\""); #line default #line hidden #line 110 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(presentationElement.Id.ToString("D"))); #line default #line hidden #line 110 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\");\r\n"); #line default #line hidden #line 111 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" PushIndent("\t\t"); GenerateDomainClassConstructors(presentationElement, true); PopIndent(); #line default #line hidden #line 115 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\t\t#endregion\r\n"); #line default #line hidden #line 117 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" PushIndent("\t\t"); foreach (DomainProperty property in presentationElement.Properties) { this.Write(DomainPropertyGenerator.Instance.GenerateDomainProperty(property)); } PopIndent(); if (presentationElement is ShapeClass) { ShapeClass shapeClass = presentationElement as ShapeClass; bool bTopMost = false; if (shapeClass.Parent == null) { bTopMost = true; } #line default #line hidden #line 131 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\t\t#region Shape Properties/Methods\r\n\t\t /// <summary>\r\n /// Gets if " + "this shape is a top most item.\r\n /// </summary>\r\n public override " + "bool IsTopMostItem \r\n\t\t{ \r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn "); #line default #line hidden #line 140 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(bTopMost.ToString().ToLower())); #line default #line hidden #line 140 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(@"; } } /// <summary> /// Gets the default size of the shape. /// </summary> public override DslEditorDiagrams::SizeD DefaultSize { get { return new DslEditorDiagrams::SizeD("); #line default #line hidden #line 151 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(shapeClass.DefaultWidth)); #line default #line hidden #line 151 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(", "); #line default #line hidden #line 151 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(shapeClass.DefaultHeight)); #line default #line hidden #line 151 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(@"); } } /// <summary> /// Gets the used defined resizing behaviour value. /// </summary> /// <returns>Resizing behaviour value.</returns> public override DslEditorDiagrams::ShapeResizingBehaviour GetResizingBehaviourValue() { "); #line default #line hidden #line 161 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" if (shapeClass.IsFixedWidth && shapeClass.IsFixedHeight) { #line default #line hidden #line 164 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\t\t\treturn DslEditorDiagrams::ShapeResizingBehaviour.Fixed;\r\n"); #line default #line hidden #line 166 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" } else if (shapeClass.IsFixedWidth) { #line default #line hidden #line 170 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\t\t\treturn DslEditorDiagrams::ShapeResizingBehaviour.FixedWidth;\r\n"); #line default #line hidden #line 172 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" } else if (shapeClass.IsFixedHeight) { #line default #line hidden #line 176 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\t\t\treturn DslEditorDiagrams::ShapeResizingBehaviour.FixedHeight;\r\n"); #line default #line hidden #line 178 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" } else { #line default #line hidden #line 182 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\t\t\treturn DslEditorDiagrams::ShapeResizingBehaviour.Normal;\r\n"); #line default #line hidden #line 184 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" } #line default #line hidden #line 186 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(@" } /// <summary> /// Gets the used defined movement behaviour value. /// </summary> /// <returns>Movement behaviour value.</returns> public override DslEditorDiagrams::ShapeMovementBehaviour GetMovementBehaviourValue() { "); #line default #line hidden #line 195 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" if (shapeClass.IsRelativeChild) { if (shapeClass.RelativeChildBehaviour == RelativeChildBehaviour.PositionRelativeToParent) { #line default #line hidden #line 200 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\t\t\treturn DslEditorDiagrams::ShapeMovementBehaviour.PositionRelativeToParent;\r\n"); #line default #line hidden #line 202 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" } else if (shapeClass.RelativeChildBehaviour == RelativeChildBehaviour.PositionOnEdgeOfParent) { #line default #line hidden #line 206 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\t\t\treturn DslEditorDiagrams::ShapeMovementBehaviour.PositionOnEdgeOfParent;\r\n"); #line default #line hidden #line 208 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" } } else { #line default #line hidden #line 213 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\t\t\treturn DslEditorDiagrams::ShapeMovementBehaviour.Normal;\r\n"); #line default #line hidden #line 215 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" } #line default #line hidden #line 217 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(@" } /// <summary> /// Gets whether this shape is a relative child shape or not. /// </summary> /// <returns>True if this shape is a relative child shape. False otherwise</returns> public override bool GetIsRelativeChildShapeValue() { return " ); #line default #line hidden #line 226 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(shapeClass.IsRelativeChild.ToString().ToLower())); #line default #line hidden #line 226 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(@"; } /// <summary> /// Gets whether this shape takes part in any relationship or not. /// </summary> /// <returns>True if this shape takes part in any relationship. False otherwise</returns> public override bool GetTakesPartInRelationshipValue() { "); #line default #line hidden #line 235 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" if (hasBaseClass) { #line default #line hidden #line 238 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\t\t\tif( base.GetTakesPartInRelationshipValue() )\r\n\t\t\t\treturn true;\r\n\t\t\t\t\r\n"); #line default #line hidden #line 242 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" } bool takesPart = false; foreach (PresentationElementClass pLink in diagram.PresentationElements) { if (pLink is RelationshipShapeClass) { RelationshipShapeClass rsShape = pLink as RelationshipShapeClass; DomainRelationship con = rsShape.ReferenceRelationship; if (con != null) { if (CodeGenerationUtilities.ShapeTakesPart(shapeClass, con)) { takesPart = true; } } } else if (!takesPart && pLink is MappingRelationshipShapeClass) { MappingRelationshipShapeClass rsShape = pLink as MappingRelationshipShapeClass; ReferenceRelationship con = rsShape.Source; if (con != null) { if (CodeGenerationUtilities.ShapeTakesPart(shapeClass, con.Target.RolePlayer as DomainClass)) { takesPart = true; } } con = rsShape.Target; if (con != null && !takesPart) { if (CodeGenerationUtilities.ShapeTakesPart(shapeClass, con.Target.RolePlayer as DomainClass)) { takesPart = true; } } } } #line default #line hidden #line 270 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\t\t\treturn "); #line default #line hidden #line 271 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(takesPart.ToString().ToLower())); #line default #line hidden #line 271 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(";\r\n\t\t}\r\n\t\t#endregion\r\n"); #line default #line hidden #line 274 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" } #line default #line hidden #line 276 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\t}\r\n"); #line default #line hidden #line 278 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" // If this class is double-derived, generate the skeleton derived class (with just the // constructors) if (presentationElement.GeneratesDoubleDerived) { #line default #line hidden #line 283 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\t\t\t\r\n\t/// <summary>\r\n /// "); #line default #line hidden #line 285 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(presentationElement.Name)); #line default #line hidden #line 285 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(" class representing a Shape.\r\n /// </summary>\r\n\t"); #line default #line hidden #line 287 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(CodeGenerationUtilities.GetAccessModifier(presentationElement.AccessModifier))); #line default #line hidden #line 287 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(CodeGenerationUtilities.GetInheritanceModifier(presentationElement.InheritanceModifier))); #line default #line hidden #line 287 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(" partial class "); #line default #line hidden #line 287 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(presentationElement.Name)); #line default #line hidden #line 287 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(" : "); #line default #line hidden #line 287 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write(this.ToStringHelper.ToStringWithCulture(presentationElement.Name)); #line default #line hidden #line 287 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("Base\r\n\t{\r\n\t\t#region Constructors\r\n"); #line default #line hidden #line 290 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" PushIndent("\t\t"); GenerateDomainClassConstructors(presentationElement, false); PopIndent(); #line default #line hidden #line 294 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("\t\t#endregion\r\n\t}\r\n"); #line default #line hidden #line 297 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" } #line default #line hidden #line 299 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" this.Write("}\r\n"); #line default #line hidden #line 301 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" } #line default #line hidden #line 304 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" } #line default #line hidden #line 307 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt" }
public TSelf WithInheritance(InheritanceModifier modifier) { value.Inheritance = modifier; return((TSelf)this); }