public void Render(JassTypeDeclarationSyntax typeDeclaration) { Write($"{JassKeyword.Type} "); Render(typeDeclaration.IdentifierName); Write($" {JassKeyword.Extends} "); Render(typeDeclaration.BaseType); }
private bool TryAdaptDeclaration(JassMapScriptAdapterContext context, ITopLevelDeclarationSyntax declaration, [NotNullWhen(true)] out ITopLevelDeclarationSyntax?adaptedDeclaration) { return(declaration switch { JassGlobalDeclarationListSyntax globalDeclarationList => TryAdaptGlobalDeclarationList(context, globalDeclarationList, out adaptedDeclaration), JassNativeFunctionDeclarationSyntax nativeFunctionDeclaration => TryAdaptNativeFunctionDeclaration(context, nativeFunctionDeclaration, out adaptedDeclaration), JassFunctionDeclarationSyntax functionDeclaration => TryAdaptFunctionDeclaration(context, functionDeclaration, out adaptedDeclaration), JassTypeDeclarationSyntax typeDeclaration => TryAdaptTypeDeclaration(context, typeDeclaration, out adaptedDeclaration), _ => TryAdaptDummy(context, declaration, out adaptedDeclaration), });
public IEnumerable <MemberDeclarationSyntax> Transpile(IDeclarationSyntax declaration) { return(declaration switch { JassTypeDeclarationSyntax typeDeclaration => new[] { Transpile(typeDeclaration) }, JassGlobalDeclarationListSyntax globalDeclarationList => Transpile(globalDeclarationList), JassGlobalDeclarationSyntax globalDeclaration => new[] { Transpile(globalDeclaration) }, JassNativeFunctionDeclarationSyntax nativeFunctionDeclaration => new[] { Transpile(nativeFunctionDeclaration) }, JassFunctionDeclarationSyntax functionDeclaration => new[] { Transpile(functionDeclaration) }, _ => Array.Empty <MemberDeclarationSyntax>(), });
private bool TryAdaptTypeDeclaration(JassMapScriptAdapterContext context, JassTypeDeclarationSyntax typeDeclaration, [NotNullWhen(true)] out ITopLevelDeclarationSyntax?adaptedTypeDeclaration) { if (!context.KnownTypes.ContainsKey(typeDeclaration.BaseType.TypeName.Name)) { context.Diagnostics.Add($"Unknown base type '{typeDeclaration.BaseType}'."); } context.KnownTypes.Add(typeDeclaration.IdentifierName.Name, typeDeclaration.BaseType.TypeName.Name); adaptedTypeDeclaration = null; return(false); }
public MemberDeclarationSyntax Transpile(JassTypeDeclarationSyntax typeDeclaration) { var identifier = Transpile(typeDeclaration.IdentifierName); var baseList = SyntaxFactory.BaseList(SyntaxFactory.SingletonSeparatedList <BaseTypeSyntax>(SyntaxFactory.SimpleBaseType(Transpile(typeDeclaration.BaseType)))); return(SyntaxFactory.ClassDeclaration(