Browse Source

Allow updating code from EnvDTE via LanguageBinding.CodeGenerator

pull/45/merge
Daniel Grunwald 13 years ago
parent
commit
855b848f36
  1. 2
      src/AddIns/Analysis/CodeAnalysis/Src/SuppressMessageCommand.cs
  2. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs
  3. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpFullParseInformation.cs
  4. 21
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs
  5. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/OverrideToStringMethodDialog.xaml.cs
  6. 44
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/RefactoringExtensions.cs
  7. 3
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  8. 3
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute.cs
  9. 4
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute2.cs
  10. 11
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass.cs
  11. 120
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass2.cs
  12. 48
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeDelegate.cs
  13. 12
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs
  14. 14
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelContext.cs
  15. 79
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter.cs
  16. 78
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter2.cs
  17. 32
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameters.cs
  18. 22
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs
  19. 169
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef.cs
  20. 41
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef2.cs
  21. 7
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs
  22. 43
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/NamespaceName.cs
  23. 16
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/PartialClasses.cs
  24. 1
      src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/vsCMParameterKind.vb
  25. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  26. 40
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/NamespaceNameTests.cs
  27. 2
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ImplementInterfaceAction.cs
  28. 6
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CompilerErrors/CS0029InvalidConversionIssue.cs
  29. 6
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/RefactoringContext.cs
  30. 2
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs
  31. 20
      src/Main/Base/Project/Dom/IEntityModel.cs
  32. 1
      src/Main/Base/Project/Dom/IEntityModelContext.cs
  33. 2
      src/Main/Base/Project/Dom/ITypeDefinitionModel.cs
  34. 2
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  35. 34
      src/Main/Base/Project/Refactoring/CodeGenerator.cs
  36. 6
      src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs
  37. 2
      src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs
  38. 12
      src/Main/SharpDevelop/Dom/MemberModel.cs
  39. 24
      src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs

2
src/AddIns/Analysis/CodeAnalysis/Src/SuppressMessageCommand.cs

@ -29,7 +29,7 @@ namespace ICSharpCode.CodeAnalysis
FxCopTaskTag tag = t.Tag as FxCopTaskTag; FxCopTaskTag tag = t.Tag as FxCopTaskTag;
if (tag == null) if (tag == null)
continue; continue;
ICodeGenerator gen = tag.Project.LanguageBinding.CodeGenerator; CodeGenerator gen = tag.Project.LanguageBinding.CodeGenerator;
ICompilation compilation; ICompilation compilation;
if (t.FileName != null) if (t.FileName != null)
compilation = SD.ParserService.GetCompilationForFile(t.FileName); compilation = SD.ParserService.GetCompilationForFile(t.FileName);

2
src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs

@ -25,7 +25,7 @@ namespace CSharpBinding
{ {
this.container.AddService(typeof(IFormattingStrategy), new CSharpFormattingStrategy()); this.container.AddService(typeof(IFormattingStrategy), new CSharpFormattingStrategy());
this.container.AddService(typeof(IBracketSearcher), new CSharpBracketSearcher()); this.container.AddService(typeof(IBracketSearcher), new CSharpBracketSearcher());
this.container.AddService(typeof(ICodeGenerator), new CSharpCodeGenerator()); this.container.AddService(typeof(CodeGenerator), new CSharpCodeGenerator());
this.container.AddService(typeof(System.CodeDom.Compiler.CodeDomProvider), new Microsoft.CSharp.CSharpCodeProvider()); this.container.AddService(typeof(System.CodeDom.Compiler.CodeDomProvider), new Microsoft.CSharp.CSharpCodeProvider());
} }
} }

2
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpFullParseInformation.cs

@ -46,7 +46,7 @@ namespace CSharpBinding.Parser
// (caching in the parse information could prevent the compilation from being garbage-collected) // (caching in the parse information could prevent the compilation from being garbage-collected)
// Also, don't cache CSharpAstResolvers for every file - doing so would require too much memory, // Also, don't cache CSharpAstResolvers for every file - doing so would require too much memory,
// and we rarely usually only need to access the same file several times. // and we usually only need to access the same file several times.
// So we use a static key to get the resolver, and verify that it belongs to this parse information. // So we use a static key to get the resolver, and verify that it belongs to this parse information.
var resolver = compilation.CacheManager.GetShared(ResolverCacheKey) as CSharpAstResolver; var resolver = compilation.CacheManager.GetShared(ResolverCacheKey) as CSharpAstResolver;
if (resolver == null || resolver.RootNode != syntaxTree || resolver.UnresolvedFile != UnresolvedFile) { if (resolver == null || resolver.RootNode != syntaxTree || resolver.UnresolvedFile != UnresolvedFile) {

21
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs

@ -7,6 +7,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Windows.Media.Animation; using System.Windows.Media.Animation;
using CSharpBinding.Parser;
using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.Core.Presentation; using ICSharpCode.Core.Presentation;
@ -28,7 +29,7 @@ namespace CSharpBinding.Refactoring
/// <summary> /// <summary>
/// Description of CSharpCodeGenerator. /// Description of CSharpCodeGenerator.
/// </summary> /// </summary>
public class CSharpCodeGenerator : DefaultCodeGenerator public class CSharpCodeGenerator : CodeGenerator
{ {
public override void AddAttribute(IEntity target, IAttribute attribute) public override void AddAttribute(IEntity target, IAttribute attribute)
{ {
@ -102,8 +103,7 @@ namespace CSharpBinding.Refactoring
var view = SD.FileService.OpenFile(new FileName(region.FileName), false); var view = SD.FileService.OpenFile(new FileName(region.FileName), false);
var editor = view.GetRequiredService<ITextEditor>(); var editor = view.GetRequiredService<ITextEditor>();
var context = SDRefactoringContext.Create(editor.FileName, editor.Document, region.Begin, CancellationToken.None); var context = SDRefactoringContext.Create(editor.FileName, editor.Document, region.Begin, CancellationToken.None);
var node = context.RootNode.GetNodeAt<AstNode>(region.Begin); var node = context.RootNode.GetNodeAt<EntityDeclaration>(region.Begin);
if (node is ICSharpCode.NRefactory.CSharp.Attribute) node = node.Parent;
var resolver = context.GetResolverStateBefore(node); var resolver = context.GetResolverStateBefore(node);
var builder = new TypeSystemAstBuilder(resolver); var builder = new TypeSystemAstBuilder(resolver);
@ -114,5 +114,20 @@ namespace CSharpBinding.Refactoring
script.InsertBefore(node, attr); script.InsertBefore(node, attr);
} }
} }
public override void AddField(ITypeDefinition declaringType, Accessibility accessibility, IType fieldType, string name)
{
SDRefactoringContext context = declaringType.CreateRefactoringContext();
var typeDecl = context.GetNode<TypeDeclaration>();
using (var script = context.StartScript()) {
var astBuilder = context.CreateTypeSystemAstBuilder(typeDecl.FirstChild);
var fieldDecl = new FieldDeclaration();
fieldDecl.Modifiers = TypeSystemAstBuilder.ModifierFromAccessibility(accessibility);
fieldDecl.ReturnType = astBuilder.ConvertType(context.Compilation.Import(fieldType));
fieldDecl.Variables.Add(new VariableInitializer(name));
script.InsertWithCursor("Add field: " + name, Script.InsertPosition.End, fieldDecl);
}
base.AddField(declaringType, accessibility, fieldType, name);
}
} }
} }

2
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/OverrideToStringMethodDialog.xaml.cs

@ -66,7 +66,7 @@ namespace CSharpBinding.Refactoring
return null; return null;
} }
string GenerateFormatString(ITypeDefinition currentClass, ICodeGenerator generator, string[] fields) string GenerateFormatString(ITypeDefinition currentClass, CodeGenerator generator, string[] fields)
{ {
string fieldsString = ""; string fieldsString = "";

44
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/RefactoringExtensions.cs

@ -3,11 +3,14 @@
using System; using System;
using System.Linq; using System.Linq;
using CSharpBinding.Parser;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.NRefactory.CSharp; using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using CSharpBinding.Parser; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Editor;
namespace CSharpBinding.Refactoring namespace CSharpBinding.Refactoring
{ {
@ -59,5 +62,44 @@ namespace CSharpBinding.Refactoring
return null; return null;
return parseInfo.SyntaxTree.GetNodeAt<EntityDeclaration>(entity.Region.Begin); return parseInfo.SyntaxTree.GetNodeAt<EntityDeclaration>(entity.Region.Begin);
} }
/// <summary>
/// Returns a refactoring context for the file that contains the entity.
/// This will open the file in the text editor if necessary.
/// </summary>
public static SDRefactoringContext CreateRefactoringContext(this IEntity entity)
{
var typeDef = entity as ITypeDefinition;
DomRegion region;
if (typeDef != null) {
IUnresolvedTypeDefinition bestPart = null;
foreach (var part in typeDef.Parts) {
if (bestPart == null || EntityModelContextUtils.IsBetterPart(part, bestPart, ".cs"))
bestPart = part;
}
region = bestPart.Region;
} else {
region = entity.Region;
}
var view = SD.FileService.OpenFile(new FileName(region.FileName), false);
if (view == null)
return null;
var editor = view.GetService<ITextEditor>();
if (editor == null)
return null;
var project = entity.ParentAssembly.GetProject();
var fileName = FileName.Create(region.FileName);
var parseInfo = SD.ParserService.Parse(fileName, editor.Document, project) as CSharpFullParseInformation;
if (parseInfo == null)
return null;
ICompilation compilation;
if (project != null)
compilation = SD.ParserService.GetCompilation(project);
else
compilation = SD.ParserService.GetCompilationForFile(fileName);
var resolver = parseInfo.GetResolver(compilation);
return new SDRefactoringContext(editor, resolver, region.Begin);
}
} }
} }

3
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -105,7 +105,6 @@
<Compile Include="Src\EnvDTE\CodeInterface.cs" /> <Compile Include="Src\EnvDTE\CodeInterface.cs" />
<Compile Include="Src\EnvDTE\CodeModelContext.cs" /> <Compile Include="Src\EnvDTE\CodeModelContext.cs" />
<Compile Include="Src\EnvDTE\CodeParameter2.cs" /> <Compile Include="Src\EnvDTE\CodeParameter2.cs" />
<Compile Include="Src\EnvDTE\CodeParameters.cs" />
<Compile Include="Src\EnvDTE\CodeModel.cs" /> <Compile Include="Src\EnvDTE\CodeModel.cs" />
<Compile Include="Src\EnvDTE\CodeNamespace.cs" /> <Compile Include="Src\EnvDTE\CodeNamespace.cs" />
<Compile Include="Src\EnvDTE\CodeParameter.cs" /> <Compile Include="Src\EnvDTE\CodeParameter.cs" />
@ -130,8 +129,6 @@
<Compile Include="Src\EnvDTE\ImplementedInterfacesOnClass.cs" /> <Compile Include="Src\EnvDTE\ImplementedInterfacesOnClass.cs" />
<Compile Include="Src\EnvDTE\IParameterExtensions.cs" /> <Compile Include="Src\EnvDTE\IParameterExtensions.cs" />
<Compile Include="Src\EnvDTE\IReturnTypeExtensions.cs" /> <Compile Include="Src\EnvDTE\IReturnTypeExtensions.cs" />
<Compile Include="Src\EnvDTE\NamespaceName.cs" />
<Compile Include="Src\EnvDTE\PartialClasses.cs" />
<Compile Include="Src\EnvDTE\ProjectKind.cs" /> <Compile Include="Src\EnvDTE\ProjectKind.cs" />
<Compile Include="Src\EnvDTE\Projects.cs" /> <Compile Include="Src\EnvDTE\Projects.cs" />
<Compile Include="Src\EnvDTE\Reference3.cs" /> <Compile Include="Src\EnvDTE\Reference3.cs" />

3
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute.cs

@ -18,7 +18,8 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{ {
} }
public CodeAttribute(IAttribute attribute) public CodeAttribute(CodeModelContext context, IAttribute attribute)
: base(context)
{ {
this.attribute = attribute; this.attribute = attribute;
} }

4
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute2.cs

@ -13,8 +13,8 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{ {
} }
public CodeAttribute2(IAttribute attribute) public CodeAttribute2(CodeModelContext context, IAttribute attribute)
: base(attribute) : base(context, attribute)
{ {
} }

11
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass.cs

@ -46,11 +46,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE
if (td == null) if (td == null)
return null; return null;
IType fieldType = td.Compilation.FindType(fieldTypeName); IType fieldType = td.Compilation.FindType(fieldTypeName);
IFieldModel field = typeModel.AddField(Access.ToAccessibility(), fieldType, name); context.CodeGenerator.AddField(td, Access.ToAccessibility(), fieldType, name);
if (field != null) var fieldModel = typeModel.Members.OfType<IFieldModel>().FirstOrDefault(f => f.Name == name);
return new CodeVariable(context, field); if (fieldModel != null) {
else return new CodeVariable(context, fieldModel);
return null; }
return null;
} }
} }
} }

120
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass2.cs

@ -1,58 +1,62 @@
//// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
//// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
//
//using System; using System;
//using ICSharpCode.SharpDevelop.Dom; using System.Linq;
// using ICSharpCode.SharpDevelop.Dom;
//namespace ICSharpCode.PackageManagement.EnvDTE
//{ namespace ICSharpCode.PackageManagement.EnvDTE
// public class CodeClass2 : CodeClass, global::EnvDTE.CodeClass2 {
// { public class CodeClass2 : CodeClass, global::EnvDTE.CodeClass2
// IClassKindUpdater classKindUpdater; {
// public CodeClass2(CodeModelContext context, ITypeDefinitionModel typeModel)
// public CodeClass2(IProjectContent projectContent, IClass c, IClassKindUpdater classKindUpdater) : base(context, typeModel)
// : base(projectContent, c) {
// { }
// this.classKindUpdater = classKindUpdater;
// } public global::EnvDTE.CodeElements PartialClasses {
// get {
// public CodeClass2(IProjectContent projectContent, IClass c) var list = new CodeElementsList<CodeType>();
// : this(projectContent, c, new ClassKindUpdater(c)) var td = typeModel.Resolve();
// { if (td != null) {
// } foreach (var fileName in td.Parts.Select(p => p.UnresolvedFile.FileName).Distinct()) {
// var newContext = context.WithFilteredFileName(fileName);
// public global::EnvDTE.CodeElements PartialClasses { list.Add(CodeType.Create(newContext, typeModel));
// get { return new PartialClasses(this); } }
// } } else {
// list.Add(this);
// public static CodeClass2 CreateFromBaseType(IProjectContent projectContent, IReturnType baseType) }
// { return list;
// IClass baseTypeClass = baseType.GetUnderlyingClass(); }
// return new CodeClass2(projectContent, baseTypeClass); }
// }
// public bool IsGeneric {
// public bool IsGeneric { get { return typeModel.FullTypeName.TypeParameterCount > 0; }
// get { return Class.DotNetName.Contains("`"); } }
// }
// public global::EnvDTE.vsCMClassKind ClassKind {
// public global::EnvDTE.vsCMClassKind ClassKind { get {
// get { if (typeModel.IsPartial) {
// if (Class.IsPartial) { return global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass;
// return global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass; }
// } return global::EnvDTE.vsCMClassKind.vsCMClassKindMainClass;
// return global::EnvDTE.vsCMClassKind.vsCMClassKindMainClass; }
// } set {
// set { if (value == this.ClassKind)
// if (value == global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass) { return;
// classKindUpdater.MakeClassPartial(); if (value == global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass) {
// } else { var td = typeModel.Resolve();
// throw new NotImplementedException(); if (td == null)
// } throw new NotSupportedException();
// } context.CodeGenerator.MakePartial(td);
// } } else {
// throw new NotSupportedException();
// public bool IsAbstract { }
// get { return Class.IsAbstract; } }
// } }
// }
//} public bool IsAbstract {
get { return typeModel.IsAbstract; }
}
}
}

48
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeDelegate.cs

@ -1,24 +1,24 @@
//// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
//// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
//
//using System; using System;
//using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE namespace ICSharpCode.PackageManagement.EnvDTE
//{ {
// public class CodeDelegate : CodeType, global::EnvDTE.CodeDelegate public class CodeDelegate : CodeType, global::EnvDTE.CodeDelegate
// { {
// public CodeDelegate(IProjectContent projectContent, IClass c) public CodeDelegate(CodeModelContext context, ITypeDefinitionModel typeModel)
// : base(projectContent, c) : base(context, typeModel)
// { {
// } }
//
// public CodeDelegate() public CodeDelegate()
// { {
// } }
//
// public override global::EnvDTE.vsCMElement Kind { public override global::EnvDTE.vsCMElement Kind {
// get { return global::EnvDTE.vsCMElement.vsCMElementDelegate; } get { return global::EnvDTE.vsCMElement.vsCMElementDelegate; }
// } }
// } }
//} }

12
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs

@ -18,6 +18,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{ {
} }
public CodeElement(CodeModelContext context)
{
this.context = context;
}
public CodeElement(CodeModelContext context, ISymbolModel symbolModel) public CodeElement(CodeModelContext context, ISymbolModel symbolModel)
{ {
this.context = context; this.context = context;
@ -88,6 +93,13 @@ namespace ICSharpCode.PackageManagement.EnvDTE
get { return global::EnvDTE.vsCMElement.vsCMElementOther; } get { return global::EnvDTE.vsCMElement.vsCMElementOther; }
} }
protected bool IsInFilter(DomRegion region)
{
if (context.FilteredFileName == null)
return true;
return context.FilteredFileName == region.FileName;
}
protected override bool GetIsDerivedFrom(string fullName) protected override bool GetIsDerivedFrom(string fullName)
{ {
return false; return false;

14
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelContext.cs

@ -3,6 +3,7 @@
using System; using System;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Refactoring;
namespace ICSharpCode.PackageManagement.EnvDTE namespace ICSharpCode.PackageManagement.EnvDTE
{ {
@ -10,5 +11,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{ {
public IProject CurrentProject { get; set; } public IProject CurrentProject { get; set; }
public IDocumentLoader DocumentLoader { get; set; } public IDocumentLoader DocumentLoader { get; set; }
public CodeGenerator CodeGenerator { get; set; }
/// <summary>
/// Specifies the file name if this code model context refers to
/// </summary>
public string FilteredFileName { get; set; }
public CodeModelContext WithFilteredFileName(string fileName)
{
CodeModelContext newContext = (CodeModelContext)MemberwiseClone();
newContext.FilteredFileName = fileName;
return newContext;
}
} }
} }

79
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter.cs

@ -1,37 +1,42 @@
//// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
//// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
//
//using System; using System;
//using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.NRefactory.TypeSystem;
// using ICSharpCode.SharpDevelop.Dom;
//namespace ICSharpCode.PackageManagement.EnvDTE
//{ namespace ICSharpCode.PackageManagement.EnvDTE
// public class CodeParameter : CodeElement, global::EnvDTE.CodeParameter {
// { public class CodeParameter : CodeElement, global::EnvDTE.CodeParameter
// IProjectContent projectContent; {
// protected readonly IParameter parameter;
// public CodeParameter(IProjectContent projectContent, IParameter parameter)
// { public CodeParameter(CodeModelContext context, IParameter parameter)
// this.projectContent = projectContent; : base(context)
// this.Parameter = parameter; {
// } this.parameter = parameter;
// }
// protected IParameter Parameter { get; private set; }
// public override global::EnvDTE.vsCMElement Kind {
// public override global::EnvDTE.vsCMElement Kind { get { return global::EnvDTE.vsCMElement.vsCMElementParameter; }
// get { return global::EnvDTE.vsCMElement.vsCMElementParameter; } }
// }
// public override string Name {
// public override string Name { get { return parameter.Name; }
// get { return Parameter.Name; } }
// }
// public virtual global::EnvDTE.CodeTypeRef2 Type {
// public virtual global::EnvDTE.CodeTypeRef2 Type { get { return new CodeTypeRef2(context, this, parameter.Type); }
// get { return new CodeTypeRef2(projectContent, this, Parameter.ReturnType); } }
// }
// public virtual global::EnvDTE.CodeElements Attributes {
// public virtual global::EnvDTE.CodeElements Attributes { get {
// get { return new CodeAttributes(Parameter); } var list = new CodeElementsList<CodeAttribute2>();
// } foreach (var attr in parameter.Attributes) {
// } list.Add(new CodeAttribute2(context, attr));
//} }
return list;
}
}
}
}

78
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter2.cs

@ -1,36 +1,42 @@
//// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
//// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
//
//using System; using System;
//using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.NRefactory.TypeSystem;
// using ICSharpCode.SharpDevelop.Dom;
//namespace ICSharpCode.PackageManagement.EnvDTE
//{ namespace ICSharpCode.PackageManagement.EnvDTE
// public class CodeParameter2 : CodeParameter, global::EnvDTE.CodeParameter2 {
// { public class CodeParameter2 : CodeParameter, global::EnvDTE.CodeParameter2
// public CodeParameter2(IProjectContent projectContent, IParameter parameter) {
// : base(projectContent, parameter) public CodeParameter2(CodeModelContext context, IParameter parameter)
// { : base(context, parameter)
// } {
// }
// public virtual global::EnvDTE.vsCMParameterKind ParameterKind {
// get { return GetParameterKind(); } public virtual global::EnvDTE.vsCMParameterKind ParameterKind {
// } get { return GetParameterKind(); }
// }
// global::EnvDTE.vsCMParameterKind GetParameterKind()
// { global::EnvDTE.vsCMParameterKind GetParameterKind()
// if (Parameter.IsOptional) { {
// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindOptional; global::EnvDTE.vsCMParameterKind kind = 0;
// } else if (Parameter.IsOut) { if (parameter.IsOptional) {
// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindOut; kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindOptional;
// } else if (Parameter.IsRef) { }
// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindRef; if (parameter.IsOut) {
// } else if (Parameter.IsParams) { kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindOut;
// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindParamArray; }
// } else if (Parameter.IsIn()) { if (parameter.IsRef) {
// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindIn; kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindRef;
// } }
// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindNone; if (parameter.IsParams) {
// } kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindParamArray;
// } }
//} if (!(parameter.IsOut || parameter.IsRef)) {
kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindIn;
}
return kind;
}
}
}

32
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameters.cs

@ -1,32 +0,0 @@
//// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
//// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
//
//using System;
//using System.Collections.Generic;
//using ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeParameters : CodeElementsList
// {
// IProjectContent projectContent;
//
// public CodeParameters(IProjectContent projectContent, IEnumerable<IParameter> parameters)
// {
// this.projectContent = projectContent;
// AddParameters(parameters);
// }
//
// void AddParameters(IEnumerable<IParameter> parameters)
// {
// foreach (IParameter parameter in parameters) {
// AddParameters(parameter);
// }
// }
//
// void AddParameters(IParameter parameter)
// {
// AddCodeElement(new CodeParameter2(projectContent, parameter));
// }
// }
//}

22
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs

@ -24,7 +24,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
if (typeDef != null) { if (typeDef != null) {
var typeModel = typeDef.GetModel(); var typeModel = typeDef.GetModel();
if (typeModel != null) if (typeModel != null)
return Create(context, typeModel); return Create(context.WithFilteredFileName(null), typeModel);
} }
return null; return null;
} }
@ -66,7 +66,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public virtual global::EnvDTE.vsCMAccess Access { public virtual global::EnvDTE.vsCMAccess Access {
get { return typeModel.Accessibility.ToAccess(); } get { return typeModel.Accessibility.ToAccess(); }
set { typeModel.Accessibility = value.ToAccessibility(); } set {
var td = typeModel.Resolve();
if (td != null) {
context.CodeGenerator.ChangeAccessibility(td, value.ToAccessibility());
}
}
} }
public virtual string FullName { public virtual string FullName {
@ -89,7 +94,10 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public virtual global::EnvDTE.CodeElements Members { public virtual global::EnvDTE.CodeElements Members {
get { get {
if (members == null) { if (members == null) {
members = typeModel.Members.Select(m => CreateMember(context, m)).AsCodeElements(); members = typeModel.Members
.Where(m => IsInFilter(m.Region))
.Select(m => CreateMember(context, m))
.AsCodeElements();
} }
return members; return members;
} }
@ -121,7 +129,8 @@ namespace ICSharpCode.PackageManagement.EnvDTE
var td = typeModel.Resolve(); var td = typeModel.Resolve();
if (td != null) { if (td != null) {
foreach (var attr in td.Attributes) { foreach (var attr in td.Attributes) {
list.Add(new CodeAttribute2(attr)); if (IsInFilter(attr.Region))
list.Add(new CodeAttribute2(context, attr));
} }
} }
return list; return list;
@ -131,7 +140,10 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public virtual global::EnvDTE.CodeNamespace Namespace { public virtual global::EnvDTE.CodeNamespace Namespace {
get { get {
throw new NotImplementedException(); throw new NotImplementedException();
// return new FileCodeModelCodeNamespace(currentProject, typeModel.Namespace); // if (context.FilteredFileName != null)
// ...
// else
// return new CodeNamespace(context, typeModel.Namespace);
} }
} }

169
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef.cs

@ -1,52 +1,117 @@
//// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
//// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
//
//using System; using System;
//using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.NRefactory.CSharp;
// using ICSharpCode.NRefactory.TypeSystem;
//namespace ICSharpCode.PackageManagement.EnvDTE using ICSharpCode.SharpDevelop;
//{ using ICSharpCode.SharpDevelop.Dom;
// public class CodeTypeRef : MarshalByRefObject, global::EnvDTE.CodeTypeRef
// { namespace ICSharpCode.PackageManagement.EnvDTE
// IProjectContent projectContent; {
// CodeElement parent; public class CodeTypeRef : MarshalByRefObject, global::EnvDTE.CodeTypeRef
// {
// public CodeTypeRef() protected readonly CodeModelContext context;
// { protected readonly CodeElement parent;
// } protected readonly IType type;
//
// public CodeTypeRef(IProjectContent projectContent, CodeElement parent, IReturnType returnType) public CodeTypeRef()
// { {
// this.parent = parent; }
// this.projectContent = projectContent;
// this.ReturnType = returnType; public CodeTypeRef(CodeModelContext context, CodeElement parent, IType type)
// } {
// this.context = context;
// protected IReturnType ReturnType { get; private set; } this.parent = parent;
// this.type = type;
// public virtual string AsFullName { }
// get { return ReturnType.GetFullName(); }
// } public virtual string AsFullName {
// get { return type.ReflectionName; }
// public virtual string AsString { }
// get {
// if (projectContent.Language == LanguageProperties.VBNet) { public virtual string AsString {
// return ReturnType.AsVisualBasicString(); get {
// } return new CSharpAmbience().ConvertType(type);
// return ReturnType.AsCSharpString(); }
// } }
// }
// public virtual global::EnvDTE.CodeElement Parent {
// public virtual global::EnvDTE.CodeElement Parent { get { return parent; }
// get { return parent; } }
// }
// public virtual global::EnvDTE.CodeType CodeType {
// public virtual global::EnvDTE.CodeType CodeType { get {
// get { return new CodeClass2(projectContent, ReturnType.GetUnderlyingClass()); } return EnvDTE.CodeType.Create(context, type);
// } }
// }
// public virtual global::EnvDTE.vsCMTypeRef TypeKind {
// get { return ReturnType.GetTypeKind(); } public virtual global::EnvDTE.vsCMTypeRef TypeKind {
// } get {
// } switch (type.Kind) {
//} case NRefactory.TypeSystem.TypeKind.Class:
if (type.IsKnownType(KnownTypeCode.String))
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefString;
else
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefObject;
case NRefactory.TypeSystem.TypeKind.Struct:
var typeDef = type.GetDefinition();
if (typeDef != null)
return GetStructTypeKind(typeDef.KnownTypeCode);
else
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefOther;
case NRefactory.TypeSystem.TypeKind.Delegate:
case NRefactory.TypeSystem.TypeKind.Interface:
case NRefactory.TypeSystem.TypeKind.Module:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefObject;
case NRefactory.TypeSystem.TypeKind.Void:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefVoid;
case NRefactory.TypeSystem.TypeKind.Array:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefArray;
case NRefactory.TypeSystem.TypeKind.Pointer:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefPointer;
default:
if (type.IsReferenceType == true)
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefObject;
else
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefOther;
}
}
}
global::EnvDTE.vsCMTypeRef GetStructTypeKind(KnownTypeCode knownTypeCode)
{
switch (knownTypeCode) {
case KnownTypeCode.Boolean:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefBool;
case KnownTypeCode.Char:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefChar;
case KnownTypeCode.SByte:
case KnownTypeCode.Byte:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefByte;
case KnownTypeCode.Int16:
case KnownTypeCode.UInt16:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefShort;
case KnownTypeCode.Int32:
case KnownTypeCode.UInt32:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefInt;
case KnownTypeCode.Int64:
case KnownTypeCode.UInt64:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefLong;
case KnownTypeCode.Single:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefFloat;
case KnownTypeCode.Double:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefDouble;
case KnownTypeCode.Decimal:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefDecimal;
case KnownTypeCode.Void:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefVoid;
case KnownTypeCode.IntPtr:
case KnownTypeCode.UIntPtr:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefPointer;
default:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefOther;
}
}
}
}

41
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef2.cs

@ -1,20 +1,21 @@
//// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
//// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
//
//using System; using System;
//using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.NRefactory.TypeSystem;
// using ICSharpCode.SharpDevelop.Dom;
//namespace ICSharpCode.PackageManagement.EnvDTE
//{ namespace ICSharpCode.PackageManagement.EnvDTE
// public class CodeTypeRef2 : CodeTypeRef, global::EnvDTE.CodeTypeRef2 {
// { public class CodeTypeRef2 : CodeTypeRef, global::EnvDTE.CodeTypeRef2
// public CodeTypeRef2(IProjectContent projectContent, CodeElement parent, IReturnType returnType) {
// : base(projectContent, parent, returnType) public CodeTypeRef2(CodeModelContext context, CodeElement parent, IType type)
// { : base(context, parent, type)
// } {
// }
// public bool IsGeneric {
// get { return ReturnType.DotNetName.Contains("{"); } public bool IsGeneric {
// } get { return type.IsParameterized; }
// } }
//} }
}

7
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs

@ -26,7 +26,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public global::EnvDTE.vsCMAccess Access { public global::EnvDTE.vsCMAccess Access {
get { return field.Accessibility.ToAccess(); } get { return field.Accessibility.ToAccess(); }
set { field.Accessibility = value.ToAccessibility(); } set {
var f = field.Resolve();
if (f != null) {
context.CodeGenerator.ChangeAccessibility(f, value.ToAccessibility());
}
}
} }
public override global::EnvDTE.TextPoint GetStartPoint() public override global::EnvDTE.TextPoint GetStartPoint()

43
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/NamespaceName.cs

@ -1,43 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class NamespaceName
{
public NamespaceName(string parentNamespace, string name)
: this(GetQualifiedNamespaceName(parentNamespace, name))
{
}
static string GetQualifiedNamespaceName(string parentNamespace, string name)
{
if (String.IsNullOrEmpty(parentNamespace)) {
return name;
}
return String.Format("{0}.{1}", parentNamespace, name);
}
public NamespaceName(string qualifiedName)
{
this.QualifiedName = qualifiedName;
LastPart = GetLastPartOfNamespace();
}
string GetLastPartOfNamespace()
{
int index = QualifiedName.LastIndexOf('.');
return QualifiedName.Substring(index + 1);
}
public string LastPart { get; private set; }
public string QualifiedName { get; private set; }
public NamespaceName CreateChildNamespaceName(string name)
{
return new NamespaceName(QualifiedName, name);
}
}
}

16
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/PartialClasses.cs

@ -1,16 +0,0 @@
//// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
//// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
//
//using System;
//using ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class PartialClasses : CodeElementsList
// {
// public PartialClasses(CodeClass2 codeClass)
// {
// AddCodeElement(codeClass);
// }
// }
//}

1
src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/vsCMParameterKind.vb

@ -2,6 +2,7 @@
' This code is distributed under the GNU LGPL (for details please see \doc\license.txt) ' This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
Namespace EnvDTE Namespace EnvDTE
<Flags>
Public Enum vsCMParameterKind Public Enum vsCMParameterKind
vsCMParameterKindNone = 0 vsCMParameterKindNone = 0
vsCMParameterKindIn = 1 vsCMParameterKindIn = 1

1
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -105,7 +105,6 @@
<Compile Include="Src\EnvDTE\EditPointTests.cs" /> <Compile Include="Src\EnvDTE\EditPointTests.cs" />
<Compile Include="Src\EnvDTE\FileCodeModel2Tests.cs" /> <Compile Include="Src\EnvDTE\FileCodeModel2Tests.cs" />
<Compile Include="Src\EnvDTE\FileProjectItemsTests.cs" /> <Compile Include="Src\EnvDTE\FileProjectItemsTests.cs" />
<Compile Include="Src\EnvDTE\NamespaceNameTests.cs" />
<Compile Include="Src\EnvDTE\ProjectsTests.cs" /> <Compile Include="Src\EnvDTE\ProjectsTests.cs" />
<Compile Include="Src\EnvDTE\SolutionBuildTests.cs" /> <Compile Include="Src\EnvDTE\SolutionBuildTests.cs" />
<Compile Include="Src\EnvDTE\SolutionGlobalsTests.cs" /> <Compile Include="Src\EnvDTE\SolutionGlobalsTests.cs" />

40
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/NamespaceNameTests.cs

@ -1,40 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.PackageManagement.EnvDTE;
using NUnit.Framework;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class NamespaceNameTests
{
NamespaceName namespaceName;
void CreateNamespaceName(string parent, string name)
{
namespaceName = new NamespaceName(parent, name);
}
[Test]
public void QualifiedName_ParentNamespaceIsTest_ReturnsTestPrefix()
{
CreateNamespaceName("Test", "Child");
string name = namespaceName.QualifiedName;
Assert.AreEqual("Test.Child", name);
}
[Test]
public void QualifiedName_ParentNamespaceIsEmptyString_ReturnsJustChildNamespaceName()
{
CreateNamespaceName(String.Empty, "Child");
string name = namespaceName.QualifiedName;
Assert.AreEqual("Child", name);
}
}
}

2
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ImplementInterfaceAction.cs

@ -91,7 +91,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
static EntityDeclaration GenerateMemberImplementation(RefactoringContext context, IMember member, bool explicitImplementation) static EntityDeclaration GenerateMemberImplementation(RefactoringContext context, IMember member, bool explicitImplementation)
{ {
var builder = context.CreateTypeSytemAstBuilder(); var builder = context.CreateTypeSystemAstBuilder();
builder.GenerateBody = true; builder.GenerateBody = true;
builder.ShowModifiers = false; builder.ShowModifiers = false;
builder.ShowAccessibility = true; builder.ShowAccessibility = true;

6
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CompilerErrors/CS0029InvalidConversionIssue.cs

@ -1,10 +1,10 @@
// //
// ExpressionOfCompatibleTypeCastIssue.cs // CS0029InvalidConversionIssue.cs
// //
// Author: // Author:
// Ciprian Khlud <ciprian.mustiata@yahoo.com> // Daniel Grunwald <daniel.grunwald@gmail.com>
// //
// Copyright (c) 2013 Ciprian Khlud <ciprian.mustiata@yahoo.com> // Copyright (c) 2013 Daniel Grunwald <daniel.grunwald@gmail.com>
// //
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal // of this software and associated documentation files (the "Software"), to deal

6
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/RefactoringContext.cs

@ -45,7 +45,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
public abstract TextLocation Location { get; } public abstract TextLocation Location { get; }
public TypeSystemAstBuilder CreateTypeSytemAstBuilder() public TypeSystemAstBuilder CreateTypeSystemAstBuilder()
{ {
var csResolver = Resolver.GetResolverStateBefore(GetNode()); var csResolver = Resolver.GetResolverStateBefore(GetNode());
return new TypeSystemAstBuilder(csResolver); return new TypeSystemAstBuilder(csResolver);
@ -53,13 +53,13 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
public virtual AstType CreateShortType (IType fullType) public virtual AstType CreateShortType (IType fullType)
{ {
var builder = CreateTypeSytemAstBuilder(); var builder = CreateTypeSystemAstBuilder();
return builder.ConvertType(fullType); return builder.ConvertType(fullType);
} }
public virtual AstType CreateShortType(string ns, string name, int typeParameterCount = 0) public virtual AstType CreateShortType(string ns, string name, int typeParameterCount = 0)
{ {
var builder = CreateTypeSytemAstBuilder(); var builder = CreateTypeSystemAstBuilder();
return builder.ConvertType(new TopLevelTypeName(ns, name, typeParameterCount)); return builder.ConvertType(new TopLevelTypeName(ns, name, typeParameterCount));
} }

2
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs

@ -841,7 +841,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
#endregion #endregion
#region Convert Modifiers #region Convert Modifiers
static Modifiers ModifierFromAccessibility(Accessibility accessibility) public static Modifiers ModifierFromAccessibility(Accessibility accessibility)
{ {
switch (accessibility) { switch (accessibility) {
case Accessibility.Private: case Accessibility.Private:

20
src/Main/Base/Project/Dom/IEntityModel.cs

@ -17,7 +17,25 @@ namespace ICSharpCode.SharpDevelop.Dom
/// <summary> /// <summary>
/// Gets/sets the accessibility of the entity. /// Gets/sets the accessibility of the entity.
/// </summary> /// </summary>
Accessibility Accessibility { get; set; } Accessibility Accessibility { get; }
/// <summary>
/// Gets whether this entity is static.
/// Returns true if either the 'static' or the 'const' modifier is set.
/// </summary>
bool IsStatic { get; }
/// <summary>
/// Returns whether this entity is abstract.
/// </summary>
/// <remarks>Static classes also count as abstract classes.</remarks>
bool IsAbstract { get; }
/// <summary>
/// Returns whether this entity is sealed.
/// </summary>
/// <remarks>Static classes also count as sealed classes.</remarks>
bool IsSealed { get; }
/// <summary> /// <summary>
/// Resolves the entity in the current solution snapshot. /// Resolves the entity in the current solution snapshot.

1
src/Main/Base/Project/Dom/IEntityModelContext.cs

@ -5,6 +5,7 @@ using System;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Parser; using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Refactoring;
namespace ICSharpCode.SharpDevelop.Dom namespace ICSharpCode.SharpDevelop.Dom
{ {

2
src/Main/Base/Project/Dom/ITypeDefinitionModel.cs

@ -41,6 +41,6 @@ namespace ICSharpCode.SharpDevelop.Dom
/// </summary> /// </summary>
void Update(IUnresolvedTypeDefinition oldPart, IUnresolvedTypeDefinition newPart); void Update(IUnresolvedTypeDefinition oldPart, IUnresolvedTypeDefinition newPart);
IFieldModel AddField(Accessibility accessiblity, IType type, string name); bool IsPartial { get; }
} }
} }

2
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -172,7 +172,7 @@
<Compile Include="Project\Project_TypeGuids.cs" /> <Compile Include="Project\Project_TypeGuids.cs" />
<Compile Include="Project\SolutionEventArgs.cs" /> <Compile Include="Project\SolutionEventArgs.cs" />
<Compile Include="Project\SolutionSection.cs" /> <Compile Include="Project\SolutionSection.cs" />
<Compile Include="Refactoring\ICodeGenerator.cs" /> <Compile Include="Refactoring\CodeGenerator.cs" />
<Compile Include="Services\IClipboard.cs" /> <Compile Include="Services\IClipboard.cs" />
<Compile Include="Services\IFileSystem.cs" /> <Compile Include="Services\IFileSystem.cs" />
<Compile Include="Services\IMessageLoop.cs" /> <Compile Include="Services\IMessageLoop.cs" />

34
src/Main/Base/Project/Refactoring/ICodeGenerator.cs → src/Main/Base/Project/Refactoring/CodeGenerator.cs

@ -8,24 +8,9 @@ using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Refactoring namespace ICSharpCode.SharpDevelop.Refactoring
{ {
/// <summary> public class CodeGenerator
/// Description of ICodeGenerator.
/// </summary>
public interface ICodeGenerator
{ {
void AddAttribute(IEntity target, IAttribute attribute); public static readonly CodeGenerator DummyCodeGenerator = new CodeGenerator();
void AddAssemblyAttribute(IProject targetProject, IAttribute attribute);
void AddReturnTypeAttribute(IMethod target, IAttribute attribute);
void InsertEventHandler(ITypeDefinition target, string name, IEvent eventDefinition, bool jumpTo);
string GetPropertyName(string fieldName);
string GetParameterName(string fieldName);
string GetFieldName(string propertyName);
}
public class DefaultCodeGenerator : ICodeGenerator
{
public static readonly DefaultCodeGenerator DefaultInstance = new DefaultCodeGenerator();
public virtual void AddAttribute(IEntity target, IAttribute attribute) public virtual void AddAttribute(IEntity target, IAttribute attribute)
{ {
@ -81,5 +66,20 @@ namespace ICSharpCode.SharpDevelop.Refactoring
else else
return newName; return newName;
} }
public virtual void AddField(ITypeDefinition declaringType, Accessibility accessibility, IType fieldType, string name)
{
throw new NotSupportedException("Feature not supported!");
}
public virtual void ChangeAccessibility(IEntity entity, Accessibility newAccessiblity)
{
throw new NotSupportedException("Feature not supported!");
}
public virtual void MakePartial(ITypeDefinition td)
{
throw new NotSupportedException("Feature not supported!");
}
} }
} }

6
src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs

@ -20,7 +20,7 @@ namespace ICSharpCode.SharpDevelop
this.container = new ServiceContainer(); this.container = new ServiceContainer();
this.container.AddService(typeof(IFormattingStrategy), DefaultFormattingStrategy.DefaultInstance); this.container.AddService(typeof(IFormattingStrategy), DefaultFormattingStrategy.DefaultInstance);
this.container.AddService(typeof(IBracketSearcher), DefaultBracketSearcher.DefaultInstance); this.container.AddService(typeof(IBracketSearcher), DefaultBracketSearcher.DefaultInstance);
this.container.AddService(typeof(ICodeGenerator), DefaultCodeGenerator.DefaultInstance); this.container.AddService(typeof(CodeGenerator), CodeGenerator.DummyCodeGenerator);
} else { } else {
this.container = new ServiceContainer(DefaultInstance); this.container = new ServiceContainer(DefaultInstance);
} }
@ -43,9 +43,9 @@ namespace ICSharpCode.SharpDevelop
} }
} }
public ICodeGenerator CodeGenerator { public CodeGenerator CodeGenerator {
get { get {
return this.GetService<ICodeGenerator>(); return this.GetService<CodeGenerator>();
} }
} }

2
src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs

@ -29,7 +29,7 @@ namespace ICSharpCode.SharpDevelop
/// <summary> /// <summary>
/// Provides access to the code generator for this language. /// Provides access to the code generator for this language.
/// </summary> /// </summary>
ICodeGenerator CodeGenerator { CodeGenerator CodeGenerator {
get; get;
} }

12
src/Main/SharpDevelop/Dom/MemberModel.cs

@ -94,5 +94,17 @@ namespace ICSharpCode.SharpDevelop.Dom
return Resolve(solutionSnapshot); return Resolve(solutionSnapshot);
} }
#endregion #endregion
public bool IsStatic {
get { return member.IsStatic; }
}
public bool IsAbstract {
get { return member.IsAbstract; }
}
public bool IsSealed {
get { return member.IsSealed; }
}
} }
} }

24
src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs

@ -51,16 +51,13 @@ namespace ICSharpCode.SharpDevelop.Dom
} }
public Accessibility Accessibility { public Accessibility Accessibility {
get { get {
var td = Resolve(); var td = Resolve();
if (td != null) if (td != null)
return td.Accessibility; return td.Accessibility;
else else
return Accessibility.None; return Accessibility.None;
} }
set {
throw new NotImplementedException();
}
} }
public FullTypeName FullTypeName { public FullTypeName FullTypeName {
@ -316,9 +313,22 @@ namespace ICSharpCode.SharpDevelop.Dom
} }
#endregion #endregion
public IFieldModel AddField(Accessibility accessiblity, IType type, string name) public bool IsPartial {
{ get {
throw new NotImplementedException(); return parts.Count > 1; // TODO: check for partial modifier on single part
}
}
public bool IsAbstract {
get { return parts.Any(p => p.IsAbstract); }
}
public bool IsStatic {
get { return parts.Any(p => p.IsStatic); }
}
public bool IsSealed {
get { return parts.Any(p => p.IsSealed); }
} }
} }
} }

Loading…
Cancel
Save