Browse Source

Refactored the interface IAttribute to include useful information (type reference to the attribute type + arguments).

Begin work on a Xaml language binding.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2564 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
50a59336df
  1. 22
      src/AddIns/BackendBindings/Boo/BooBinding/Project/PostBuildEvent.proj
  2. 2
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ConvertVisitor.cs
  3. 18
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/MyNamespaceBuilder.cs
  4. 11
      src/AddIns/BackendBindings/WixBinding/Project/PostBuildEvent.proj
  5. 5
      src/AddIns/BackendBindings/WixBinding/Project/WixBinding.addin
  6. 14
      src/AddIns/BackendBindings/WixBinding/Project/WixBinding.csproj
  7. 20
      src/AddIns/BackendBindings/XamlBinding/Project/Configuration/AssemblyInfo.cs
  8. 42
      src/AddIns/BackendBindings/XamlBinding/Project/Src/XamlClassReturnType.cs
  9. 77
      src/AddIns/BackendBindings/XamlBinding/Project/Src/XamlCompilationUnit.cs
  10. 130
      src/AddIns/BackendBindings/XamlBinding/Project/Src/XamlParser.cs
  11. 39
      src/AddIns/BackendBindings/XamlBinding/Project/XamlBinding.addin
  12. 79
      src/AddIns/BackendBindings/XamlBinding/Project/XamlBinding.csproj
  13. 20
      src/AddIns/DisplayBindings/FormsDesigner/Project/PostBuildEvent.proj
  14. 12
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentsSideTab.cs
  15. 13
      src/AddIns/DisplayBindings/XmlEditor/Project/PostBuildEvent.proj
  16. 4
      src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin
  17. 4
      src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj
  18. 4
      src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.addin
  19. 2
      src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj
  20. 11
      src/AddIns/Misc/CodeCoverage/Project/PostBuildEvent.proj
  21. 13
      src/AddIns/Misc/UnitTesting/PostBuildEvent.proj
  22. 2
      src/AddIns/Misc/UnitTesting/Src/TestClass.cs
  23. 2
      src/AddIns/Misc/UnitTesting/Src/TestMethod.cs
  24. 4
      src/AddIns/Misc/UnitTesting/UnitTesting.csproj
  25. 6
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextArea.cs
  26. 32
      src/Main/Core/Project/Src/AddInTree/AddIn/AddIn.cs
  27. 16
      src/Main/Core/Project/Src/AddInTree/AddIn/AddInReference.cs
  28. 76
      src/Main/Core/Project/Src/AddInTree/AddIn/Runtime.cs
  29. 1
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj
  30. 11
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs
  31. 6
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CtrlSpaceResolveHelper.cs
  32. 32
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/AttributeReturnType.cs
  33. 64
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/DefaultAttribute.cs
  34. 25
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/IAttribute.cs
  35. 8
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/LanguageProperties.cs
  36. 2
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryASTConvertVisitor.cs
  37. 9
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs
  38. 2
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/IProjectContent.cs
  39. 6
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs
  40. 2
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/CodeGenerator.cs
  41. 124
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs
  42. 21
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/ReflectionClass.cs
  43. 2
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/ReflectionMethod.cs
  44. 9
      src/SharpDevelop.sln

22
src/AddIns/BackendBindings/Boo/BooBinding/Project/PostBuildEvent.proj

@ -1,13 +1,13 @@ @@ -1,13 +1,13 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PrepareForRunDependsOn>$(PrepareForRunDependsOn);MyPostBuildTarget</PrepareForRunDependsOn>
</PropertyGroup>
<ItemGroup>
<MyCopyItem Include="$(MSBuildProjectDirectory)\..\..\RequiredLibraries\booc.*" />
<MyCopyItem Include="$(MSBuildProjectDirectory)\..\..\RequiredLibraries\*.targets" />
<MyCopyItem Include="$(MSBuildProjectDirectory)\..\..\RequiredLibraries\Boo.Microsoft.Build.Tasks.dll" />
</ItemGroup>
<Target Name="MyPostBuildTarget">
<Copy SourceFiles="@(MyCopyItem)" DestinationFolder="$(OutputPath)" />
</Target>
<PropertyGroup>
<PrepareForRunDependsOn>$(PrepareForRunDependsOn);MyPostBuildTarget</PrepareForRunDependsOn>
</PropertyGroup>
<ItemGroup>
<MyCopyItem Include="$(MSBuildProjectDirectory)\..\..\RequiredLibraries\booc.*" />
<MyCopyItem Include="$(MSBuildProjectDirectory)\..\..\RequiredLibraries\*.targets" />
<MyCopyItem Include="$(MSBuildProjectDirectory)\..\..\RequiredLibraries\Boo.Microsoft.Build.Tasks.dll" />
</ItemGroup>
<Target Name="MyPostBuildTarget">
<Copy SourceFiles="@(MyCopyItem)" DestinationFolder="$(OutputPath)" />
</Target>
</Project>

2
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ConvertVisitor.cs

@ -165,7 +165,7 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -165,7 +165,7 @@ namespace Grunwald.BooBinding.CodeCompletion
c.Attributes = DefaultAttribute.EmptyAttributeList;
} else {
foreach (AST.Attribute a in node.Attributes) {
c.Attributes.Add(new DefaultAttribute(a.Name));
c.Attributes.Add(new DefaultAttribute(new AttributeReturnType(a.Name)));
}
}
c.Documentation = node.Documentation;

18
src/AddIns/BackendBindings/VBNetBinding/Project/Src/MyNamespaceBuilder.cs

@ -40,7 +40,7 @@ namespace VBNetBinding @@ -40,7 +40,7 @@ namespace VBNetBinding
DefaultClass c = new DefaultClass(cu, ns + ".MyProject");
c.ClassType = ClassType.Module;
c.Modifiers = ModifierEnum.Internal | ModifierEnum.Partial | ModifierEnum.Sealed | ModifierEnum.Synthetic;
c.Attributes.Add(new DefaultAttribute("Microsoft.VisualBasic.HideModuleNameAttribute"));
c.Attributes.Add(new DefaultAttribute(CreateTypeRef(cu, "Microsoft.VisualBasic.HideModuleNameAttribute")));
// we need to use GetClassReturnType instead of DefaultReturnType because we need
// a reference to the compound class.
@ -71,22 +71,22 @@ namespace VBNetBinding @@ -71,22 +71,22 @@ namespace VBNetBinding
DefaultClass c = new DefaultClass(cu, ns + ".MyApplication");
c.ClassType = ClassType.Class;
c.Modifiers = ModifierEnum.Internal | ModifierEnum.Sealed | ModifierEnum.Partial | ModifierEnum.Synthetic;
c.Attributes.Add(new DefaultAttribute("Microsoft.VisualBasic.HideModuleNameAttribute"));
c.Attributes.Add(new DefaultAttribute(CreateTypeRef(cu, "Microsoft.VisualBasic.HideModuleNameAttribute")));
switch (project.OutputType) {
case OutputType.WinExe:
c.BaseTypes.Add(CreateBaseType(cu, "Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase"));
c.BaseTypes.Add(CreateTypeRef(cu, "Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase"));
break;
case OutputType.Exe:
c.BaseTypes.Add(CreateBaseType(cu, "Microsoft.VisualBasic.ApplicationServices.ConsoleApplicationBase"));
c.BaseTypes.Add(CreateTypeRef(cu, "Microsoft.VisualBasic.ApplicationServices.ConsoleApplicationBase"));
break;
default:
c.BaseTypes.Add(CreateBaseType(cu, "Microsoft.VisualBasic.ApplicationServices.ApplicationBase"));
c.BaseTypes.Add(CreateTypeRef(cu, "Microsoft.VisualBasic.ApplicationServices.ApplicationBase"));
break;
}
return c;
}
static IReturnType CreateBaseType(ICompilationUnit cu, string fullName)
static IReturnType CreateTypeRef(ICompilationUnit cu, string fullName)
{
return new GetClassReturnType(cu.ProjectContent, fullName, 0);
}
@ -96,8 +96,8 @@ namespace VBNetBinding @@ -96,8 +96,8 @@ namespace VBNetBinding
DefaultClass c = new DefaultClass(cu, ns + ".MyComputer");
c.ClassType = ClassType.Class;
c.Modifiers = ModifierEnum.Internal | ModifierEnum.Sealed | ModifierEnum.Partial | ModifierEnum.Synthetic;
c.Attributes.Add(new DefaultAttribute("Microsoft.VisualBasic.HideModuleNameAttribute"));
c.BaseTypes.Add(CreateBaseType(cu, "Microsoft.VisualBasic.Devices.Computer"));
c.Attributes.Add(new DefaultAttribute(CreateTypeRef(cu, "Microsoft.VisualBasic.HideModuleNameAttribute")));
c.BaseTypes.Add(CreateTypeRef(cu, "Microsoft.VisualBasic.Devices.Computer"));
return c;
}
@ -106,7 +106,7 @@ namespace VBNetBinding @@ -106,7 +106,7 @@ namespace VBNetBinding
DefaultClass c = new MyFormsClass(cu, ns + ".MyForms");
c.ClassType = ClassType.Class;
c.Modifiers = ModifierEnum.Internal | ModifierEnum.Sealed | ModifierEnum.Synthetic;
c.Attributes.Add(new DefaultAttribute("Microsoft.VisualBasic.HideModuleNameAttribute"));
c.Attributes.Add(new DefaultAttribute(CreateTypeRef(cu, "Microsoft.VisualBasic.HideModuleNameAttribute")));
return c;
}

11
src/AddIns/BackendBindings/WixBinding/Project/PostBuildEvent.proj

@ -1,11 +0,0 @@ @@ -1,11 +0,0 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PrepareForRunDependsOn>$(PrepareForRunDependsOn);MyPostBuildTarget</PrepareForRunDependsOn>
</PropertyGroup>
<Target Name="MyPostBuildTarget">
<!-- Delete the XmlEditor.addin file that gets copied to the WixBinding addin output
folder due to an MSBuild bug. Otherwise the UnitTesting.addin file will be
loaded twice by SharpDevelop -->
<Delete Files="$(OutputPath)\XmlEditor.addin" ContinueOnError="True"/>
</Target>
</Project>

5
src/AddIns/BackendBindings/WixBinding/Project/WixBinding.addin

@ -6,13 +6,12 @@ @@ -6,13 +6,12 @@
<Manifest>
<Identity name = "ICSharpCode.WixBinding"/>
<Dependency addin = "ICSharpCode.FormsDesigner"/>
<Dependency addin = "ICSharpCode.FormsDesigner" requirePreload = "true"/>
<Dependency addin = "ICSharpCode.XmlEditor" requirePreload = "true"/>
</Manifest>
<Runtime>
<Import assembly = ":ICSharpCode.SharpDevelop"/>
<Import assembly = "$ICSharpCode.FormsDesigner/FormsDesigner.dll"/>
<Import assembly = "$ICSharpCode.XmlEditor/XmlEditor.dll"/>
<Import assembly = "WixBinding.dll"/>
</Runtime>

14
src/AddIns/BackendBindings/WixBinding/Project/WixBinding.csproj

@ -221,7 +221,6 @@ @@ -221,7 +221,6 @@
<Name>ICSharpCode.TextEditor</Name>
<Private>False</Private>
</ProjectReference>
<Content Include="PostBuildEvent.proj" />
<ProjectReference Include="..\..\..\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj">
<Project>{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}</Project>
<Name>FormsDesigner</Name>
@ -249,11 +248,6 @@ @@ -249,11 +248,6 @@
<Name>ICSharpCode.SharpDevelop.Dom</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\DisplayBindings\XmlEditor\Project\XmlEditor.csproj">
<Project>{6B717BD1-CD5E-498C-A42E-9E6A4584DC48}</Project>
<Name>XmlEditor</Name>
<Private>False</Private>
</ProjectReference>
<Folder Include="Src\PropertyGrid" />
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj">
<Project>{8035765F-D51F-4A0C-A746-2FD100E19419}</Project>
@ -261,6 +255,12 @@ @@ -261,6 +255,12 @@
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\DisplayBindings\XmlEditor\Project\XmlEditor.csproj">
<Project>{6B717BD1-CD5E-498C-A42E-9E6A4584DC48}</Project>
<Name>XmlEditor</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
<Import Project="PostBuildEvent.proj" />
</Project>

20
src/AddIns/BackendBindings/XamlBinding/Project/Configuration/AssemblyInfo.cs

@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System.Reflection;
// Information about this assembly is defined by the following
// attributes.
//
// change them to the information which is associated with the assembly
// you compile.
[assembly: AssemblyTitle("XamlBinding")]
[assembly: AssemblyDescription("Provides XAML integration in code-completion")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

42
src/AddIns/BackendBindings/XamlBinding/Project/Src/XamlClassReturnType.cs

@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <author name="Daniel Grunwald"/>
// <version>$Revision$</version>
// </file>
using System;
using ICSharpCode.SharpDevelop.Dom;
namespace XamlBinding
{
/// <summary>
/// Description of XamlClassReturnType.
/// </summary>
public class XamlClassReturnType : ProxyReturnType
{
XamlCompilationUnit compilationUnit;
string xmlNamespace;
string className;
public XamlClassReturnType(XamlCompilationUnit compilationUnit, string xmlNamespace, string className)
{
if (compilationUnit == null)
throw new ArgumentNullException("compilationUnit");
this.compilationUnit = compilationUnit;
this.xmlNamespace = xmlNamespace ?? "";
this.className = className ?? "";
}
public override IReturnType BaseType {
get {
return compilationUnit.FindType(xmlNamespace, className);
}
}
public override string Name {
get { return className; }
}
}
}

77
src/AddIns/BackendBindings/XamlBinding/Project/Src/XamlCompilationUnit.cs

@ -0,0 +1,77 @@ @@ -0,0 +1,77 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <author name="Daniel Grunwald"/>
// <version>$Revision$</version>
// </file>
using System;
using ICSharpCode.SharpDevelop.Dom;
namespace XamlBinding
{
/// <summary>
/// Description of XamlCompilationUnit.
/// </summary>
public class XamlCompilationUnit : DefaultCompilationUnit
{
public XamlCompilationUnit(IProjectContent projectContent) : base(projectContent)
{
}
public IReturnType CreateType(string xmlNamespace, string className)
{
if (xmlNamespace.StartsWith("clr-namespace:")) {
return CreateClrNamespaceType(xmlNamespace, className);
} else {
return new XamlClassReturnType(this, xmlNamespace, className);
}
}
IReturnType CreateClrNamespaceType(string xmlNamespace, string className)
{
string namespaceName = xmlNamespace.Substring("clr-namespace:".Length);
int pos = namespaceName.IndexOf(';');
if (pos >= 0) {
// we expect that the target type is also a reference of the project, so we
// can ignore the assembly part after the ;
namespaceName = namespaceName.Substring(0, pos);
}
return new GetClassReturnType(this.ProjectContent, namespaceName + "." + className, 0);
}
public IReturnType FindType(string xmlNamespace, string className)
{
if (xmlNamespace.StartsWith("clr-namespace:")) {
return CreateClrNamespaceType(xmlNamespace, className);
} else {
IReturnType type = FindTypeInAssembly(this.ProjectContent, xmlNamespace, className);
if (type != null)
return type;
foreach (IProjectContent p in this.ProjectContent.ReferencedContents) {
type = FindTypeInAssembly(this.ProjectContent, xmlNamespace, className);
if (type != null)
return type;
}
return null;
}
}
static IReturnType FindTypeInAssembly(IProjectContent projectContent, string xmlNamespace, string className)
{
foreach (IAttribute att in projectContent.GetAssemblyAttributes()) {
if (att.PositionalArguments.Count == 2
&& att.AttributeType.FullyQualifiedName == "System.Windows.Markup.XmlnsDefinitionAttribute")
{
string namespaceName = att.PositionalArguments[1] as string;
if (xmlNamespace.Equals(att.PositionalArguments[0]) && namespaceName != null) {
IClass c = projectContent.GetClass(namespaceName + "." + className, 0, LanguageProperties.CSharp, false);
if (c != null)
return c.DefaultReturnType;
}
}
}
return null;
}
}
}

130
src/AddIns/BackendBindings/XamlBinding/Project/Src/XamlParser.cs

@ -0,0 +1,130 @@ @@ -0,0 +1,130 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <author name="Daniel Grunwald"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Diagnostics;
using System.IO;
using System.Xml;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
namespace XamlBinding
{
/// <summary>
/// Parses xaml files to partial classes for the Dom.
/// </summary>
public class XamlParser : IParser
{
string[] lexerTags;
public string[] LexerTags {
get {
return lexerTags;
}
set {
lexerTags = value;
}
}
public LanguageProperties Language {
get {
return LanguageProperties.CSharp;
}
}
public bool CanParse(string fileName)
{
return Path.GetExtension(fileName).Equals(".xaml", StringComparison.OrdinalIgnoreCase);
}
public bool CanParse(ICSharpCode.SharpDevelop.Project.IProject project)
{
return false;
}
const string XamlNamespace = "http://schemas.microsoft.com/winfx/2006/xaml";
public ICompilationUnit Parse(IProjectContent projectContent, string fileName, string fileContent)
{
XamlCompilationUnit cu = new XamlCompilationUnit(projectContent);
try {
using (XmlTextReader r = new XmlTextReader(new StringReader(fileContent))) {
r.Read();
r.MoveToContent();
DomRegion classStart = new DomRegion(r.LineNumber, r.LinePosition);
string className = r.GetAttribute("Class", XamlNamespace);
if (string.IsNullOrEmpty(className)) {
LoggingService.Debug("XamlParser: returning empty cu because root element has no Class attribute");
} else {
DefaultClass c = new DefaultClass(cu, className);
c.Modifiers = ModifierEnum.Partial;
c.Region = classStart;
c.BaseTypes.Add(TypeFromXmlNode(cu, r));
cu.Classes.Add(c);
DefaultMethod initializeComponent = new DefaultMethod(
"InitializeComponent",
projectContent.SystemTypes.Void,
ModifierEnum.Public | ModifierEnum.Synthetic,
classStart, DomRegion.Empty,
c);
c.Methods.Add(initializeComponent);
ParseXamlElement(cu, c, r);
if (r.NodeType == XmlNodeType.EndElement) {
r.Read();
c.Region = new DomRegion(classStart.BeginLine, classStart.BeginColumn, r.LineNumber, r.LinePosition);
}
}
}
} catch (XmlException ex) {
LoggingService.Debug("XamlParser exception: " + ex.ToString());
cu.ErrorsDuringCompile = true;
}
return cu;
}
IReturnType TypeFromXmlNode(XamlCompilationUnit cu, XmlReader r)
{
return cu.CreateType(r.NamespaceURI, r.Name);
}
void ParseXamlElement(XamlCompilationUnit cu, DefaultClass c, XmlTextReader r)
{
Debug.Assert(r.NodeType == XmlNodeType.Element);
string name = r.GetAttribute("Name", XamlNamespace) ?? r.GetAttribute("Name");
if (!string.IsNullOrEmpty(name)) {
DefaultField field = new DefaultField(
TypeFromXmlNode(cu, r),
name,
ModifierEnum.Internal,
new DomRegion(r.LineNumber, r.LinePosition),
c);
c.Fields.Add(field);
}
if (r.IsEmptyElement)
return;
do {
r.Read();
if (r.NodeType == XmlNodeType.Element) {
ParseXamlElement(cu, c, r);
}
} while (r.NodeType != XmlNodeType.EndElement);
}
public IExpressionFinder CreateExpressionFinder(string fileName)
{
throw new NotImplementedException();
}
public IResolver CreateResolver()
{
throw new NotImplementedException();
}
}
}

39
src/AddIns/BackendBindings/XamlBinding/Project/XamlBinding.addin

@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
<AddIn name = "XAML binding"
author = "Daniel Grunwald"
copyright = "prj:///doc/copyright.txt"
url = "http://icsharpcode.net"
description = "Enables code-completion for xaml files.">
<!--
This file is unrelated to the WPF Designer, it is a language binding for .xaml files.
It allows using Go to definition, find references, code completion in .xaml files.
-->
<Manifest>
<Identity name = "ICSharpCode.XamlBinding"/>
<!--<Dependency addin = "ICSharpCode.XmlEditor" requirePreload = "true"/>-->
</Manifest>
<Runtime>
<Import assembly = "XamlBinding.dll"/>
</Runtime>
<Path name = "/Workspace/Icons">
<Icon id = "XamlFileIcon"
extensions = ".xaml"
resource = "FileIcons.XmlIcon" />
</Path>
<Path name = "/SharpDevelop/Workbench/FileFilter">
<FileFilter id = "Xaml"
insertbefore="AllFiles"
name = "Xaml files (*.xaml)"
extensions = "*.xaml"/>
</Path>
<Path name = "/Workspace/Parser">
<Parser id = "XAML"
supportedextensions = ".xaml"
class = "XamlBinding.XamlParser"/>
</Path>
</AddIn>

79
src/AddIns/BackendBindings/XamlBinding/Project/XamlBinding.csproj

@ -0,0 +1,79 @@ @@ -0,0 +1,79 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<OutputType>Library</OutputType>
<RootNamespace>XamlBinding</RootNamespace>
<AssemblyName>XamlBinding</AssemblyName>
<OutputPath>..\..\..\..\..\AddIns\AddIns\BackendBindings\XamlBinding</OutputPath>
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
<NoStdLib>False</NoStdLib>
<WarningLevel>4</WarningLevel>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>Full</DebugType>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<Optimize>False</Optimize>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugSymbols>False</DebugSymbols>
<DebugType>None</DebugType>
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<BaseAddress>4194304</BaseAddress>
<PlatformTarget>AnyCPU</PlatformTarget>
<FileAlignment>4096</FileAlignment>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Folder Include="Configuration" />
<Folder Include="Src" />
<None Include="XamlBinding.addin">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs">
<Link>Configuration\GlobalAssemblyInfo.cs</Link>
</Compile>
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\XamlClassReturnType.cs" />
<Compile Include="Src\XamlCompilationUnit.cs" />
<Compile Include="Src\XamlParser.cs" />
<ProjectReference Include="..\..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj">
<Project>{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}</Project>
<Name>ICSharpCode.TextEditor</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Libraries\NRefactory\Project\NRefactory.csproj">
<Project>{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}</Project>
<Name>NRefactory</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project>
<Name>ICSharpCode.SharpDevelop</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\Core\Project\ICSharpCode.Core.csproj">
<Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project>
<Name>ICSharpCode.Core</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj">
<Project>{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}</Project>
<Name>ICSharpCode.SharpDevelop.Dom</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
</Project>

20
src/AddIns/DisplayBindings/FormsDesigner/Project/PostBuildEvent.proj

@ -1,11 +1,13 @@ @@ -1,11 +1,13 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PrepareForRunDependsOn>$(PrepareForRunDependsOn);MyPostBuildTarget</PrepareForRunDependsOn>
</PropertyGroup>
<ItemGroup>
<MyCopyItem Include="$(MSBuildProjectDirectory)\*.addin" />
</ItemGroup>
<Target Name="MyPostBuildTarget">
<Copy SourceFiles="@(MyCopyItem)" DestinationFolder="$(OutputPath)" />
</Target>
<PropertyGroup>
<PrepareForRunDependsOn>$(PrepareForRunDependsOn);MyPostBuildTarget</PrepareForRunDependsOn>
</PropertyGroup>
<ItemGroup>
<MyCopyItem Include="$(MSBuildProjectDirectory)\*.addin" />
</ItemGroup>
<Target Name="MyPostBuildTarget">
<!-- work around an MSBuild bug in CopyToOutputDirectory that causes this file to be copied -->
<!-- to projects referencing this project even if local copy on that reference is false -->
<Copy SourceFiles="@(MyCopyItem)" DestinationFolder="$(OutputPath)" />
</Target>
</Project>

12
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentsSideTab.cs

@ -101,11 +101,15 @@ namespace ICSharpCode.FormsDesigner.Gui @@ -101,11 +101,15 @@ namespace ICSharpCode.FormsDesigner.Gui
goto isDesignComponent;
}
foreach (IAttribute attr in subClass.Attributes) {
if (attr.Name == "DesignTimeVisibleAttribute"
|| attr.Name == "System.ComponentModel.DesignTimeVisibleAttribute")
if (attr.AttributeType.FullyQualifiedName == "System.ComponentModel.DesignTimeVisibleAttribute")
{
// TODO: Check value of attribute (make IAttribute store at least simple values like bool's and typeof's)
goto isDesignComponent;
if (attr.PositionalArguments.Count == 1 && attr.PositionalArguments[0] is bool) {
if ((bool)attr.PositionalArguments[0]) {
goto isDesignComponent;
}
} else {
goto isDesignComponent;
}
}
}
}

13
src/AddIns/DisplayBindings/XmlEditor/Project/PostBuildEvent.proj

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PrepareForRunDependsOn>$(PrepareForRunDependsOn);MyPostBuildTarget</PrepareForRunDependsOn>
</PropertyGroup>
<ItemGroup>
<MyCopyItem Include="$(MSBuildProjectDirectory)\*.addin" />
</ItemGroup>
<Target Name="MyPostBuildTarget">
<!-- work around an MSBuild bug in CopyToOutputDirectory that causes this file to be copied -->
<!-- to projects referencing this project even if local copy on that reference is false -->
<Copy SourceFiles="@(MyCopyItem)" DestinationFolder="$(OutputPath)" />
</Target>
</Project>

4
src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin

@ -25,14 +25,14 @@ @@ -25,14 +25,14 @@
<!-- Xml parser used to initiate the folding update -->
<Path name = "/Workspace/Parser">
<Parser id = "XmlFoldingParser"
supportedextensions = ".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;.build;.xfrm;.targets;.xaml;.xpt;.xft;.map;.wsdl;.disco"
supportedextensions = ".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;.build;.xfrm;.targets;.xpt;.xft;.map;.wsdl;.disco"
class = "ICSharpCode.XmlEditor.Parser"/>
</Path>
<!-- Extra project browser icons -->
<Path name = "/Workspace/Icons">
<Icon id = "ExtraXmlFileIcon"
extensions = ".manifest;.config;.xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;.xfrm;.targets;.xaml;.xpt;.xft;.map;.wsdl;.disco"
extensions = ".manifest;.config;.xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;.xfrm;.targets;.xpt;.xft;.map;.wsdl;.disco"
resource = "FileIcons.XmlIcon" />
</Path>

4
src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj

@ -106,8 +106,9 @@ @@ -106,8 +106,9 @@
<EmbeddedResource Include="Resources\SelectXmlSchema.xfrm" />
<EmbeddedResource Include="Resources\XmlEditorOptionsPanel.xfrm" />
<EmbeddedResource Include="Resources\XmlCommentTreeNodeIcon.png" />
<None Include="PostBuildEvent.proj" />
<None Include="XmlEditor.addin">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
<Compile Include="Src\RunXslTransformCommand.cs" />
<Compile Include="Src\XslOutputView.cs" />
@ -167,4 +168,5 @@ @@ -167,4 +168,5 @@
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
<Import Project="PostBuildEvent.proj" />
</Project>

4
src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.addin

@ -5,12 +5,10 @@ @@ -5,12 +5,10 @@
<Manifest>
<Identity name = "ICSharpCode.CodeCoverage"/>
<Dependency addin = "ICSharpCode.UnitTesting"/>
<Dependency addin = "ICSharpCode.UnitTesting" requirePreload = "true"/>
</Manifest>
<Runtime>
<!-- NUnit is not in the path, so we need to load it manually -->
<Import assembly = "$ICSharpCode.UnitTesting/UnitTesting.dll"/>
<Import assembly = "CodeCoverage.dll"/>
</Runtime>

2
src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj

@ -99,7 +99,6 @@ @@ -99,7 +99,6 @@
<Name>ICSharpCode.TextEditor</Name>
<Private>False</Private>
</ProjectReference>
<Content Include="PostBuildEvent.proj" />
<ProjectReference Include="..\..\UnitTesting\UnitTesting.csproj">
<Project>{1F261725-6318-4434-A1B1-6C70CE4CD324}</Project>
<Name>UnitTesting</Name>
@ -112,5 +111,4 @@ @@ -112,5 +111,4 @@
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
<Import Project="PostBuildEvent.proj" />
</Project>

11
src/AddIns/Misc/CodeCoverage/Project/PostBuildEvent.proj

@ -1,11 +0,0 @@ @@ -1,11 +0,0 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PrepareForRunDependsOn>$(PrepareForRunDependsOn);MyPostBuildTarget</PrepareForRunDependsOn>
</PropertyGroup>
<Target Name="MyPostBuildTarget">
<!-- Delete the UnitTesting.addin file that gets copied to the CodeCoverage AddIn output
folder due to an MSBuild bug. Otherwise the UnitTesting.addin file will be
loaded twice by SharpDevelop -->
<Delete Files="$(OutputPath)\UnitTesting.addin" ContinueOnError="True"/>
</Target>
</Project>

13
src/AddIns/Misc/UnitTesting/PostBuildEvent.proj

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PrepareForRunDependsOn>$(PrepareForRunDependsOn);MyPostBuildTarget</PrepareForRunDependsOn>
</PropertyGroup>
<ItemGroup>
<MyCopyItem Include="$(MSBuildProjectDirectory)\*.addin" />
</ItemGroup>
<Target Name="MyPostBuildTarget">
<!-- work around an MSBuild bug in CopyToOutputDirectory that causes this file to be copied -->
<!-- to projects referencing this project even if local copy on that reference is false -->
<Copy SourceFiles="@(MyCopyItem)" DestinationFolder="$(OutputPath)" />
</Target>
</Project>

2
src/AddIns/Misc/UnitTesting/Src/TestClass.cs

@ -53,7 +53,7 @@ namespace ICSharpCode.UnitTesting @@ -53,7 +53,7 @@ namespace ICSharpCode.UnitTesting
if (nameComparer != null) {
TestAttributeName testAttributeName = new TestAttributeName("TestFixture", nameComparer);
foreach (IAttribute attribute in c.Attributes) {
if (testAttributeName.IsEqual(attribute.Name)) {
if (testAttributeName.IsEqual(attribute.AttributeType.FullyQualifiedName)) {
return true;
}
}

2
src/AddIns/Misc/UnitTesting/Src/TestMethod.cs

@ -114,7 +114,7 @@ namespace ICSharpCode.UnitTesting @@ -114,7 +114,7 @@ namespace ICSharpCode.UnitTesting
if (nameComparer != null) {
TestAttributeName testAttribute = new TestAttributeName("Test", nameComparer);
foreach (IAttribute attribute in member.Attributes) {
if (testAttribute.IsEqual(attribute.Name)) {
if (testAttribute.IsEqual(attribute.AttributeType.FullyQualifiedName)) {
IMethod method = (IMethod)member;
if (method.Parameters.Count == 0) {
return true;

4
src/AddIns/Misc/UnitTesting/UnitTesting.csproj

@ -54,8 +54,9 @@ @@ -54,8 +54,9 @@
</Reference>
</ItemGroup>
<ItemGroup>
<None Include="PostBuildEvent.proj" />
<None Include="UnitTesting.addin">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
<Compile Include="Src\AllTestsTreeNode.cs" />
<Compile Include="Src\UnitTestCommands.cs" />
@ -123,4 +124,5 @@ @@ -123,4 +124,5 @@
<Folder Include="Resources" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
<Import Project="PostBuildEvent.proj" />
</Project>

6
src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextArea.cs

@ -275,12 +275,6 @@ namespace ICSharpCode.TextEditor @@ -275,12 +275,6 @@ namespace ICSharpCode.TextEditor
Caret.Position = textView.GetLogicalColumn(Caret.Line, Caret.DesiredColumn + (int)(VirtualTop.X * textView.WideSpaceWidth));
}
[Obsolete("Use the parameterless version")]
public void SetCaretToDesiredColumn(int caretLine)
{
Caret.Position = textView.GetLogicalColumn(Caret.Line, Caret.DesiredColumn + (int)(VirtualTop.X * textView.WideSpaceWidth));
}
public void OptionsChanged()
{
UpdateMatchingBracket();

32
src/Main/Core/Project/Src/AddInTree/AddIn/AddIn.cs

@ -29,6 +29,7 @@ namespace ICSharpCode.Core @@ -29,6 +29,7 @@ namespace ICSharpCode.Core
public object CreateObject(string className)
{
LoadDependencies();
foreach (Runtime runtime in runtimes) {
object o = runtime.CreateInstance(className);
if (o != null) {
@ -44,6 +45,37 @@ namespace ICSharpCode.Core @@ -44,6 +45,37 @@ namespace ICSharpCode.Core
return null;
}
public void LoadRuntimeAssemblies()
{
LoadDependencies();
foreach (Runtime runtime in runtimes) {
runtime.Load();
}
}
bool dependenciesLoaded;
void LoadDependencies()
{
if (!dependenciesLoaded) {
dependenciesLoaded = true;
foreach (AddInReference r in manifest.Dependencies) {
if (r.RequirePreload) {
bool found = false;
foreach (AddIn addIn in AddInTree.AddIns) {
if (addIn.Manifest.Identities.ContainsKey(r.Name)) {
found = true;
addIn.LoadRuntimeAssemblies();
}
}
if (!found) {
throw new AddInLoadException("Cannot load run-time dependency for " + r.ToString());
}
}
}
}
}
public override string ToString()
{
return "[AddIn: " + Name + "]";

16
src/Main/Core/Project/Src/AddInTree/AddIn/AddInReference.cs

@ -20,6 +20,7 @@ namespace ICSharpCode.Core @@ -20,6 +20,7 @@ namespace ICSharpCode.Core
string name;
Version minimumVersion;
Version maximumVersion;
bool requirePreload;
public Version MinimumVersion {
get {
@ -33,6 +34,11 @@ namespace ICSharpCode.Core @@ -33,6 +34,11 @@ namespace ICSharpCode.Core
}
}
public bool RequirePreload {
get { return requirePreload; }
}
public string Name {
get {
return name;
@ -92,16 +98,8 @@ namespace ICSharpCode.Core @@ -92,16 +98,8 @@ namespace ICSharpCode.Core
} else {
reference.maximumVersion = reference.minimumVersion = ParseVersion(version, hintPath);
}
if (reference.Name == "SharpDevelop") {
// HACK: SD 2.1 AddIns work with SharpDevelop 2.2
// Because some 2.1 AddIns restrict themselves to SD 2.1, we extend the
// supported SD range.
if (reference.maximumVersion == new Version("2.1")) {
reference.maximumVersion = new Version("2.2");
}
}
}
reference.requirePreload = string.Equals(properties["requirePreload"], "true", StringComparison.OrdinalIgnoreCase);
return reference;
}

76
src/Main/Core/Project/Src/AddInTree/AddIn/Runtime.cs

@ -47,46 +47,54 @@ namespace ICSharpCode.Core @@ -47,46 +47,54 @@ namespace ICSharpCode.Core
}
}
public Assembly LoadedAssembly {
get {
if (!isAssemblyLoaded) {
LoggingService.Info("Loading addin " + assembly);
/// <summary>
/// Force loading the runtime assembly now.
/// </summary>
public void Load()
{
if (!isAssemblyLoaded) {
LoggingService.Info("Loading addin " + assembly);
isAssemblyLoaded = true;
isAssemblyLoaded = true;
try {
if (assembly[0] == ':') {
loadedAssembly = System.Reflection.Assembly.Load(assembly.Substring(1));
} else if (assembly[0] == '$') {
int pos = assembly.IndexOf('/');
if (pos < 0)
throw new ApplicationException("Expected '/' in path beginning with '$'!");
string referencedAddIn = assembly.Substring(1, pos - 1);
foreach (AddIn addIn in AddInTree.AddIns) {
if (addIn.Enabled && addIn.Manifest.Identities.ContainsKey(referencedAddIn)) {
string assemblyFile = Path.Combine(Path.GetDirectoryName(addIn.FileName),
assembly.Substring(pos + 1));
loadedAssembly = System.Reflection.Assembly.LoadFrom(assemblyFile);
break;
}
}
if (loadedAssembly == null) {
throw new FileNotFoundException("Could not find referenced AddIn " + referencedAddIn);
try {
if (assembly[0] == ':') {
loadedAssembly = System.Reflection.Assembly.Load(assembly.Substring(1));
} else if (assembly[0] == '$') {
int pos = assembly.IndexOf('/');
if (pos < 0)
throw new ApplicationException("Expected '/' in path beginning with '$'!");
string referencedAddIn = assembly.Substring(1, pos - 1);
foreach (AddIn addIn in AddInTree.AddIns) {
if (addIn.Enabled && addIn.Manifest.Identities.ContainsKey(referencedAddIn)) {
string assemblyFile = Path.Combine(Path.GetDirectoryName(addIn.FileName),
assembly.Substring(pos + 1));
loadedAssembly = System.Reflection.Assembly.LoadFrom(assemblyFile);
break;
}
} else {
loadedAssembly = System.Reflection.Assembly.LoadFrom(Path.Combine(hintPath, assembly));
}
#if DEBUG
// preload assembly to provoke FileLoadException if dependencies are missing
loadedAssembly.GetExportedTypes();
#endif
} catch (FileNotFoundException ex) {
MessageService.ShowError("The addin '" + assembly + "' could not be loaded:\n" + ex.ToString());
} catch (FileLoadException ex) {
MessageService.ShowError("The addin '" + assembly + "' could not be loaded:\n" + ex.ToString());
if (loadedAssembly == null) {
throw new FileNotFoundException("Could not find referenced AddIn " + referencedAddIn);
}
} else {
loadedAssembly = System.Reflection.Assembly.LoadFrom(Path.Combine(hintPath, assembly));
}
#if DEBUG
// preload assembly to provoke FileLoadException if dependencies are missing
loadedAssembly.GetExportedTypes();
#endif
} catch (FileNotFoundException ex) {
MessageService.ShowError("The addin '" + assembly + "' could not be loaded:\n" + ex.ToString());
} catch (FileLoadException ex) {
MessageService.ShowError("The addin '" + assembly + "' could not be loaded:\n" + ex.ToString());
}
}
}
public Assembly LoadedAssembly {
get {
Load(); // load the assembly, if not already done
return loadedAssembly;
}
}

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

@ -62,6 +62,7 @@ @@ -62,6 +62,7 @@
<Compile Include="Src\Implementations\AbstractReturnType.cs" />
<Compile Include="Src\Implementations\AnonymousMethodReturnType.cs" />
<Compile Include="Src\Implementations\ArrayReturnType.cs" />
<Compile Include="Src\Implementations\AttributeReturnType.cs" />
<Compile Include="Src\Implementations\CombinedReturnType.cs" />
<Compile Include="Src\Implementations\CompoundClass.cs" />
<Compile Include="Src\Implementations\ConstructedReturnType.cs" />

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

@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
// </file>
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
@ -36,8 +37,13 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -36,8 +37,13 @@ namespace ICSharpCode.SharpDevelop.Dom
static void AddAttributes(IProjectContent pc, IList<IAttribute> list, CustomAttributeCollection attributes)
{
foreach (CustomAttribute att in attributes) {
DefaultAttribute a = new DefaultAttribute(att.Constructor.DeclaringType.FullName);
// TODO: add only attributes marked "important", and include attribute arguments
DefaultAttribute a = new DefaultAttribute(CreateType(pc, null, att.Constructor.DeclaringType));
foreach (object o in att.ConstructorParameters) {
a.PositionalArguments.Add(o);
}
foreach (DictionaryEntry entry in att.Properties) {
a.NamedArguments.Add(entry.Key.ToString(), entry.Value);
}
list.Add(a);
}
}
@ -127,6 +133,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -127,6 +133,7 @@ namespace ICSharpCode.SharpDevelop.Dom
AssemblyDefinition assembly, ProjectContentRegistry registry)
: base(fullName, fileName, referencedAssemblies, registry)
{
AddAttributes(this, this.AssemblyCompilationUnit.Attributes, assembly.CustomAttributes);
foreach (ModuleDefinition module in assembly.Modules) {
AddTypes(module.Types);
}

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

@ -152,12 +152,6 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -152,12 +152,6 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
[Obsolete()]
public static ResolveResult GetResultFromDeclarationLine(IClass callingClass, IMethodOrProperty callingMember, int caretLine, int caretColumn, string expression)
{
return GetResultFromDeclarationLine(callingClass, callingMember, caretLine, caretColumn, new ExpressionResult(expression));
}
public static ResolveResult GetResultFromDeclarationLine(IClass callingClass, IMethodOrProperty callingMember, int caretLine, int caretColumn, ExpressionResult expressionResult)
{
string expression = expressionResult.Expression;

32
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/AttributeReturnType.cs

@ -0,0 +1,32 @@ @@ -0,0 +1,32 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <author name="Daniel Grunwald"/>
// <version>$Revision$</version>
// </file>
using System;
namespace ICSharpCode.SharpDevelop.Dom
{
/// <summary>
/// Description of AttributeReturnType.
/// </summary>
public class AttributeReturnType : ProxyReturnType
{
string name;
public AttributeReturnType(string name)
{
this.name = name;
}
public override string Name {
get { return name; }
}
public override IReturnType BaseType {
get { return null; }
}
}
}

64
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/DefaultAttribute.cs

@ -14,65 +14,45 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -14,65 +14,45 @@ namespace ICSharpCode.SharpDevelop.Dom
{
public static readonly IList<IAttribute> EmptyAttributeList = new List<IAttribute>().AsReadOnly();
string name;
List<AttributeArgument> positionalArguments;
SortedList<string, AttributeArgument> namedArguments;
IReturnType attributeType;
IList<object> positionalArguments;
IDictionary<string, object> namedArguments;
AttributeTarget attributeTarget;
public DefaultAttribute(string name) : this(name, AttributeTarget.None) {}
public DefaultAttribute(IReturnType attributeType) : this(attributeType, AttributeTarget.None) {}
public DefaultAttribute(string name, AttributeTarget attributeTarget)
public DefaultAttribute(IReturnType attributeType, AttributeTarget attributeTarget)
: this(attributeType, attributeTarget, null, null)
{
this.name = name;
this.attributeTarget = attributeTarget;
this.positionalArguments = new List<AttributeArgument>();
this.namedArguments = new SortedList<string, AttributeArgument>();
}
public DefaultAttribute(string name, AttributeTarget attributeTarget, List<AttributeArgument> positionalArguments, SortedList<string, AttributeArgument> namedArguments)
public DefaultAttribute(IReturnType attributeType, AttributeTarget attributeTarget, IList<object> positionalArguments, IDictionary<string, object> namedArguments)
{
this.name = name;
if (attributeType == null)
throw new ArgumentNullException("attributeType");
this.attributeType = attributeType;
this.attributeTarget = attributeTarget;
this.positionalArguments = positionalArguments;
this.namedArguments = namedArguments;
}
public string Name {
get {
return name;
}
set {
name = value;
}
this.positionalArguments = positionalArguments ?? new List<object>();
this.namedArguments = namedArguments ?? new SortedList<string, object>();
}
public AttributeTarget AttributeTarget {
get {
return attributeTarget;
}
set {
attributeTarget = value;
}
}
public List<AttributeArgument> PositionalArguments {
get {
return positionalArguments;
}
public IReturnType AttributeType {
get { return attributeType; }
set { attributeType = value; }
}
public SortedList<string, AttributeArgument> NamedArguments {
get {
return namedArguments;
}
public AttributeTarget AttributeTarget {
get { return attributeTarget; }
set { attributeTarget = value; }
}
public virtual int CompareTo(IAttribute value) {
return Name.CompareTo(value.Name);
public IList<object> PositionalArguments {
get { return positionalArguments; }
}
int IComparable.CompareTo(object value) {
return CompareTo((IAttribute)value);
public IDictionary<string, object> NamedArguments {
get { return namedArguments; }
}
}
}

25
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/IAttribute.cs

@ -6,16 +6,25 @@ @@ -6,16 +6,25 @@
// </file>
using System;
using System.Collections.Generic;
namespace ICSharpCode.SharpDevelop.Dom
{
public interface IAttribute : IComparable
public interface IAttribute
{
AttributeTarget AttributeTarget {
get;
}
string Name {
IReturnType AttributeType {
get;
}
IList<object> PositionalArguments {
get;
}
IDictionary<string, object> NamedArguments {
get;
}
}
@ -33,16 +42,4 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -33,16 +42,4 @@ namespace ICSharpCode.SharpDevelop.Dom
Return,
Type
}
public struct AttributeArgument
{
public readonly IReturnType Type;
public readonly object Value;
public AttributeArgument(IReturnType type, object value)
{
this.Type = type;
this.Value = value;
}
}
}

8
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/LanguageProperties.cs

@ -332,13 +332,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -332,13 +332,7 @@ namespace ICSharpCode.SharpDevelop.Dom
public override bool ShowInNamespaceCompletion(IClass c)
{
foreach (IAttribute attr in c.Attributes) {
if (NameComparer.Equals(attr.Name, "Microsoft.VisualBasic.HideModuleNameAttribute"))
return false;
if (NameComparer.Equals(attr.Name, "HideModuleNameAttribute"))
return false;
if (NameComparer.Equals(attr.Name, "Microsoft.VisualBasic.HideModuleName"))
return false;
if (NameComparer.Equals(attr.Name, "HideModuleName"))
if (attr.AttributeType.FullyQualifiedName == "Microsoft.VisualBasic.HideModuleNameAttribute")
return false;
}
return base.ShowInNamespaceCompletion(c);

2
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryASTConvertVisitor.cs

@ -240,7 +240,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -240,7 +240,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
}
foreach (AST.Attribute attribute in section.Attributes) {
result.Add(new DefaultAttribute(attribute.Name, target));
result.Add(new DefaultAttribute(new AttributeReturnType(attribute.Name), target));
}
}
return result;

9
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs

@ -448,6 +448,15 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -448,6 +448,15 @@ namespace ICSharpCode.SharpDevelop.Dom
RemoveEmptyNamespace(parent); // remove parent if also empty
}
List<IAttribute> assemblyAttributes = new List<IAttribute>();
public virtual IList<IAttribute> GetAssemblyAttributes()
{
lock (namespaces) {
return assemblyAttributes.ToArray();
}
}
public void RemoveCompilationUnit(ICompilationUnit unit)
{
lock (namespaces) {

2
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/IProjectContent.cs

@ -70,6 +70,8 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -70,6 +70,8 @@ namespace ICSharpCode.SharpDevelop.Dom
get;
}
IList<IAttribute> GetAssemblyAttributes();
string GetXmlDocumentation(string memberTag);
void AddClassToNamespaceList(IClass addClass);

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

@ -46,6 +46,11 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -46,6 +46,11 @@ namespace ICSharpCode.SharpDevelop.Dom
get { return assemblyCompilationUnit; }
}
public override IList<IAttribute> GetAssemblyAttributes()
{
return assemblyCompilationUnit.Attributes;
}
DateTime assemblyFileLastWriteTime;
/// <summary>
@ -80,6 +85,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -80,6 +85,7 @@ namespace ICSharpCode.SharpDevelop.Dom
AddClassToNamespaceListInternal(new ReflectionClass(assemblyCompilationUnit, type, name, null));
}
}
ReflectionClass.AddAttributes(this, assemblyCompilationUnit.Attributes, CustomAttributeData.GetCustomAttributes(assembly));
InitializeSpecialClasses();
}

2
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/CodeGenerator.cs

@ -140,7 +140,7 @@ namespace ICSharpCode.SharpDevelop.Dom.Refactoring @@ -140,7 +140,7 @@ namespace ICSharpCode.SharpDevelop.Dom.Refactoring
{
AttributeSection sec = new AttributeSection(null, null);
foreach (IAttribute att in attributes) {
sec.Attributes.Add(new ICSharpCode.NRefactory.Ast.Attribute(att.Name, null, null));
sec.Attributes.Add(new ICSharpCode.NRefactory.Ast.Attribute(ConvertType(att.AttributeType, targetContext).Type, null, null));
}
List<AttributeSection> resultList = new List<AttributeSection>(1);
if (sec.Attributes.Count > 0)

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

@ -20,7 +20,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -20,7 +20,7 @@ namespace ICSharpCode.SharpDevelop.Dom
{
public const long FileMagic = 0x11635233ED2F428C;
public const long IndexFileMagic = 0x11635233ED2F427D;
public const short FileVersion = 11;
public const short FileVersion = 12;
ProjectContentRegistry registry;
string cacheDirectory;
@ -297,6 +297,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -297,6 +297,7 @@ namespace ICSharpCode.SharpDevelop.Dom
void WriteClasses()
{
ICollection<IClass> classes = pc.Classes;
IList<IAttribute> assemblyAttributes = pc.GetAssemblyAttributes();
classIndices.Clear();
stringDict.Clear();
@ -309,6 +310,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -309,6 +310,7 @@ namespace ICSharpCode.SharpDevelop.Dom
List<ClassNameTypeCountPair> externalTypes = new List<ClassNameTypeCountPair>();
List<string> stringList = new List<string>();
CreateExternalTypeList(externalTypes, stringList, classes.Count, classes);
AddStringsAndExternalTypesFromAttributes(stringList, externalTypes, classes.Count, assemblyAttributes);
writer.Write(classes.Count);
writer.Write(externalTypes.Count);
@ -323,6 +325,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -323,6 +325,7 @@ namespace ICSharpCode.SharpDevelop.Dom
foreach (string text in stringList) {
writer.Write(text);
}
WriteAttributes(assemblyAttributes);
foreach (IClass c in classes) {
WriteClass(c);
// BinaryReader easily reads junk data when the file does not have the
@ -350,6 +353,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -350,6 +353,7 @@ namespace ICSharpCode.SharpDevelop.Dom
for (int i = 0; i < stringArray.Length; i++) {
stringArray[i] = reader.ReadString();
}
ReadAttributes(pc.AssemblyCompilationUnit);
for (int i = 0; i < classes.Length; i++) {
ReadClass(classes[i]);
pc.AddClassToNamespaceList(classes[i]);
@ -485,7 +489,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -485,7 +489,7 @@ namespace ICSharpCode.SharpDevelop.Dom
{
foreach (IClass c in classes) {
CreateExternalTypeList(externalTypes, stringList, classCount, c.InnerClasses);
AddStrings(stringList, c.Attributes);
AddStringsAndExternalTypesFromAttributes(stringList, externalTypes, classCount, c.Attributes);
foreach (IReturnType returnType in c.BaseTypes) {
AddExternalType(returnType, externalTypes, classCount);
}
@ -505,7 +509,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -505,7 +509,7 @@ namespace ICSharpCode.SharpDevelop.Dom
CreateExternalTypeListMember(externalTypes, stringList, classCount, p);
foreach (IParameter parameter in p.Parameters) {
AddString(stringList, parameter.Name);
AddStrings(stringList, parameter.Attributes);
AddStringsAndExternalTypesFromAttributes(stringList, externalTypes, classCount, parameter.Attributes);
AddExternalType(parameter.ReturnType, externalTypes, classCount);
}
}
@ -513,7 +517,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -513,7 +517,7 @@ namespace ICSharpCode.SharpDevelop.Dom
CreateExternalTypeListMember(externalTypes, stringList, classCount, m);
foreach (IParameter parameter in m.Parameters) {
AddString(stringList, parameter.Name);
AddStrings(stringList, parameter.Attributes);
AddStringsAndExternalTypesFromAttributes(stringList, externalTypes, classCount, parameter.Attributes);
AddExternalType(parameter.ReturnType, externalTypes, classCount);
}
foreach (ITypeParameter tp in m.TypeParameters) {
@ -531,7 +535,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -531,7 +535,7 @@ namespace ICSharpCode.SharpDevelop.Dom
IMember member)
{
AddString(stringList, member.Name);
AddStrings(stringList, member.Attributes);
AddStringsAndExternalTypesFromAttributes(stringList, externalTypes, classCount, member.Attributes);
foreach (ExplicitInterfaceImplementation eii in member.InterfaceImplementations) {
AddString(stringList, eii.MemberName);
AddExternalType(eii.InterfaceReference, externalTypes, classCount);
@ -689,20 +693,44 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -689,20 +693,44 @@ namespace ICSharpCode.SharpDevelop.Dom
#endregion
#region Write/Read attributes
void AddStringsAndExternalTypesFromAttributes(List<string> stringList,
List<ClassNameTypeCountPair> externalTypes, int classCount,
IList<IAttribute> attributes)
{
foreach (IAttribute a in attributes) {
AddExternalType(a.AttributeType, externalTypes, classCount);
foreach (object o in a.PositionalArguments) {
AddStringsAndExternalTypesFromAttributeArgument(stringList, attributes, externalTypes, classCount, o);
}
foreach (KeyValuePair<string, object> pair in a.NamedArguments) {
AddString(stringList, pair.Key);
AddStringsAndExternalTypesFromAttributeArgument(stringList, attributes, externalTypes, classCount, pair.Value);
}
}
}
void WriteAttributes(IList<IAttribute> attributes)
{
writer.Write((ushort)attributes.Count);
foreach (IAttribute a in attributes) {
WriteString(a.Name);
WriteType(a.AttributeType);
writer.Write((byte)a.AttributeTarget);
writer.Write((byte)a.PositionalArguments.Count);
foreach (object o in a.PositionalArguments) {
WriteAttributeArgument(o);
}
writer.Write((byte)a.NamedArguments.Count);
foreach (KeyValuePair<string, object> pair in a.NamedArguments) {
WriteString(pair.Key);
WriteAttributeArgument(pair.Value);
}
}
}
void AddStrings(List<string> stringList, IList<IAttribute> attributes)
void ReadAttributes(ICompilationUnit cu)
{
foreach (IAttribute a in attributes) {
AddString(stringList, a.Name);
}
int count = reader.ReadUInt16();
ReadAttributes(cu.Attributes, count);
}
void ReadAttributes(DefaultParameter parameter)
@ -728,8 +756,80 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -728,8 +756,80 @@ namespace ICSharpCode.SharpDevelop.Dom
void ReadAttributes(IList<IAttribute> attributes, int count)
{
for (int i = 0; i < count; i++) {
string name = ReadString();
attributes.Add(new DefaultAttribute(name, (AttributeTarget)reader.ReadByte()));
IReturnType type = ReadType();
DefaultAttribute attr = new DefaultAttribute(type, (AttributeTarget)reader.ReadByte());
int posArgCount = reader.ReadByte();
for (int j = 0; j < posArgCount; j++) {
attr.PositionalArguments.Add(ReadAttributeArgument());
}
int namedArgCount = reader.ReadByte();
for (int j = 0; j < namedArgCount; j++) {
attr.NamedArguments.Add(ReadString(), ReadAttributeArgument());
}
attributes.Add(attr);
}
}
#endregion
#region Write/Read attribute arguments
void AddStringsAndExternalTypesFromAttributeArgument(List<string> stringList, IList<IAttribute> attributes,
List<ClassNameTypeCountPair> externalTypes, int classCount,
object value)
{
if (value is string) {
AddString(stringList, (string)value);
} else if (value is IReturnType) {
AddExternalType((IReturnType)value, externalTypes, classCount);
}
}
enum AttributeType : byte
{
Null,
String,
Type,
Int32,
Bool
}
void WriteAttributeArgument(object o)
{
if (o == null) {
writer.Write((byte)AttributeType.Null);
} else if (o is string) {
writer.Write((byte)AttributeType.String);
WriteString((string)o);
} else if (o is IReturnType) {
writer.Write((byte)AttributeType.Type);
WriteType((IReturnType)o);
} else if (o is int) {
writer.Write((byte)AttributeType.Int32);
writer.Write((int)o);
} else if (o is bool) {
writer.Write((byte)AttributeType.Bool);
writer.Write((bool)o);
} else {
writer.Write((byte)AttributeType.Null);
LoggingService.Warn("Cannot write attribute arguments of type " + o.GetType());
}
}
object ReadAttributeArgument()
{
byte type = reader.ReadByte();
switch ((AttributeType)type) {
case AttributeType.Null:
return null;
case AttributeType.String:
return ReadString();
case AttributeType.Type:
return ReadType();
case AttributeType.Int32:
return reader.ReadInt32();
case AttributeType.Bool:
return reader.ReadBoolean();
default:
throw new NotSupportedException("Invalid attribute argument type code " + type);
}
}
#endregion

21
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/ReflectionClass.cs

@ -65,24 +65,31 @@ namespace ICSharpCode.SharpDevelop.Dom.ReflectionLayer @@ -65,24 +65,31 @@ namespace ICSharpCode.SharpDevelop.Dom.ReflectionLayer
internal static void AddAttributes(IProjectContent pc, IList<IAttribute> list, IList<CustomAttributeData> attributes)
{
foreach (CustomAttributeData att in attributes) {
DefaultAttribute a = new DefaultAttribute(att.Constructor.DeclaringType.FullName);
DefaultAttribute a = new DefaultAttribute(ReflectionReturnType.Create(pc, null, att.Constructor.DeclaringType, false));
foreach (CustomAttributeTypedArgument arg in att.ConstructorArguments) {
IReturnType type = ReflectionReturnType.Create(pc, null, arg.ArgumentType, false);
a.PositionalArguments.Add(new AttributeArgument(type, arg.Value));
a.PositionalArguments.Add(ReplaceTypeByIReturnType(pc, arg.Value));
}
foreach (CustomAttributeNamedArgument arg in att.NamedArguments) {
IReturnType type = ReflectionReturnType.Create(pc, null, arg.TypedValue.ArgumentType, false);
a.NamedArguments.Add(arg.MemberInfo.Name, new AttributeArgument(type, arg.TypedValue.Value));
a.NamedArguments.Add(arg.MemberInfo.Name, ReplaceTypeByIReturnType(pc, arg.TypedValue.Value));
}
list.Add(a);
}
}
static object ReplaceTypeByIReturnType(IProjectContent pc, object val)
{
if (val is Type) {
return ReflectionReturnType.Create(pc, null, (Type)val, false);
} else {
return val;
}
}
internal static void ApplySpecialsFromAttributes(DefaultClass c)
{
foreach (IAttribute att in c.Attributes) {
if (att.Name == "Microsoft.VisualBasic.CompilerServices.StandardModuleAttribute"
|| att.Name == "System.Runtime.CompilerServices.CompilerGlobalScopeAttribute")
if (att.AttributeType.FullyQualifiedName == "Microsoft.VisualBasic.CompilerServices.StandardModuleAttribute"
|| att.AttributeType.FullyQualifiedName == "System.Runtime.CompilerServices.CompilerGlobalScopeAttribute")
{
c.ClassType = ClassType.Module;
break;

2
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/ReflectionMethod.cs

@ -16,7 +16,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ReflectionLayer @@ -16,7 +16,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ReflectionLayer
{
if (m.IsStatic) {
foreach (IAttribute a in m.Attributes) {
string attributeName = a.Name;
string attributeName = a.AttributeType.FullyQualifiedName;
if (attributeName == "System.Runtime.CompilerServices.ExtensionAttribute"
|| attributeName == "Boo.Lang.ExtensionAttribute")
{

9
src/SharpDevelop.sln

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
# SharpDevelop 3.0.0.2456
# SharpDevelop 2.2.0.2560
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
@ -46,6 +46,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Backends", "Backends", "{FE @@ -46,6 +46,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Backends", "Backends", "{FE
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding", "AddIns\BackendBindings\XamlBinding\Project\XamlBinding.csproj", "{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}"
EndProject
Project("{A33008B1-5DAC-44D5-9060-242E3B6E38F2}") = "Boo.InterpreterAddIn", "AddIns\BackendBindings\Boo\Boo.InterpreterAddIn\Project\Boo.InterpreterAddIn.booproj", "{928E34B2-5E46-4A4D-8E4D-2CA2CCDB905A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding", "AddIns\BackendBindings\WixBinding\Project\WixBinding.csproj", "{e1b288a2-08ee-4318-8bbb-8ab72c69e33e}"
@ -462,6 +464,10 @@ Global @@ -462,6 +464,10 @@ Global
{87C0E3D9-0DFD-4F6D-8E38-408AAF73F4EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{87C0E3D9-0DFD-4F6D-8E38-408AAF73F4EE}.Release|Any CPU.Build.0 = Release|Any CPU
{87C0E3D9-0DFD-4F6D-8E38-408AAF73F4EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Release|Any CPU.Build.0 = Release|Any CPU
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
@ -488,6 +494,7 @@ Global @@ -488,6 +494,7 @@ Global
{DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{e1b288a2-08ee-4318-8bbb-8ab72c69e33e} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{928E34B2-5E46-4A4D-8E4D-2CA2CCDB905A} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{4B8F0F98-8BE1-402B-AA8B-C8D548577B38} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{64A3E5E6-90BF-47F6-94DF-68C94B62C817} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}

Loading…
Cancel
Save