/// <summary> /// Load extends statement list. /// </summary> /// <param name="declaration">The declaration to load.</param> /// <param name="resolver">The resolver to resolve dependencies.</param> private void LoadExtends(AGenericDeclaration <TNode> declaration, IDeclarationResolver resolver) { var declarationType = declaration.GetData <Type>(); var extendedInterfaces = declarationType.GetInterfaces(); if ((extendedInterfaces != null && extendedInterfaces.Any()) || declarationType.BaseType != null) { var uses = new List <IDeclarationUse <SyntaxNode> >(); if (declarationType.BaseType != null) { uses.Add(GetDeclarationUseFrom(declarationType.BaseType, resolver)); } if (extendedInterfaces != null) { foreach (var extendedInterface in extendedInterfaces) { uses.Add(GetDeclarationUseFrom(extendedInterface, resolver)); } } declaration.Extends = uses; } else { declaration.Extends = Array.Empty <IDeclarationUse <SyntaxNode> >(); } }
/// <summary> /// Load member list. /// </summary> /// <param name="declaration">The declaration to load.</param> /// <param name="resolver">The resolver to resolve dependencies.</param> private void LoadMembers(AGenericDeclaration <TNode> declaration, IDeclarationResolver resolver) { var memberList = new List <IMemberDeclaration <SyntaxNode> >(); try { foreach (var property in declaration.GetData <Type>().GetProperties()) { var propertyType = GetDeclarationUseFrom(property.PropertyType, resolver); memberList.Add( new PropertyDeclaration( property.Name, propertyType, new ReflectionPropertySyntaxNodeProvider(property, propertyType.SyntaxNodeProvider), property.CanRead, property.CanWrite)); } foreach (var method in declaration.GetData <Type>().GetMethods()) { if (!method.IsPrivate) { var returnType = GetDeclarationUseFrom(method.ReturnType, resolver); memberList.Add( new MethodDeclaration( method.Name, returnType, new ReflectionMethodSyntaxNodeProvider(method, returnType.SyntaxNodeProvider))); } } } catch (TypeLoadException e) { this.logger?.LogWarning($"Could not load properties from {declaration.GetData<Type>()} ({e.Message})"); } catch (FileNotFoundException e) { this.logger?.LogWarning($"Could not load properties from {declaration.GetData<Type>()} ({e.Message})"); } declaration.Members = memberList.Any() ? memberList.ToArray() : Array.Empty <IMemberDeclaration <SyntaxNode> >(); }
private void LoadAttributes(AGenericDeclaration <TNode> declaration, IDeclarationResolver resolver) { var attributeList = new List <IAttributeUse>(); var declType = declaration.GetData <Type>(); foreach (var customAttribute in declType.CustomAttributes) { attributeList.Add( new AttributeUse( GetDeclarationUseFrom(customAttribute.AttributeType, resolver).Declaration, new ReflectionAttributeSyntaxNodeProvider(customAttribute))); } declaration.Attributes = attributeList.Any() ? attributeList.ToArray() : Array.Empty <IAttributeUse>(); }
/// <summary> /// Load the generic parameters from the type parameter list node. /// </summary> private void LoadGenericParameters(AGenericDeclaration <TNode> declaration) { var declarationType = declaration.GetData <Type>(); if (declarationType.IsGenericTypeDefinition) { var parameterSet = new List <IGenericParameterDeclaration>(); foreach (var parameter in declarationType.GetTypeInfo().GenericTypeParameters) { parameterSet.Add(new GenericParameterDeclaration(parameter.Name, null)); } declaration.GenericParameters = parameterSet; } else { declaration.GenericParameters = Array.Empty <IGenericParameterDeclaration>(); } }