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 @@ -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);

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

@ -25,7 +25,7 @@ namespace CSharpBinding @@ -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());
}
}

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

@ -46,7 +46,7 @@ namespace CSharpBinding.Parser @@ -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) {

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

@ -7,6 +7,7 @@ using System.Linq; @@ -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 @@ -28,7 +29,7 @@ namespace CSharpBinding.Refactoring
/// <summary>
/// Description of CSharpCodeGenerator.
/// </summary>
public class CSharpCodeGenerator : DefaultCodeGenerator
public class CSharpCodeGenerator : CodeGenerator
{
public override void AddAttribute(IEntity target, IAttribute attribute)
{
@ -102,8 +103,7 @@ namespace CSharpBinding.Refactoring @@ -102,8 +103,7 @@ namespace CSharpBinding.Refactoring
var view = SD.FileService.OpenFile(new FileName(region.FileName), false);
var editor = view.GetRequiredService<ITextEditor>();
var context = SDRefactoringContext.Create(editor.FileName, editor.Document, region.Begin, CancellationToken.None);
var node = context.RootNode.GetNodeAt<AstNode>(region.Begin);
if (node is ICSharpCode.NRefactory.CSharp.Attribute) node = node.Parent;
var node = context.RootNode.GetNodeAt<EntityDeclaration>(region.Begin);
var resolver = context.GetResolverStateBefore(node);
var builder = new TypeSystemAstBuilder(resolver);
@ -114,5 +114,20 @@ namespace CSharpBinding.Refactoring @@ -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<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 @@ -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 = "";

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

@ -3,11 +3,14 @@ @@ -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 @@ -59,5 +62,44 @@ namespace CSharpBinding.Refactoring
return null;
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 @@ @@ -105,7 +105,6 @@
<Compile Include="Src\EnvDTE\CodeInterface.cs" />
<Compile Include="Src\EnvDTE\CodeModelContext.cs" />
<Compile Include="Src\EnvDTE\CodeParameter2.cs" />
<Compile Include="Src\EnvDTE\CodeParameters.cs" />
<Compile Include="Src\EnvDTE\CodeModel.cs" />
<Compile Include="Src\EnvDTE\CodeNamespace.cs" />
<Compile Include="Src\EnvDTE\CodeParameter.cs" />
@ -130,8 +129,6 @@ @@ -130,8 +129,6 @@
<Compile Include="Src\EnvDTE\ImplementedInterfacesOnClass.cs" />
<Compile Include="Src\EnvDTE\IParameterExtensions.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\Projects.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 @@ -18,7 +18,8 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
}
public CodeAttribute(IAttribute attribute)
public CodeAttribute(CodeModelContext context, IAttribute attribute)
: base(context)
{
this.attribute = attribute;
}

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

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

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

@ -46,11 +46,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -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<IFieldModel>().FirstOrDefault(f => f.Name == name);
if (fieldModel != null) {
return new CodeVariable(context, fieldModel);
}
return null;
}
}
}

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

@ -1,58 +1,62 @@ @@ -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<CodeType>();
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; }
}
}
}

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

@ -1,24 +1,24 @@ @@ -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; }
}
}
}

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

@ -18,6 +18,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -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 @@ -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;

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

@ -3,6 +3,7 @@ @@ -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 @@ -10,5 +11,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
public IProject CurrentProject { 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 @@ @@ -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<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 @@ @@ -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;
}
}
}

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

@ -1,32 +0,0 @@ @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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);
}
}

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

@ -1,52 +1,117 @@ @@ -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;
}
}
}
}

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

@ -1,20 +1,21 @@ @@ -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; }
}
}
}

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

@ -26,7 +26,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -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()

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

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

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

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

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

@ -1,40 +0,0 @@ @@ -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 @@ -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;

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

@ -1,10 +1,10 @@ @@ -1,10 +1,10 @@
//
// ExpressionOfCompatibleTypeCastIssue.cs
// CS0029InvalidConversionIssue.cs
//
// 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
// 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 @@ -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 @@ -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));
}

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

@ -841,7 +841,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -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:

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

@ -17,7 +17,25 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -17,7 +17,25 @@ namespace ICSharpCode.SharpDevelop.Dom
/// <summary>
/// Gets/sets the accessibility of the entity.
/// </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>
/// Resolves the entity in the current solution snapshot.

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

@ -5,6 +5,7 @@ using System; @@ -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
{

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

@ -41,6 +41,6 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -41,6 +41,6 @@ namespace ICSharpCode.SharpDevelop.Dom
/// </summary>
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 @@ @@ -172,7 +172,7 @@
<Compile Include="Project\Project_TypeGuids.cs" />
<Compile Include="Project\SolutionEventArgs.cs" />
<Compile Include="Project\SolutionSection.cs" />
<Compile Include="Refactoring\ICodeGenerator.cs" />
<Compile Include="Refactoring\CodeGenerator.cs" />
<Compile Include="Services\IClipboard.cs" />
<Compile Include="Services\IFileSystem.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; @@ -8,24 +8,9 @@ using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Refactoring
{
/// <summary>
/// Description of ICodeGenerator.
/// </summary>
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 @@ -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!");
}
}
}

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

@ -20,7 +20,7 @@ namespace ICSharpCode.SharpDevelop @@ -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 @@ -43,9 +43,9 @@ namespace ICSharpCode.SharpDevelop
}
}
public ICodeGenerator CodeGenerator {
public CodeGenerator CodeGenerator {
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 @@ -29,7 +29,7 @@ namespace ICSharpCode.SharpDevelop
/// <summary>
/// Provides access to the code generator for this language.
/// </summary>
ICodeGenerator CodeGenerator {
CodeGenerator CodeGenerator {
get;
}

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

@ -94,5 +94,17 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -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; }
}
}
}

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

@ -51,16 +51,13 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -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 @@ -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); }
}
}
}

Loading…
Cancel
Save