Browse Source

Fixed SD2-1307: Code completion for NHibernate

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2408 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
58d070bbf7
  1. 1
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj
  2. 6
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs
  3. 39
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DomAssemblyName.cs
  4. 6
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ProjectContentRegistry.cs
  5. 34
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs
  6. 8
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs

1
src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj

@ -88,6 +88,7 @@ @@ -88,6 +88,7 @@
<Compile Include="Src\NRefactoryResolver\NRefactoryInformationProvider.cs" />
<Compile Include="Src\NRefactoryResolver\NRefactoryResolver.cs" />
<Compile Include="Src\NRefactoryResolver\TypeVisitor.cs" />
<Compile Include="Src\ProjectContent\DomAssemblyName.cs" />
<Compile Include="Src\Refactoring\CodeGeneratorOptions.cs" />
<Compile Include="Src\ReflectionLayer\DomPersistence.cs" />
<Compile Include="Src\ReflectionLayer\ReflectionClass.cs" />

6
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs

@ -24,9 +24,9 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -24,9 +24,9 @@ namespace ICSharpCode.SharpDevelop.Dom
throw new ArgumentNullException("registry");
LoggingService.Info("Cecil: Load from " + fileName);
AssemblyDefinition asm = AssemblyFactory.GetAssembly(fileName);
List<AssemblyName> referencedAssemblies = new List<AssemblyName>();
List<DomAssemblyName> referencedAssemblies = new List<DomAssemblyName>();
foreach (AssemblyNameReference anr in asm.MainModule.AssemblyReferences) {
referencedAssemblies.Add(new AssemblyName(anr.FullName));
referencedAssemblies.Add(new DomAssemblyName(anr.FullName));
}
return new CecilProjectContent(asm.Name.FullName, fileName, referencedAssemblies.ToArray(), asm.MainModule.Types, registry);
}
@ -121,7 +121,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -121,7 +121,7 @@ namespace ICSharpCode.SharpDevelop.Dom
private sealed class CecilProjectContent : ReflectionProjectContent
{
public CecilProjectContent(string fullName, string fileName, AssemblyName[] referencedAssemblies,
public CecilProjectContent(string fullName, string fileName, DomAssemblyName[] referencedAssemblies,
TypeDefinitionCollection types, ProjectContentRegistry registry)
: base(fullName, fileName, referencedAssemblies, registry)
{

39
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DomAssemblyName.cs

@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version>$Revision$</version>
// </file>
using System;
namespace ICSharpCode.SharpDevelop.Dom
{
/// <summary>
/// Similar to System.Reflection.AssemblyName, but does not raise an exception
/// on invalid assembly names. (See SD2-1307)
/// </summary>
public sealed class DomAssemblyName
{
readonly string fullAssemblyName;
public DomAssemblyName(string fullAssemblyName)
{
this.fullAssemblyName = fullAssemblyName;
}
public string FullName {
get { return fullAssemblyName; }
}
internal static DomAssemblyName[] Convert(System.Reflection.AssemblyName[] names)
{
if (names == null) return null;
DomAssemblyName[] n = new DomAssemblyName[names.Length];
for (int i = 0; i < names.Length; i++) {
n[i] = new DomAssemblyName(names[i].FullName);
}
return n;
}
}
}

6
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ProjectContentRegistry.cs

@ -192,11 +192,17 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -192,11 +192,17 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
[Obsolete("Use DomAssemblyName instead of AssemblyName")]
public IProjectContent GetExistingProjectContent(AssemblyName assembly)
{
return GetExistingProjectContent(assembly.FullName, assembly.FullName);
}
public IProjectContent GetExistingProjectContent(DomAssemblyName assembly)
{
return GetExistingProjectContent(assembly.FullName, assembly.FullName);
}
public virtual IProjectContent GetExistingProjectContent(string itemInclude, string itemFileName)
{
if (itemFileName == itemInclude) {

34
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs

@ -18,7 +18,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -18,7 +18,7 @@ namespace ICSharpCode.SharpDevelop.Dom
public class ReflectionProjectContent : DefaultProjectContent
{
string assemblyFullName;
AssemblyName[] referencedAssemblies;
DomAssemblyName[] referencedAssemblyNames;
ICompilationUnit assemblyCompilationUnit;
string assemblyLocation;
ProjectContentRegistry registry;
@ -35,16 +35,20 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -35,16 +35,20 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
[Obsolete("This property always returns an empty array! Use ReferencedAssemblyNames instead!")]
public AssemblyName[] ReferencedAssemblies {
get {
return referencedAssemblies;
}
get { return new AssemblyName[0]; }
}
/// <summary>
/// Gets the list of assembly names referenced by this project content.
/// </summary>
public IList<DomAssemblyName> ReferencedAssemblyNames {
get { return Array.AsReadOnly(referencedAssemblyNames); }
}
public ICompilationUnit AssemblyCompilationUnit {
get {
return assemblyCompilationUnit;
}
get { return assemblyCompilationUnit; }
}
DateTime assemblyFileLastWriteTime;
@ -73,7 +77,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -73,7 +77,7 @@ namespace ICSharpCode.SharpDevelop.Dom
}
public ReflectionProjectContent(Assembly assembly, string assemblyLocation, ProjectContentRegistry registry)
: this(assembly.FullName, assemblyLocation, assembly.GetReferencedAssemblies(), registry)
: this(assembly.FullName, assemblyLocation, DomAssemblyName.Convert(assembly.GetReferencedAssemblies()), registry)
{
foreach (Type type in assembly.GetExportedTypes()) {
string name = type.FullName;
@ -84,7 +88,13 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -84,7 +88,13 @@ namespace ICSharpCode.SharpDevelop.Dom
InitializeSpecialClasses();
}
[Obsolete("Use DomAssemblyName instead of AssemblyName!")]
public ReflectionProjectContent(string assemblyFullName, string assemblyLocation, AssemblyName[] referencedAssemblies, ProjectContentRegistry registry)
: this(assemblyFullName, assemblyLocation, DomAssemblyName.Convert(referencedAssemblies), registry)
{
}
public ReflectionProjectContent(string assemblyFullName, string assemblyLocation, DomAssemblyName[] referencedAssemblies, ProjectContentRegistry registry)
{
if (assemblyFullName == null)
throw new ArgumentNullException("assemblyFullName");
@ -95,7 +105,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -95,7 +105,7 @@ namespace ICSharpCode.SharpDevelop.Dom
this.registry = registry;
this.assemblyFullName = assemblyFullName;
this.referencedAssemblies = referencedAssemblies;
this.referencedAssemblyNames = referencedAssemblies;
this.assemblyLocation = assemblyLocation;
this.assemblyCompilationUnit = new DefaultCompilationUnit(this);
@ -146,7 +156,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -146,7 +156,7 @@ namespace ICSharpCode.SharpDevelop.Dom
}
bool initialized = false;
List<AssemblyName> missingNames;
List<DomAssemblyName> missingNames;
public void InitializeReferences()
{
@ -169,7 +179,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -169,7 +179,7 @@ namespace ICSharpCode.SharpDevelop.Dom
}
} else {
initialized = true;
foreach (AssemblyName name in referencedAssemblies) {
foreach (DomAssemblyName name in referencedAssemblyNames) {
IProjectContent content = registry.GetExistingProjectContent(name);
if (content != null) {
changed = true;
@ -178,7 +188,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -178,7 +188,7 @@ namespace ICSharpCode.SharpDevelop.Dom
}
} else {
if (missingNames == null)
missingNames = new List<AssemblyName>();
missingNames = new List<DomAssemblyName>();
missingNames.Add(name);
}
}

8
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs

@ -249,8 +249,8 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -249,8 +249,8 @@ namespace ICSharpCode.SharpDevelop.Dom
time = File.GetLastWriteTimeUtc(pc.AssemblyLocation).ToFileTime();
} catch {}
writer.Write(time);
writer.Write(pc.ReferencedAssemblies.Length);
foreach (AssemblyName name in pc.ReferencedAssemblies) {
writer.Write(pc.ReferencedAssemblyNames.Count);
foreach (DomAssemblyName name in pc.ReferencedAssemblyNames) {
writer.Write(name.FullName);
}
WriteClasses();
@ -281,9 +281,9 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -281,9 +281,9 @@ namespace ICSharpCode.SharpDevelop.Dom
LoggingService.Warn("Read dom: assembly changed since cache was created");
return null;
}
AssemblyName[] referencedAssemblies = new AssemblyName[reader.ReadInt32()];
DomAssemblyName[] referencedAssemblies = new DomAssemblyName[reader.ReadInt32()];
for (int i = 0; i < referencedAssemblies.Length; i++) {
referencedAssemblies[i] = new AssemblyName(reader.ReadString());
referencedAssemblies[i] = new DomAssemblyName(reader.ReadString());
}
this.pc = new ReflectionProjectContent(assemblyName, assemblyLocation, referencedAssemblies, registry);
if (ReadClasses()) {

Loading…
Cancel
Save