Skip to content

Commit

Permalink
Exposing Type on Class
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelaird committed Oct 14, 2017
1 parent f6c69ac commit e88b3ca
Show file tree
Hide file tree
Showing 10 changed files with 24 additions and 1 deletion.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -163,3 +163,4 @@ $RECYCLE.BIN/
!lib/*.dll
/.vs/Typewriter/v15/sqlite3/storage.ide
/.vs/config/applicationhost.config
/.vs
1 change: 1 addition & 0 deletions src/CodeDom/CodeDomClassMetadata.cs
Expand Up @@ -21,6 +21,7 @@ private CodeDomClassMetadata(CodeClass2 codeClass, CodeDomFileMetadata file)
public string Name => codeClass.Name;
public string FullName => codeClass.FullName;
public string Namespace => GetNamespace();
public ITypeMetadata Type => new LazyCodeDomTypeMetadata(codeClass.FullName, false, true, file);
public bool IsAbstract => codeClass.IsAbstract;
public bool IsGeneric => codeClass.IsGeneric;
public IClassMetadata BaseClass => CodeDomClassMetadata.FromCodeElements(codeClass.Bases, file).FirstOrDefault();
Expand Down
1 change: 1 addition & 0 deletions src/CodeDom/CodeDomTypeMetadata.cs
Expand Up @@ -27,6 +27,7 @@ protected CodeDomTypeMetadata(CodeType codeType, bool isNullable, bool isTask, C
public virtual string Name => GetName(CodeType.Name);
public virtual string FullName => GetFullName(CodeType.FullName);
public virtual string Namespace => GetNamespace();
public ITypeMetadata Type => this;

public bool IsAbstract => (codeType as CodeClass2)?.IsAbstract ?? false;
public bool IsEnum => CodeType.Kind == vsCMElement.vsCMElementEnum;
Expand Down
1 change: 1 addition & 0 deletions src/CodeDom/GenericTypeMetadata.cs
Expand Up @@ -23,6 +23,7 @@ public GenericTypeMetadata(string fullName)
public bool IsDefined => false;
public string Name => fullName;
public string Namespace => null;
public ITypeMetadata Type => this;

public IEnumerable<IAttributeMetadata> Attributes => new IAttributeMetadata[0];
public IClassMetadata BaseClass => null;
Expand Down
5 changes: 5 additions & 0 deletions src/CodeModel/CodeModel/Class.cs
Expand Up @@ -88,6 +88,11 @@ public abstract class Class : Item
/// </summary>
public abstract string Namespace { get; }

/// <summary>
/// The Type of the class.
/// </summary>
public abstract Type Type { get; }

/// <summary>
/// All classes defined in the class.
/// </summary>
Expand Down
5 changes: 5 additions & 0 deletions src/CodeModel/Typewriter.CodeModel.XML

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions src/Metadata/Interfaces/IClassMetadata.cs
Expand Up @@ -8,6 +8,7 @@ public interface IClassMetadata : INamedItem
bool IsAbstract { get; }
bool IsGeneric { get; }
string Namespace { get; }
ITypeMetadata Type { get; }
IEnumerable<IAttributeMetadata> Attributes { get; }
IClassMetadata BaseClass { get; }
IClassMetadata ContainingClass { get; }
Expand Down
2 changes: 2 additions & 0 deletions src/Roslyn/RoslynClassMetadata.cs
Expand Up @@ -45,6 +45,8 @@ private IReadOnlyCollection<ISymbol> Members
public bool IsGeneric => _symbol.TypeParameters.Any();
public string Namespace => _symbol.GetNamespace();

public ITypeMetadata Type => RoslynTypeMetadata.FromTypeSymbol(_symbol);

public IEnumerable<IAttributeMetadata> Attributes => RoslynAttributeMetadata.FromAttributeData(_symbol.GetAttributes());
public IClassMetadata BaseClass => RoslynClassMetadata.FromNamedTypeSymbol(_symbol.BaseType);
public IClassMetadata ContainingClass => RoslynClassMetadata.FromNamedTypeSymbol(_symbol.ContainingType);
Expand Down
4 changes: 3 additions & 1 deletion src/Roslyn/RoslynTypeMetadata.cs
Expand Up @@ -26,7 +26,8 @@ public RoslynTypeMetadata(ITypeSymbol symbol, bool isNullable, bool isTask)
public bool IsGeneric => (symbol as INamedTypeSymbol)?.TypeParameters.Any() ?? false;
public bool IsDefined => symbol.Locations.Any(l => l.IsInSource);
public string Namespace => symbol.GetNamespace();

public ITypeMetadata Type => this;

public IEnumerable<IAttributeMetadata> Attributes => RoslynAttributeMetadata.FromAttributeData(symbol.GetAttributes());
public IClassMetadata BaseClass => RoslynClassMetadata.FromNamedTypeSymbol(symbol.BaseType);
public IClassMetadata ContainingClass => RoslynClassMetadata.FromNamedTypeSymbol(symbol.ContainingType);
Expand Down Expand Up @@ -132,6 +133,7 @@ public class RoslynVoidTaskMetadata : ITypeMetadata
public bool IsTask => true;
public bool IsDefined => false;
public string Namespace => "System";
public ITypeMetadata Type => null;

public IEnumerable<IAttributeMetadata> Attributes => new IAttributeMetadata[0];
public IClassMetadata BaseClass => null;
Expand Down
4 changes: 4 additions & 0 deletions src/Typewriter/CodeModel/Implementation/ClassImpl.cs
Expand Up @@ -25,6 +25,10 @@ private ClassImpl(IClassMetadata metadata, Item parent)
public override bool IsAbstract => _metadata.IsAbstract;
public override bool IsGeneric => _metadata.IsGeneric;

private Type _type;
public override Type Type => _type ?? (_type = TypeImpl.FromMetadata(_metadata.Type, this));


private AttributeCollection _attributes;
public override AttributeCollection Attributes => _attributes ?? (_attributes = AttributeImpl.FromMetadata(_metadata.Attributes, this));

Expand Down

0 comments on commit e88b3ca

Please sign in to comment.