public void Generate(CodeGenerator generator, CodeStatementEmitOptions emitOptions) { generator.EnterElement(this); StartDirectives.Generate(generator); GenerateInner(generator, emitOptions); EndDirectives.Generate(generator); generator.ExitElement(); }
public void GenerateConstraints(CodeGenerator generator) { generator.EnterElement(this); generator.WriteLine(); generator.Indent++; bool first = true; foreach (CodeTypeReference constraint in Constraints) { if (first) { generator.Write(TokenType.Keyword, "where"); generator.Write(TokenType.Space, ' '); generator.Write(TokenType.GenericTypeParameter, Name); generator.Write(TokenType.Space, ' '); generator.Write(TokenType.Punctuation, ':'); generator.Write(TokenType.Space, ' '); first = false; } else { generator.Write(TokenType.Punctuation, ','); generator.Write(TokenType.Space, ' '); } constraint.Generate(generator); } if (HasConstructorConstraint) { if (first) { generator.Write(TokenType.Keyword, "where"); generator.Write(TokenType.GenericTypeParameter, Name); generator.Write(TokenType.Space, ' '); generator.Write(TokenType.Punctuation, ':'); generator.Write(TokenType.Space, ' '); generator.Write(TokenType.Keyword, "new"); generator.Write(TokenType.Punctuation, "()"); first = false; } else { generator.Write(TokenType.Punctuation, ','); generator.Write(TokenType.Space, ' '); generator.Write(TokenType.Keyword, "new"); generator.Write(TokenType.Punctuation, "()"); } } generator.Indent--; generator.ExitElement(); }
public void Generate(CodeGenerator generator, string name, CodeBasicPropertyMember property, CodeCompositeTypeDeclaration enclosingType) { generator.EnterElement(this); StartDirectives.Generate(generator); Comments.Generate(generator); Modifiers.Generate(generator); GenerateInner(generator, name, property, enclosingType); EndDirectives.Generate(generator); generator.ExitElement(); }
public void Generate(CodeGenerator generator, CodeCompositeTypeDeclaration enclosingType) { generator.EnterElement(this); StartDirectives.Generate(generator); Comments.Generate(generator); generator.GenerateAttributes(CustomAttributes); GenerateInner(generator, enclosingType); EndDirectives.Generate(generator); generator.ExitElement(); }
public void Generate(CodeGenerator generator) { generator.EnterElement(this); generator.WriteLine(TokenType.Comment, @"//--------------------------------------------------------------"); generator.WriteLine(TokenType.Comment, @"// _______ _____ __ ________ "); generator.WriteLine(TokenType.Comment, @"// | ___ \ / \ | | |___ ___| "); generator.WriteLine(TokenType.Comment, @"// | | \ | / ___ \ | | / / "); generator.WriteLine(TokenType.Comment, @"// | |___/ / / / \ \ | | / /_ "); generator.WriteLine(TokenType.Comment, @"// | | \ \ \ \___/ / | | /_ / "); generator.WriteLine(TokenType.Comment, @"// | |___/ | \ / | |____ | / "); generator.WriteLine(TokenType.Comment, @"// |_______/ \_____/ |_______| |/ "); generator.WriteLine(TokenType.Comment, @"// "); generator.WriteLine(TokenType.Comment, @"// V I S U A L S C R I P T I N G "); generator.WriteLine(TokenType.Comment, @"//--------------------------------------------------------------"); generator.WriteLine(TokenType.Comment, @"// "); generator.WriteLine(TokenType.Comment, @"// THIS FILE IS AUTO-GENERATED. "); generator.WriteLine(TokenType.Comment, @"// "); generator.WriteLine(TokenType.Comment, @"// ANY CHANGES WILL BE LOST NEXT TIME THIS SCRIPT IS GENERATED. "); generator.WriteLine(TokenType.Comment, @"// "); generator.WriteLine(TokenType.Comment, @"//--------------------------------------------------------------"); StartDirectives.Generate(generator); if (StartDirectives.Count > 0) { generator.WriteLine(); } Usings.Generate(generator); if (AssemblyCustomAttributes.Count > 0) { generator.GenerateAttributes(AssemblyCustomAttributes, "assembly"); generator.WriteLine(); } generator.PushUsingSet(Usings); Namespaces.Generate(generator); generator.PopUsingSet(); if (EndDirectives.Count > 0) { generator.WriteLine(); } EndDirectives.Generate(generator); generator.ExitElement(); }
public void Generate(CodeGenerator generator) { generator.EnterElement(this); if (CustomAttributes.Count > 0) { generator.GenerateAttributes(CustomAttributes, null, true); } Direction.Generate(generator); Type.Generate(generator); generator.Write(TokenType.Space, ' '); generator.OutputIdentifier(TokenType.Identifier, Name); generator.ExitElement(); }
public void Generate(CodeGenerator generator) { generator.EnterElement(this); Comments.Generate(generator); generator.Write(TokenType.Keyword, "namespace"); generator.Write(TokenType.Space, ' '); var names = Name.Split('.'); generator.OutputIdentifier(TokenType.Identifier, names[0]); for (int i = 1; i < names.Length; i++) { generator.Write(TokenType.Punctuation, '.'); generator.OutputIdentifier(TokenType.Identifier, names[i]); } generator.WriteOpeningBrace(); generator.Indent++; Usings.Generate(generator); Usings.Add(new CodeUsingImport(Name)); generator.PushUsingSet(Usings); bool needsBlankLine = false; foreach (var type in Types) { if (needsBlankLine) { generator.WriteLine(); } type.Generate(generator); needsBlankLine = true; } generator.PopUsingSet(); generator.Indent--; generator.WriteClosingBrace(); generator.ExitElement(); }
public void Generate(CodeGenerator generator) { generator.EnterElement(this); StartDirectives.Generate(generator); Comments.Generate(generator); generator.GenerateAttributes(CustomAttributes); generator.OutputIdentifier(TokenType.Identifier, Name); if (Initializer != null) { generator.Write(TokenType.Space, ' '); generator.Write(TokenType.Punctuation, '='); generator.Write(TokenType.Space, ' '); Initializer.Generate(generator); } generator.WriteLine(TokenType.Punctuation, ','); EndDirectives.Generate(generator); generator.ExitElement(); }
public void Generate(CodeGenerator generator) { generator.EnterElement(this); if (ArrayElementType != null) { ArrayElementType.Generate(generator); generator.Write(TokenType.Punctuation, ArraySuffix); generator.ExitElement(); return; } var name = RawName; if (SimplifiedBuiltinTypeNames.TryGetValue(name, out var simplifiedBuiltinTypeName)) { generator.Write(TokenType.Keyword, simplifiedBuiltinTypeName); generator.ExitElement(); return; } if (name == "var") { generator.Write(TokenType.Keyword, name); generator.ExitElement(); return; } if (Global) { generator.Write(TokenType.Keyword, "global"); generator.Write(TokenType.Punctuation, "::"); } var nameBuilder = new StringBuilder(); var namespaceNameLength = 0; { var previousIndex = 0; for (var i = 0; i < name.Length; i++) { var c = name[i]; if (c == '.') { nameBuilder.Append(name.Substring(previousIndex, i - previousIndex).EscapeIdentifier()); namespaceNameLength = nameBuilder.Length; nameBuilder.Append('.'); previousIndex = i + 1; } else if (c == '+') { nameBuilder.Append(name.Substring(previousIndex, i - previousIndex).EscapeIdentifier()).Append('.'); previousIndex = i + 1; } } nameBuilder.Append(previousIndex > 0 ? name.Substring(previousIndex).EscapeIdentifier() : name.EscapeUnqualifiedTypeIdentifier()); } if (namespaceNameLength > 0) { var namespaceRef = new CodeUsingImport(nameBuilder.ToString(0, namespaceNameLength)); var usingSets = generator.UsingSets; foreach (var usingSet in usingSets) { if (usingSet.Contains(namespaceRef)) { var ambiguityDetected = false; var unqualifiedTypeName = nameBuilder.ToString(namespaceNameLength + 1, nameBuilder.Length - namespaceNameLength - 1); var unqualifiedTypeNameWithArity = unqualifiedTypeName + (TypeArguments != null && TypeArguments.Count != 0 ? "`" + TypeArguments.Count : ""); if (TypesByNames.TryGetValue(unqualifiedTypeNameWithArity, out var types)) { foreach (var type in types) { var otherNamespaceRef = new CodeUsingImport(type.NamespaceName); if (namespaceRef != otherNamespaceRef) { foreach (var otherUsingSet in usingSets) { if (otherUsingSet.Contains(otherNamespaceRef)) { ambiguityDetected = true; break; } } } if (ambiguityDetected) { break; } } } ambiguityDetected = ambiguityDetected || generator.Options.PredeclaredTypes.Where(type => type.NamespaceName != namespaceRef.Name && type.TypeName == unqualifiedTypeNameWithArity).Any(); if (!ambiguityDetected) { nameBuilder.Length = 0; nameBuilder.Append(unqualifiedTypeName); } break; } } } { var previousIndex = 0; var typeArgumentStart = 0; for (var characterIndex = 0; characterIndex < nameBuilder.Length;) { if (nameBuilder[characterIndex] == '`') { generator.OutputQualifiedName(TokenType.TypeIdentifier, nameBuilder, previousIndex, characterIndex); characterIndex++; var arity = 0; while (characterIndex < nameBuilder.Length && '0' <= nameBuilder[characterIndex] && nameBuilder[characterIndex] <= '9') { arity = arity * 10 + (nameBuilder[characterIndex] - '0'); characterIndex++; } previousIndex = characterIndex; generator.Write(TokenType.Punctuation, '<'); var first = true; for (var typeArgumentIndex = typeArgumentStart; typeArgumentIndex < typeArgumentStart + arity; typeArgumentIndex++) { var typeArgument = TypeArguments[typeArgumentIndex]; if (first) { first = false; } else { generator.Write(TokenType.Punctuation, ','); if (typeArgument != null) { generator.Write(TokenType.Space, ' '); } } if (typeArgument != null) { typeArgument.Generate(generator); } } typeArgumentStart += arity; generator.Write(TokenType.Punctuation, '>'); } else { characterIndex++; } } if (previousIndex < nameBuilder.Length) { generator.OutputQualifiedName(TokenType.TypeIdentifier, nameBuilder, previousIndex); } } generator.ExitElement(); }