diff --git a/src/AddIns/Analysis/CodeAnalysis/Src/SuppressMessageCommand.cs b/src/AddIns/Analysis/CodeAnalysis/Src/SuppressMessageCommand.cs
index 96702f3e99..d141fbf8dd 100644
--- a/src/AddIns/Analysis/CodeAnalysis/Src/SuppressMessageCommand.cs
+++ b/src/AddIns/Analysis/CodeAnalysis/Src/SuppressMessageCommand.cs
@@ -29,7 +29,7 @@ namespace ICSharpCode.CodeAnalysis
FxCopTaskTag tag = t.Tag as FxCopTaskTag;
if (tag == null)
continue;
- ICodeGenerator gen = tag.Project.LanguageBinding.CodeGenerator;
+ CodeGenerator gen = tag.Project.LanguageBinding.CodeGenerator;
ICompilation compilation;
if (t.FileName != null)
compilation = SD.ParserService.GetCompilationForFile(t.FileName);
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs
index 0260b26239..cf7c1e55ad 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs
+++ b/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(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());
}
}
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpFullParseInformation.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpFullParseInformation.cs
index 0cb0b92e44..0c407953d2 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpFullParseInformation.cs
+++ b/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)
// 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.
var resolver = compilation.CacheManager.GetShared(ResolverCacheKey) as CSharpAstResolver;
if (resolver == null || resolver.RootNode != syntaxTree || resolver.UnresolvedFile != UnresolvedFile) {
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs
index 6033153071..a60ef9e2ba 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs
@@ -7,6 +7,7 @@ using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Media.Animation;
+using CSharpBinding.Parser;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.Core;
using ICSharpCode.Core.Presentation;
@@ -28,7 +29,7 @@ namespace CSharpBinding.Refactoring
///
/// Description of CSharpCodeGenerator.
///
- public class CSharpCodeGenerator : DefaultCodeGenerator
+ public class CSharpCodeGenerator : CodeGenerator
{
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 editor = view.GetRequiredService();
var context = SDRefactoringContext.Create(editor.FileName, editor.Document, region.Begin, CancellationToken.None);
- var node = context.RootNode.GetNodeAt(region.Begin);
- if (node is ICSharpCode.NRefactory.CSharp.Attribute) node = node.Parent;
+ var node = context.RootNode.GetNodeAt(region.Begin);
var resolver = context.GetResolverStateBefore(node);
var builder = new TypeSystemAstBuilder(resolver);
@@ -114,5 +114,20 @@ namespace CSharpBinding.Refactoring
script.InsertBefore(node, attr);
}
}
+
+ public override void AddField(ITypeDefinition declaringType, Accessibility accessibility, IType fieldType, string name)
+ {
+ SDRefactoringContext context = declaringType.CreateRefactoringContext();
+ var typeDecl = context.GetNode();
+ 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);
+ }
}
}
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/OverrideToStringMethodDialog.xaml.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/OverrideToStringMethodDialog.xaml.cs
index 67f336cc6c..b9c67dd9c6 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/OverrideToStringMethodDialog.xaml.cs
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/OverrideToStringMethodDialog.xaml.cs
@@ -66,7 +66,7 @@ namespace CSharpBinding.Refactoring
return null;
}
- string GenerateFormatString(ITypeDefinition currentClass, ICodeGenerator generator, string[] fields)
+ string GenerateFormatString(ITypeDefinition currentClass, CodeGenerator generator, string[] fields)
{
string fieldsString = "";
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/RefactoringExtensions.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/RefactoringExtensions.cs
index 9b4462a1ea..a9b152c8be 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/RefactoringExtensions.cs
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/RefactoringExtensions.cs
@@ -3,11 +3,14 @@
using System;
using System.Linq;
+using CSharpBinding.Parser;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.CSharp;
+using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
-using CSharpBinding.Parser;
+using ICSharpCode.SharpDevelop.Dom;
+using ICSharpCode.SharpDevelop.Editor;
namespace CSharpBinding.Refactoring
{
@@ -59,5 +62,44 @@ namespace CSharpBinding.Refactoring
return null;
return parseInfo.SyntaxTree.GetNodeAt(entity.Region.Begin);
}
+
+
+ ///
+ /// Returns a refactoring context for the file that contains the entity.
+ /// This will open the file in the text editor if necessary.
+ ///
+ 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();
+ 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);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
index 6d8fad1207..2186e43a7a 100644
--- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
+++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
@@ -105,7 +105,6 @@
-
@@ -130,8 +129,6 @@
-
-
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute.cs
index a3a6a622eb..d6832f081c 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute.cs
+++ b/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;
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute2.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute2.cs
index f7a3583611..5f657ff6e4 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute2.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute2.cs
@@ -13,8 +13,8 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
}
- public CodeAttribute2(IAttribute attribute)
- : base(attribute)
+ public CodeAttribute2(CodeModelContext context, IAttribute attribute)
+ : base(context, attribute)
{
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass.cs
index 4c4d951026..e8b401224b 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass.cs
@@ -46,11 +46,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE
if (td == null)
return null;
IType fieldType = td.Compilation.FindType(fieldTypeName);
- IFieldModel field = typeModel.AddField(Access.ToAccessibility(), fieldType, name);
- if (field != null)
- return new CodeVariable(context, field);
- else
- return null;
+ context.CodeGenerator.AddField(td, Access.ToAccessibility(), fieldType, name);
+ var fieldModel = typeModel.Members.OfType().FirstOrDefault(f => f.Name == name);
+ if (fieldModel != null) {
+ return new CodeVariable(context, fieldModel);
+ }
+ return null;
}
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass2.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass2.cs
index 915eab7dc5..003be6f526 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass2.cs
+++ b/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)
-//// 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 CodeClass2 : CodeClass, global::EnvDTE.CodeClass2
-// {
-// IClassKindUpdater classKindUpdater;
-//
-// public CodeClass2(IProjectContent projectContent, IClass c, IClassKindUpdater classKindUpdater)
-// : base(projectContent, c)
-// {
-// this.classKindUpdater = classKindUpdater;
-// }
-//
-// public CodeClass2(IProjectContent projectContent, IClass c)
-// : this(projectContent, c, new ClassKindUpdater(c))
-// {
-// }
-//
-// public global::EnvDTE.CodeElements PartialClasses {
-// get { return new PartialClasses(this); }
-// }
-//
-// public static CodeClass2 CreateFromBaseType(IProjectContent projectContent, IReturnType baseType)
-// {
-// IClass baseTypeClass = baseType.GetUnderlyingClass();
-// return new CodeClass2(projectContent, baseTypeClass);
-// }
-//
-// public bool IsGeneric {
-// get { return Class.DotNetName.Contains("`"); }
-// }
-//
-// public global::EnvDTE.vsCMClassKind ClassKind {
-// get {
-// if (Class.IsPartial) {
-// return global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass;
-// }
-// return global::EnvDTE.vsCMClassKind.vsCMClassKindMainClass;
-// }
-// set {
-// if (value == global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass) {
-// classKindUpdater.MakeClassPartial();
-// } else {
-// throw new NotImplementedException();
-// }
-// }
-// }
-//
-// public bool IsAbstract {
-// get { return Class.IsAbstract; }
-// }
-// }
-//}
+// 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.Linq;
+using ICSharpCode.SharpDevelop.Dom;
+
+namespace ICSharpCode.PackageManagement.EnvDTE
+{
+ public class CodeClass2 : CodeClass, global::EnvDTE.CodeClass2
+ {
+ public CodeClass2(CodeModelContext context, ITypeDefinitionModel typeModel)
+ : base(context, typeModel)
+ {
+ }
+
+ public global::EnvDTE.CodeElements PartialClasses {
+ get {
+ var list = new CodeElementsList();
+ var td = typeModel.Resolve();
+ if (td != null) {
+ foreach (var fileName in td.Parts.Select(p => p.UnresolvedFile.FileName).Distinct()) {
+ var newContext = context.WithFilteredFileName(fileName);
+ list.Add(CodeType.Create(newContext, typeModel));
+ }
+ } else {
+ list.Add(this);
+ }
+ return list;
+ }
+ }
+
+ public bool IsGeneric {
+ get { return typeModel.FullTypeName.TypeParameterCount > 0; }
+ }
+
+ public global::EnvDTE.vsCMClassKind ClassKind {
+ get {
+ if (typeModel.IsPartial) {
+ return global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass;
+ }
+ return global::EnvDTE.vsCMClassKind.vsCMClassKindMainClass;
+ }
+ set {
+ if (value == this.ClassKind)
+ return;
+ if (value == global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass) {
+ var td = typeModel.Resolve();
+ if (td == null)
+ throw new NotSupportedException();
+ context.CodeGenerator.MakePartial(td);
+ } else {
+ throw new NotSupportedException();
+ }
+ }
+ }
+
+ public bool IsAbstract {
+ get { return typeModel.IsAbstract; }
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeDelegate.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeDelegate.cs
index 2ccbf724fb..9a797d3b28 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeDelegate.cs
+++ b/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)
-//// 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 CodeDelegate : CodeType, global::EnvDTE.CodeDelegate
-// {
-// public CodeDelegate(IProjectContent projectContent, IClass c)
-// : base(projectContent, c)
-// {
-// }
-//
-// public CodeDelegate()
-// {
-// }
-//
-// public override global::EnvDTE.vsCMElement Kind {
-// get { return global::EnvDTE.vsCMElement.vsCMElementDelegate; }
-// }
-// }
-//}
+// 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 CodeDelegate : CodeType, global::EnvDTE.CodeDelegate
+ {
+ public CodeDelegate(CodeModelContext context, ITypeDefinitionModel typeModel)
+ : base(context, typeModel)
+ {
+ }
+
+ public CodeDelegate()
+ {
+ }
+
+ public override global::EnvDTE.vsCMElement Kind {
+ get { return global::EnvDTE.vsCMElement.vsCMElementDelegate; }
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs
index efa0281f6d..8ce016d763 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs
+++ b/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)
{
this.context = context;
@@ -88,6 +93,13 @@ namespace ICSharpCode.PackageManagement.EnvDTE
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)
{
return false;
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelContext.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelContext.cs
index d1851d6ef6..6a23cc9a11 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelContext.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelContext.cs
@@ -3,6 +3,7 @@
using System;
using ICSharpCode.SharpDevelop.Project;
+using ICSharpCode.SharpDevelop.Refactoring;
namespace ICSharpCode.PackageManagement.EnvDTE
{
@@ -10,5 +11,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
public IProject CurrentProject { get; set; }
public IDocumentLoader DocumentLoader { get; set; }
+ public CodeGenerator CodeGenerator { get; set; }
+
+ ///
+ /// Specifies the file name if this code model context refers to
+ ///
+ public string FilteredFileName { get; set; }
+
+ public CodeModelContext WithFilteredFileName(string fileName)
+ {
+ CodeModelContext newContext = (CodeModelContext)MemberwiseClone();
+ newContext.FilteredFileName = fileName;
+ return newContext;
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter.cs
index 32b631728a..a15f69f134 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter.cs
+++ b/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)
-//// 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 CodeParameter : CodeElement, global::EnvDTE.CodeParameter
-// {
-// IProjectContent projectContent;
-//
-// public CodeParameter(IProjectContent projectContent, IParameter parameter)
-// {
-// this.projectContent = projectContent;
-// this.Parameter = parameter;
-// }
-//
-// protected IParameter Parameter { get; private set; }
-//
-// public override global::EnvDTE.vsCMElement Kind {
-// get { return global::EnvDTE.vsCMElement.vsCMElementParameter; }
-// }
-//
-// public override string Name {
-// get { return Parameter.Name; }
-// }
-//
-// public virtual global::EnvDTE.CodeTypeRef2 Type {
-// get { return new CodeTypeRef2(projectContent, this, Parameter.ReturnType); }
-// }
-//
-// public virtual global::EnvDTE.CodeElements Attributes {
-// get { return new CodeAttributes(Parameter); }
-// }
-// }
-//}
+// 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.NRefactory.TypeSystem;
+using ICSharpCode.SharpDevelop.Dom;
+
+namespace ICSharpCode.PackageManagement.EnvDTE
+{
+ public class CodeParameter : CodeElement, global::EnvDTE.CodeParameter
+ {
+ protected readonly IParameter parameter;
+
+ public CodeParameter(CodeModelContext context, IParameter parameter)
+ : base(context)
+ {
+ this.parameter = parameter;
+ }
+
+ public override global::EnvDTE.vsCMElement Kind {
+ get { return global::EnvDTE.vsCMElement.vsCMElementParameter; }
+ }
+
+ public override string Name {
+ get { return parameter.Name; }
+ }
+
+ public virtual global::EnvDTE.CodeTypeRef2 Type {
+ get { return new CodeTypeRef2(context, this, parameter.Type); }
+ }
+
+ public virtual global::EnvDTE.CodeElements Attributes {
+ get {
+ var list = new CodeElementsList();
+ foreach (var attr in parameter.Attributes) {
+ list.Add(new CodeAttribute2(context, attr));
+ }
+ return list;
+ }
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter2.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter2.cs
index 5f86eb04eb..c901abb9af 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter2.cs
+++ b/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)
-//// 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 CodeParameter2 : CodeParameter, global::EnvDTE.CodeParameter2
-// {
-// public CodeParameter2(IProjectContent projectContent, IParameter parameter)
-// : base(projectContent, parameter)
-// {
-// }
-//
-// public virtual global::EnvDTE.vsCMParameterKind ParameterKind {
-// get { return GetParameterKind(); }
-// }
-//
-// global::EnvDTE.vsCMParameterKind GetParameterKind()
-// {
-// if (Parameter.IsOptional) {
-// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindOptional;
-// } else if (Parameter.IsOut) {
-// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindOut;
-// } else if (Parameter.IsRef) {
-// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindRef;
-// } else if (Parameter.IsParams) {
-// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindParamArray;
-// } else if (Parameter.IsIn()) {
-// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindIn;
-// }
-// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindNone;
-// }
-// }
-//}
+// 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.NRefactory.TypeSystem;
+using ICSharpCode.SharpDevelop.Dom;
+
+namespace ICSharpCode.PackageManagement.EnvDTE
+{
+ public class CodeParameter2 : CodeParameter, global::EnvDTE.CodeParameter2
+ {
+ public CodeParameter2(CodeModelContext context, IParameter parameter)
+ : base(context, parameter)
+ {
+ }
+
+ public virtual global::EnvDTE.vsCMParameterKind ParameterKind {
+ get { return GetParameterKind(); }
+ }
+
+ global::EnvDTE.vsCMParameterKind GetParameterKind()
+ {
+ global::EnvDTE.vsCMParameterKind kind = 0;
+ if (parameter.IsOptional) {
+ kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindOptional;
+ }
+ if (parameter.IsOut) {
+ kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindOut;
+ }
+ if (parameter.IsRef) {
+ kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindRef;
+ }
+ if (parameter.IsParams) {
+ kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindParamArray;
+ }
+ if (!(parameter.IsOut || parameter.IsRef)) {
+ kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindIn;
+ }
+ return kind;
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameters.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameters.cs
deleted file mode 100644
index 454d4bff23..0000000000
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameters.cs
+++ /dev/null
@@ -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 parameters)
-// {
-// this.projectContent = projectContent;
-// AddParameters(parameters);
-// }
-//
-// void AddParameters(IEnumerable parameters)
-// {
-// foreach (IParameter parameter in parameters) {
-// AddParameters(parameter);
-// }
-// }
-//
-// void AddParameters(IParameter parameter)
-// {
-// AddCodeElement(new CodeParameter2(projectContent, parameter));
-// }
-// }
-//}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs
index db7d340e39..03d1bcc3f7 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs
@@ -24,7 +24,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
if (typeDef != null) {
var typeModel = typeDef.GetModel();
if (typeModel != null)
- return Create(context, typeModel);
+ return Create(context.WithFilteredFileName(null), typeModel);
}
return null;
}
@@ -66,7 +66,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public virtual global::EnvDTE.vsCMAccess Access {
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 {
@@ -89,7 +94,10 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public virtual global::EnvDTE.CodeElements Members {
get {
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;
}
@@ -121,7 +129,8 @@ namespace ICSharpCode.PackageManagement.EnvDTE
var td = typeModel.Resolve();
if (td != null) {
foreach (var attr in td.Attributes) {
- list.Add(new CodeAttribute2(attr));
+ if (IsInFilter(attr.Region))
+ list.Add(new CodeAttribute2(context, attr));
}
}
return list;
@@ -131,7 +140,10 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public virtual global::EnvDTE.CodeNamespace Namespace {
get {
throw new NotImplementedException();
-// return new FileCodeModelCodeNamespace(currentProject, typeModel.Namespace);
+ // if (context.FilteredFileName != null)
+ // ...
+ // else
+ // return new CodeNamespace(context, typeModel.Namespace);
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef.cs
index 424f95c325..acb1f92158 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef.cs
+++ b/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)
-//// 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 CodeTypeRef : MarshalByRefObject, global::EnvDTE.CodeTypeRef
-// {
-// IProjectContent projectContent;
-// CodeElement parent;
-//
-// public CodeTypeRef()
-// {
-// }
-//
-// public CodeTypeRef(IProjectContent projectContent, CodeElement parent, IReturnType returnType)
-// {
-// this.parent = parent;
-// this.projectContent = projectContent;
-// this.ReturnType = returnType;
-// }
-//
-// protected IReturnType ReturnType { get; private set; }
-//
-// public virtual string AsFullName {
-// get { return ReturnType.GetFullName(); }
-// }
-//
-// public virtual string AsString {
-// get {
-// if (projectContent.Language == LanguageProperties.VBNet) {
-// return ReturnType.AsVisualBasicString();
-// }
-// return ReturnType.AsCSharpString();
-// }
-// }
-//
-// public virtual global::EnvDTE.CodeElement Parent {
-// get { return parent; }
-// }
-//
-// public virtual global::EnvDTE.CodeType CodeType {
-// get { return new CodeClass2(projectContent, ReturnType.GetUnderlyingClass()); }
-// }
-//
-// public virtual global::EnvDTE.vsCMTypeRef TypeKind {
-// get { return ReturnType.GetTypeKind(); }
-// }
-// }
-//}
+// 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.NRefactory.CSharp;
+using ICSharpCode.NRefactory.TypeSystem;
+using ICSharpCode.SharpDevelop;
+using ICSharpCode.SharpDevelop.Dom;
+
+namespace ICSharpCode.PackageManagement.EnvDTE
+{
+ public class CodeTypeRef : MarshalByRefObject, global::EnvDTE.CodeTypeRef
+ {
+ protected readonly CodeModelContext context;
+ protected readonly CodeElement parent;
+ protected readonly IType type;
+
+ public CodeTypeRef()
+ {
+ }
+
+ public CodeTypeRef(CodeModelContext context, CodeElement parent, IType type)
+ {
+ this.context = context;
+ this.parent = parent;
+ this.type = type;
+ }
+
+ public virtual string AsFullName {
+ get { return type.ReflectionName; }
+ }
+
+ public virtual string AsString {
+ get {
+ return new CSharpAmbience().ConvertType(type);
+ }
+ }
+
+ public virtual global::EnvDTE.CodeElement Parent {
+ get { return parent; }
+ }
+
+ public virtual global::EnvDTE.CodeType CodeType {
+ get {
+ return EnvDTE.CodeType.Create(context, type);
+ }
+ }
+
+ 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;
+ }
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef2.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef2.cs
index 49b82643a3..21b00af8be 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef2.cs
+++ b/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)
-//// 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 CodeTypeRef2 : CodeTypeRef, global::EnvDTE.CodeTypeRef2
-// {
-// public CodeTypeRef2(IProjectContent projectContent, CodeElement parent, IReturnType returnType)
-// : base(projectContent, parent, returnType)
-// {
-// }
-//
-// public bool IsGeneric {
-// get { return ReturnType.DotNetName.Contains("{"); }
-// }
-// }
-//}
+// 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.NRefactory.TypeSystem;
+using ICSharpCode.SharpDevelop.Dom;
+
+namespace ICSharpCode.PackageManagement.EnvDTE
+{
+ public class CodeTypeRef2 : CodeTypeRef, global::EnvDTE.CodeTypeRef2
+ {
+ public CodeTypeRef2(CodeModelContext context, CodeElement parent, IType type)
+ : base(context, parent, type)
+ {
+ }
+
+ public bool IsGeneric {
+ get { return type.IsParameterized; }
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs
index 0377696b66..6c68513811 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs
@@ -26,7 +26,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public global::EnvDTE.vsCMAccess Access {
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()
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/NamespaceName.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/NamespaceName.cs
deleted file mode 100644
index 8fea477cce..0000000000
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/NamespaceName.cs
+++ /dev/null
@@ -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);
- }
- }
-}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/PartialClasses.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/PartialClasses.cs
deleted file mode 100644
index 75ccafe162..0000000000
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/PartialClasses.cs
+++ /dev/null
@@ -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);
-// }
-// }
-//}
diff --git a/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/vsCMParameterKind.vb b/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/vsCMParameterKind.vb
index b3806d3c60..b32bb22646 100644
--- a/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/vsCMParameterKind.vb
+++ b/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)
Namespace EnvDTE
+
Public Enum vsCMParameterKind
vsCMParameterKindNone = 0
vsCMParameterKindIn = 1
diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
index a5951c9662..5fae98d922 100644
--- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
+++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
@@ -105,7 +105,6 @@
-
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/NamespaceNameTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/NamespaceNameTests.cs
deleted file mode 100644
index 9f067893bf..0000000000
--- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/NamespaceNameTests.cs
+++ /dev/null
@@ -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);
- }
- }
-}
diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ImplementInterfaceAction.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ImplementInterfaceAction.cs
index 2b311c2daf..69814217e3 100644
--- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ImplementInterfaceAction.cs
+++ b/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)
{
- var builder = context.CreateTypeSytemAstBuilder();
+ var builder = context.CreateTypeSystemAstBuilder();
builder.GenerateBody = true;
builder.ShowModifiers = false;
builder.ShowAccessibility = true;
diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CompilerErrors/CS0029InvalidConversionIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CompilerErrors/CS0029InvalidConversionIssue.cs
index 5a9cc75248..05fb40479f 100644
--- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CompilerErrors/CS0029InvalidConversionIssue.cs
+++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CompilerErrors/CS0029InvalidConversionIssue.cs
@@ -1,10 +1,10 @@
//
-// ExpressionOfCompatibleTypeCastIssue.cs
+// CS0029InvalidConversionIssue.cs
//
// Author:
-// Ciprian Khlud
+// Daniel Grunwald
//
-// Copyright (c) 2013 Ciprian Khlud
+// Copyright (c) 2013 Daniel Grunwald
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/RefactoringContext.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/RefactoringContext.cs
index 4270865424..4668715750 100644
--- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/RefactoringContext.cs
+++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/RefactoringContext.cs
@@ -45,7 +45,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
public abstract TextLocation Location { get; }
- public TypeSystemAstBuilder CreateTypeSytemAstBuilder()
+ public TypeSystemAstBuilder CreateTypeSystemAstBuilder()
{
var csResolver = Resolver.GetResolverStateBefore(GetNode());
return new TypeSystemAstBuilder(csResolver);
@@ -53,13 +53,13 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
public virtual AstType CreateShortType (IType fullType)
{
- var builder = CreateTypeSytemAstBuilder();
+ var builder = CreateTypeSystemAstBuilder();
return builder.ConvertType(fullType);
}
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));
}
diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs
index 2d3eaa162c..d524b8ab65 100644
--- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs
+++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs
@@ -841,7 +841,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
#endregion
#region Convert Modifiers
- static Modifiers ModifierFromAccessibility(Accessibility accessibility)
+ public static Modifiers ModifierFromAccessibility(Accessibility accessibility)
{
switch (accessibility) {
case Accessibility.Private:
diff --git a/src/Main/Base/Project/Dom/IEntityModel.cs b/src/Main/Base/Project/Dom/IEntityModel.cs
index 966186e846..ed122ccd32 100644
--- a/src/Main/Base/Project/Dom/IEntityModel.cs
+++ b/src/Main/Base/Project/Dom/IEntityModel.cs
@@ -17,7 +17,25 @@ namespace ICSharpCode.SharpDevelop.Dom
///
/// Gets/sets the accessibility of the entity.
///
- Accessibility Accessibility { get; set; }
+ Accessibility Accessibility { get; }
+
+ ///
+ /// Gets whether this entity is static.
+ /// Returns true if either the 'static' or the 'const' modifier is set.
+ ///
+ bool IsStatic { get; }
+
+ ///
+ /// Returns whether this entity is abstract.
+ ///
+ /// Static classes also count as abstract classes.
+ bool IsAbstract { get; }
+
+ ///
+ /// Returns whether this entity is sealed.
+ ///
+ /// Static classes also count as sealed classes.
+ bool IsSealed { get; }
///
/// Resolves the entity in the current solution snapshot.
diff --git a/src/Main/Base/Project/Dom/IEntityModelContext.cs b/src/Main/Base/Project/Dom/IEntityModelContext.cs
index 38ab947bb4..48f8c01ddc 100644
--- a/src/Main/Base/Project/Dom/IEntityModelContext.cs
+++ b/src/Main/Base/Project/Dom/IEntityModelContext.cs
@@ -5,6 +5,7 @@ using System;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project;
+using ICSharpCode.SharpDevelop.Refactoring;
namespace ICSharpCode.SharpDevelop.Dom
{
diff --git a/src/Main/Base/Project/Dom/ITypeDefinitionModel.cs b/src/Main/Base/Project/Dom/ITypeDefinitionModel.cs
index cefa5e1fdf..370f5ae8ef 100644
--- a/src/Main/Base/Project/Dom/ITypeDefinitionModel.cs
+++ b/src/Main/Base/Project/Dom/ITypeDefinitionModel.cs
@@ -41,6 +41,6 @@ namespace ICSharpCode.SharpDevelop.Dom
///
void Update(IUnresolvedTypeDefinition oldPart, IUnresolvedTypeDefinition newPart);
- IFieldModel AddField(Accessibility accessiblity, IType type, string name);
+ bool IsPartial { get; }
}
}
diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
index 94d71d21f3..1ad8434875 100644
--- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
+++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
@@ -172,7 +172,7 @@
-
+
diff --git a/src/Main/Base/Project/Refactoring/ICodeGenerator.cs b/src/Main/Base/Project/Refactoring/CodeGenerator.cs
similarity index 76%
rename from src/Main/Base/Project/Refactoring/ICodeGenerator.cs
rename to src/Main/Base/Project/Refactoring/CodeGenerator.cs
index c53774be57..2143a49cb7 100644
--- a/src/Main/Base/Project/Refactoring/ICodeGenerator.cs
+++ b/src/Main/Base/Project/Refactoring/CodeGenerator.cs
@@ -8,24 +8,9 @@ using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Refactoring
{
- ///
- /// Description of ICodeGenerator.
- ///
- public interface ICodeGenerator
+ public class CodeGenerator
{
- void AddAttribute(IEntity target, IAttribute attribute);
- 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 static readonly CodeGenerator DummyCodeGenerator = new CodeGenerator();
public virtual void AddAttribute(IEntity target, IAttribute attribute)
{
@@ -81,5 +66,20 @@ namespace ICSharpCode.SharpDevelop.Refactoring
else
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!");
+ }
}
}
diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs
index 7b35604b5d..a64fe61920 100644
--- a/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs
+++ b/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs
@@ -20,7 +20,7 @@ namespace ICSharpCode.SharpDevelop
this.container = new ServiceContainer();
this.container.AddService(typeof(IFormattingStrategy), DefaultFormattingStrategy.DefaultInstance);
this.container.AddService(typeof(IBracketSearcher), DefaultBracketSearcher.DefaultInstance);
- this.container.AddService(typeof(ICodeGenerator), DefaultCodeGenerator.DefaultInstance);
+ this.container.AddService(typeof(CodeGenerator), CodeGenerator.DummyCodeGenerator);
} else {
this.container = new ServiceContainer(DefaultInstance);
}
@@ -43,9 +43,9 @@ namespace ICSharpCode.SharpDevelop
}
}
- public ICodeGenerator CodeGenerator {
+ public CodeGenerator CodeGenerator {
get {
- return this.GetService();
+ return this.GetService();
}
}
diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs
index f7051565f8..9a3b1c210c 100644
--- a/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs
+++ b/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs
@@ -29,7 +29,7 @@ namespace ICSharpCode.SharpDevelop
///
/// Provides access to the code generator for this language.
///
- ICodeGenerator CodeGenerator {
+ CodeGenerator CodeGenerator {
get;
}
diff --git a/src/Main/SharpDevelop/Dom/MemberModel.cs b/src/Main/SharpDevelop/Dom/MemberModel.cs
index a56d00b274..f4aa39519a 100644
--- a/src/Main/SharpDevelop/Dom/MemberModel.cs
+++ b/src/Main/SharpDevelop/Dom/MemberModel.cs
@@ -94,5 +94,17 @@ namespace ICSharpCode.SharpDevelop.Dom
return Resolve(solutionSnapshot);
}
#endregion
+
+ public bool IsStatic {
+ get { return member.IsStatic; }
+ }
+
+ public bool IsAbstract {
+ get { return member.IsAbstract; }
+ }
+
+ public bool IsSealed {
+ get { return member.IsSealed; }
+ }
}
}
diff --git a/src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs b/src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs
index 6cb205ae92..6ba5769a8a 100644
--- a/src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs
+++ b/src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs
@@ -51,16 +51,13 @@ namespace ICSharpCode.SharpDevelop.Dom
}
public Accessibility Accessibility {
- get {
+ get {
var td = Resolve();
if (td != null)
return td.Accessibility;
else
return Accessibility.None;
}
- set {
- throw new NotImplementedException();
- }
}
public FullTypeName FullTypeName {
@@ -316,9 +313,22 @@ namespace ICSharpCode.SharpDevelop.Dom
}
#endregion
- public IFieldModel AddField(Accessibility accessiblity, IType type, string name)
- {
- throw new NotImplementedException();
+ public bool IsPartial {
+ get {
+ 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); }
}
}
}