Browse Source

Add ICompilation.Assemblies.

newNRvisualizers
Daniel Grunwald 14 years ago
parent
commit
29c1b59c10
  1. 17
      ICSharpCode.NRefactory.CSharp/Refactoring/RefactoringContext.cs
  2. 2
      ICSharpCode.NRefactory/Documentation/GetPotentiallyNestedClassTypeReference.cs
  3. 3
      ICSharpCode.NRefactory/TypeSystem/ExtensionMethods.cs
  4. 8
      ICSharpCode.NRefactory/TypeSystem/ICompilation.cs
  5. 5
      ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultAssemblyReference.cs
  6. 2
      ICSharpCode.NRefactory/TypeSystem/Implementation/GetClassTypeReference.cs
  7. 11
      ICSharpCode.NRefactory/TypeSystem/Implementation/KnownTypeCache.cs
  8. 15
      ICSharpCode.NRefactory/TypeSystem/Implementation/SimpleCompilation.cs

17
ICSharpCode.NRefactory.CSharp/Refactoring/RefactoringContext.cs

@ -61,18 +61,13 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -61,18 +61,13 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
public AstType CreateShortType (string ns, string name, int typeParameterCount = 0)
{
var def = Compilation.MainAssembly.GetTypeDefinition (ns, name, typeParameterCount);
if (def == null) {
foreach (var asm in Compilation.ReferencedAssemblies) {
def = asm.GetTypeDefinition (ns, name, typeParameterCount);
if (def != null)
break;
}
foreach (var asm in Compilation.Assemblies) {
var def = asm.GetTypeDefinition (ns, name, typeParameterCount);
if (def != null)
return CreateShortType (def);
}
if (def == null)
return new MemberType (new SimpleType (ns), name);
return CreateShortType (def);
return new MemberType (new SimpleType (ns), name);
}
public virtual AstType CreateShortType (AstType fullType)

2
ICSharpCode.NRefactory/Documentation/GetPotentiallyNestedClassTypeReference.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.NRefactory.Documentation @@ -43,7 +43,7 @@ namespace ICSharpCode.NRefactory.Documentation
public IType Resolve(ITypeResolveContext context)
{
string[] parts = typeName.Split('.');
var assemblies = new [] { context.CurrentAssembly, context.Compilation.MainAssembly }.Concat(context.Compilation.ReferencedAssemblies);
var assemblies = new [] { context.CurrentAssembly }.Concat(context.Compilation.Assemblies);
for (int i = parts.Length - 1; i >= 0; i--) {
string ns = string.Join(".", parts, 0, i);
string name = parts[i];

3
ICSharpCode.NRefactory/TypeSystem/ExtensionMethods.cs

@ -292,8 +292,7 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -292,8 +292,7 @@ namespace ICSharpCode.NRefactory.TypeSystem
/// </summary>
public static IEnumerable<ITypeDefinition> GetAllTypeDefinitions (this ICompilation compilation)
{
return compilation.MainAssembly.GetAllTypeDefinitions()
.Concat(compilation.ReferencedAssemblies.SelectMany(a => a.GetAllTypeDefinitions()));
return compilation.Assemblies.SelectMany(a => a.GetAllTypeDefinitions());
}
/// <summary>

8
ICSharpCode.NRefactory/TypeSystem/ICompilation.cs

@ -34,10 +34,16 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -34,10 +34,16 @@ namespace ICSharpCode.NRefactory.TypeSystem
/// </summary>
ITypeResolveContext TypeResolveContext { get; }
/// <summary>
/// Gets the list of all assemblies in the compilation.
/// </summary>
IList<IAssembly> Assemblies { get; }
/// <summary>
/// Gets the referenced assemblies.
/// This list does not include the current assembly.
/// This list does not include the main assembly.
/// </summary>
[ObsoleteAttribute("Use compilation.Assemblies.Where(asm != compilation.MainAssembly) instead.")]
IList<IAssembly> ReferencedAssemblies { get; }
/// <summary>

5
ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultAssemblyReference.cs

@ -45,13 +45,10 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -45,13 +45,10 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
IAssembly current = context.CurrentAssembly;
if (current != null && string.Equals(shortName, current.AssemblyName, StringComparison.OrdinalIgnoreCase))
return current;
foreach (IAssembly asm in context.Compilation.ReferencedAssemblies) {
foreach (IAssembly asm in context.Compilation.Assemblies) {
if (string.Equals(shortName, asm.AssemblyName, StringComparison.OrdinalIgnoreCase))
return asm;
}
IAssembly main = context.Compilation.MainAssembly;
if (string.Equals(shortName, main.AssemblyName, StringComparison.OrdinalIgnoreCase))
return main;
return null;
}

2
ICSharpCode.NRefactory/TypeSystem/Implementation/GetClassTypeReference.cs

@ -83,7 +83,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -83,7 +83,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
IType type = null;
if (assembly == null) {
var compilation = context.Compilation;
foreach (var asm in new[] { context.CurrentAssembly, compilation.MainAssembly }.Concat(compilation.ReferencedAssemblies)) {
foreach (var asm in new[] { context.CurrentAssembly }.Concat(compilation.Assemblies)) {
if (asm != null) {
type = asm.GetTypeDefinition(nameSpace, name, typeParameterCount);
if (type != null)

11
ICSharpCode.NRefactory/TypeSystem/Implementation/KnownTypeCache.cs

@ -49,17 +49,12 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -49,17 +49,12 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
KnownTypeReference typeRef = KnownTypeReference.Get(typeCode);
if (typeRef == null)
return SpecialType.UnknownType;
ITypeDefinition typeDef;
foreach (IAssembly asm in compilation.ReferencedAssemblies) {
typeDef = asm.GetTypeDefinition(typeRef.Namespace, typeRef.Name, typeRef.TypeParameterCount);
foreach (IAssembly asm in compilation.Assemblies) {
var typeDef = asm.GetTypeDefinition(typeRef.Namespace, typeRef.Name, typeRef.TypeParameterCount);
if (typeDef != null)
return typeDef;
}
typeDef = compilation.MainAssembly.GetTypeDefinition(typeRef.Namespace, typeRef.Name, typeRef.TypeParameterCount);
if (typeDef != null)
return typeDef;
else
return new UnknownType(typeRef.Namespace, typeRef.Name, typeRef.TypeParameterCount);
return new UnknownType(typeRef.Namespace, typeRef.Name, typeRef.TypeParameterCount);
}
}
}

15
ICSharpCode.NRefactory/TypeSystem/Implementation/SimpleCompilation.cs

@ -34,6 +34,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -34,6 +34,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
readonly CacheManager cacheManager = new CacheManager();
readonly KnownTypeCache knownTypeCache;
readonly IAssembly mainAssembly;
readonly IList<IAssembly> assemblies;
readonly IList<IAssembly> referencedAssemblies;
INamespace rootNamespace;
@ -63,12 +64,17 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -63,12 +64,17 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
this.solutionSnapshot = solutionSnapshot;
this.context = new SimpleTypeResolveContext(this);
this.mainAssembly = mainAssembly.Resolve(context);
List<IAssembly> assemblies = new List<IAssembly>();
assemblies.Add(this.mainAssembly);
List<IAssembly> referencedAssemblies = new List<IAssembly>();
foreach (var asmRef in assemblyReferences) {
IAssembly asm = asmRef.Resolve(context);
if (asm != null && !assemblies.Contains(asm))
assemblies.Add(asm);
if (asm != null && !referencedAssemblies.Contains(asm))
referencedAssemblies.Add(asm);
}
this.assemblies = assemblies.AsReadOnly();
this.referencedAssemblies = referencedAssemblies.AsReadOnly();
this.knownTypeCache = new KnownTypeCache(this);
}
@ -81,6 +87,15 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -81,6 +87,15 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
}
}
public IList<IAssembly> Assemblies {
get {
if (assemblies == null)
throw new InvalidOperationException("Compilation isn't initialized yet");
return assemblies;
}
}
[ObsoleteAttribute("Use compilation.Assemblies.Where(asm != compilation.MainAssembly) instead.")]
public IList<IAssembly> ReferencedAssemblies {
get {
if (referencedAssemblies == null)

Loading…
Cancel
Save