示例#1
0
 public static ClassDeclarationSyntax AddBase(ClassDeclarationSyntax type, string baseName)
 {
     if (type.BaseList == null)
     {
         type = type.WithBaseList(SF.BaseList());
     }
     return type.WithBaseList(AddBase(type.BaseList, baseName));
 }
		/// <summary>
		///   Changes the base type of the derived component declaration.
		/// </summary>
		private ClassDeclarationSyntax ChangeComponentBaseType(INamedTypeSymbol classSymbol, ClassDeclarationSyntax classDeclaration)
		{
			if (classDeclaration.BaseList == null)
				return classDeclaration;

			if (classSymbol.BaseType.Equals(SemanticModel.GetTypeSymbol<Component>()))
				return classDeclaration;

			var baseTypeName = classSymbol.BaseType.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat);
			INamedTypeSymbol[] faults;

			if (!_faults.TryGetValue(_typeLookup[baseTypeName], out faults) || faults.Length == 0)
				return classDeclaration;

			var baseType = Syntax.TypeExpression(faults[faults.Length - 1]).WithTrivia(classDeclaration.BaseList.Types[0]);
			var baseTypeSyntax = (BaseTypeSyntax)SyntaxFactory.SimpleBaseType((TypeSyntax)baseType);

			var baseList = classDeclaration.BaseList.ReplaceNode(classDeclaration.BaseList.Types[0], baseTypeSyntax);
			return classDeclaration.WithBaseList(baseList);
		}
		/// <summary>
		///   Changes the base type of the fault effect declaration based on its location in the fault effect list.
		/// </summary>
		private ClassDeclarationSyntax ChangeFaultEffectBaseType(INamedTypeSymbol classSymbol, ClassDeclarationSyntax classDeclaration)
		{
			var baseTypeName = classSymbol.BaseType.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat);
			var faultEffectSymbol = _typeLookup[classSymbol.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)];
			var faultIndex = Array.IndexOf(_faults[_typeLookup[baseTypeName]], faultEffectSymbol);
			if (faultIndex == 0)
				return classDeclaration;

			var baseType = Syntax.TypeExpression(_faults[_typeLookup[baseTypeName]][faultIndex - 1]).WithTrivia(classDeclaration.BaseList.Types[0]);
			var baseTypes = SyntaxFactory.SingletonSeparatedList((BaseTypeSyntax)SyntaxFactory.SimpleBaseType((TypeSyntax)baseType));
			var baseList = SyntaxFactory.BaseList(classDeclaration.BaseList.ColonToken, baseTypes).WithTrivia(classDeclaration.BaseList);
			return classDeclaration.WithBaseList(baseList);
		}
        private void CreateClassSyntax()
        {
            var baseType = SyntaxFactory.IdentifierName("IMyLevelScript");

            if(!(m_objectBuilder is MyObjectBuilder_VisualLevelScript))
                baseType = string.IsNullOrEmpty(m_objectBuilder.Interface) ? null : SyntaxFactory.IdentifierName(m_baseType.Name);

            m_scriptClassDeclaration = MySyntaxFactory.PublicClass(m_scriptName);
                
            if(baseType != null)
            m_scriptClassDeclaration = m_scriptClassDeclaration 
                                        .WithBaseList(
                                                SyntaxFactory.BaseList(
                                                    SyntaxFactory.SingletonSeparatedList<BaseTypeSyntax>(
                                                        SyntaxFactory.SimpleBaseType(
                                                            baseType
                                                        )
                                                    )
                                                )
                                            );
        }
示例#5
0
 public static ClassDeclarationSyntax RemoveBase(ClassDeclarationSyntax type, string baseName)
 {
     if (type.BaseList == null)
     {
         return type;
     }
     return type.WithBaseList(RemoveBase(type.BaseList, baseName));
 }