Browse Source

worked on Resolver

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@52 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Mike Krüger 22 years ago
parent
commit
e2f9a5867e
  1. 1
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  2. 4
      src/Main/Base/Project/Src/Dom/IParameter.cs
  3. 8
      src/Main/Base/Project/Src/Dom/Implementations/AbstractParameter.cs
  4. 29
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/FilePosition.cs
  5. 6
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryASTConvertVisitor.cs
  6. 101
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
  7. 3
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/Parameter.cs
  8. 76
      src/SharpDevelop.sln

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

@ -615,6 +615,7 @@ @@ -615,6 +615,7 @@
<Compile Include="Src\Project\AbstractProject.cs" />
<Compile Include="Src\Dom\XmlDoc.cs" />
<Compile Include="Src\Services\ParserService\ProjectContentRegistry.cs" />
<Compile Include="Src\Dom\NRefactoryResolver\FilePosition.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj">

4
src/Main/Base/Project/Src/Dom/IParameter.cs

@ -29,6 +29,10 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -29,6 +29,10 @@ namespace ICSharpCode.SharpDevelop.Dom
get;
}
IRegion Region {
get;
}
string Documentation {
get;
}

8
src/Main/Base/Project/Src/Dom/Implementations/AbstractParameter.cs

@ -22,8 +22,16 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -22,8 +22,16 @@ namespace ICSharpCode.SharpDevelop.Dom
protected IReturnType returnType;
protected ParameterModifier modifier;
protected IRegion region;
List<IAttribute> attributes;
public IRegion Region {
get {
return region;
}
}
public bool IsOut {
get {
return (modifier & ParameterModifier.Out) == ParameterModifier.Out;

29
src/Main/Base/Project/Src/Dom/NRefactoryResolver/FilePosition.cs

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
/*
* Created by SharpDevelop.
* User: Omnibrain
* Date: 20.01.2005
* Time: 16:07
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Drawing;
namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
{
/// <summary>
/// Description of SearchDefinition.
/// </summary>
public class FilePosition
{
string filename = "";
Point position = new Point(0, 0);
public FilePosition(string filename, Point position)
{
this.filename = filename;
this.position = position;
}
}
}

6
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryASTConvertVisitor.cs

@ -224,7 +224,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -224,7 +224,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
if (methodDeclaration.Parameters != null) {
foreach (AST.ParameterDeclarationExpression par in methodDeclaration.Parameters) {
ReturnType parType = new ReturnType(par.TypeReference);
Parameter p = new Parameter(par.ParameterName, parType);
Parameter p = new Parameter(par.ParameterName, parType, new DefaultRegion(par.StartLocation, methodDeclaration.Body.EndLocation));
parameters.Add(p);
}
}
@ -245,7 +245,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -245,7 +245,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
if (constructorDeclaration.Parameters != null) {
foreach (AST.ParameterDeclarationExpression par in constructorDeclaration.Parameters) {
ReturnType parType = new ReturnType(par.TypeReference);
Parameter p = new Parameter(par.ParameterName, parType);
Parameter p = new Parameter(par.ParameterName, parType, new DefaultRegion(par.StartLocation, constructorDeclaration.Body.EndLocation));
parameters.Add(p);
}
}
@ -334,7 +334,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -334,7 +334,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
if (indexerDeclaration.Parameters != null) {
foreach (AST.ParameterDeclarationExpression par in indexerDeclaration.Parameters) {
ReturnType parType = new ReturnType(par.TypeReference);
Parameter p = new Parameter(par.ParameterName, parType);
Parameter p = new Parameter(par.ParameterName, parType, new DefaultRegion(par.StartLocation, indexerDeclaration.EndLocation));
parameters.Add(p);
}
}

101
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs

@ -33,6 +33,12 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -33,6 +33,12 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
int caretLine;
int caretColumn;
public SupportedLanguages Language {
get {
return language;
}
}
public IProjectContent ProjectContent {
get {
return projectContent;
@ -306,7 +312,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -306,7 +312,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
bool InStatic()
{
IProperty property = Get();
IProperty property = GetProperty();
if (property != null) {
return property.IsStatic;
}
@ -471,29 +477,32 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -471,29 +477,32 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return between.Y < end.Y || between.X <= end.X;
}
IReturnType SearchVariable(string name)
LocalLookupVariable SearchVariable(string name)
{
ArrayList variables = (ArrayList)lookupTableVisitor.variables[IsCaseSensitive(language) ? name : name.ToLower()];
if (variables == null || variables.Count <= 0) {
return null;
}
IReturnType found = null;
foreach (LocalLookupVariable v in variables) {
if (IsInside(new Point(caretColumn, caretLine), v.StartPos, v.EndPos)) {
IClass c = SearchType(v.TypeRef.SystemType, callingClass, cu);
if (c != null) {
found = new ReturnType(c.FullyQualifiedName, v.TypeRef.RankSpecifier, v.TypeRef.PointerNestingLevel);
} else {
found = new ReturnType(v.TypeRef);
return v;
}
break;
}
return null;
}
if (found == null) {
IReturnType GetVariableType(LocalLookupVariable v)
{
if (v == null) {
return null;
}
return found;
IClass c = SearchType(v.TypeRef.SystemType, callingClass, cu);
if (c != null) {
return new ReturnType(c.FullyQualifiedName, v.TypeRef.RankSpecifier, v.TypeRef.PointerNestingLevel);
} else {
return new ReturnType(v.TypeRef);
}
}
/// <remarks>
@ -502,7 +511,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -502,7 +511,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
public IReturnType DynamicLookup(string typeName)
{
// try if it exists a variable named typeName
IReturnType variable = SearchVariable(typeName);
IReturnType variable = GetVariableType(SearchVariable(typeName));
if (variable != null) {
showStatic = false;
return variable;
@ -513,18 +522,18 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -513,18 +522,18 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
}
// try if typeName is a method parameter
IReturnType p = SearchMethodParameter(typeName);
if (p != null) {
IParameter parameter = SearchMethodParameter(typeName);
if (parameter != null) {
showStatic = false;
return p;
return parameter.ReturnType;
}
// check if typeName == value in set method of a property
if (typeName == "value") {
p = SearchProperty();
if (p != null) {
IProperty property = GetProperty();
if (property != null && property.SetterRegion != null && property.SetterRegion.IsInside(caretLine, caretColumn)) {
showStatic = false;
return p;
return property.ReturnType;
}
}
@ -579,7 +588,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -579,7 +588,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return null;
}
IProperty Get()
IProperty GetProperty()
{
foreach (IProperty property in callingClass.Properties) {
if (property.BodyRegion != null && property.BodyRegion.IsInside(caretLine, caretColumn)) {
@ -599,19 +608,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -599,19 +608,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return null;
}
IReturnType SearchProperty()
{
IProperty property = Get();
if (property == null) {
return null;
}
if (property.SetterRegion != null && property.SetterRegion.IsInside(caretLine, caretColumn)) {
return property.ReturnType;
}
return null;
}
IReturnType SearchMethodParameter(string parameter)
IParameter SearchMethodParameter(string parameter)
{
IMethod method = GetMethod(caretLine, caretColumn);
if (method == null) {
@ -619,7 +616,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -619,7 +616,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
}
foreach (IParameter p in method.Parameters) {
if (IsSameName(p.Name, parameter)) {
return p.ReturnType;
return p;
}
}
return null;
@ -664,6 +661,44 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -664,6 +661,44 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return projectContent.SearchType(name, curType, unit, caretLine, caretColumn);
}
public FilePosition SearchDefinition(string expression,
int caretLineNumber,
int caretColumn,
string fileName)
{
ICSharpCode.NRefactory.Parser.IParser p = ICSharpCode.NRefactory.Parser.ParserFactory.CreateParser(language, new System.IO.StringReader(expression));
Expression expr = p.ParseExpression();
ParseInformation parseInfo = ParserService.GetParseInformation(fileName);
if (parseInfo == null) {
return null;
}
if (expr is IdentifierExpression) {
ICSharpCode.NRefactory.Parser.AST.CompilationUnit fileCompilationUnit = parseInfo.MostRecentCompilationUnit.Tag as ICSharpCode.NRefactory.Parser.AST.CompilationUnit;
lookupTableVisitor = new LookupTableVisitor();
lookupTableVisitor.Visit(fileCompilationUnit, null);
// try if it exists a variable named typeName
LocalLookupVariable variable = SearchVariable(expression);
if (variable != null) {
return new FilePosition(fileName, variable.StartPos);
}
if (callingClass == null) {
return null;
}
// try if typeName is a method parameter
IParameter parameter = SearchMethodParameter(expression);
if (parameter != null) {
return new FilePosition(fileName, new Point(parameter.Region.BeginLine, parameter.Region.BeginColumn));
}
}
NRefactoryASTConvertVisitor cSharpVisitor = new NRefactoryASTConvertVisitor(parseInfo.MostRecentCompilationUnit != null ? parseInfo.MostRecentCompilationUnit.ProjectContent : null);
return null;
}
public ArrayList NewCompletion(int caretLine, int caretColumn, string fileName)
{
if (!IsCaseSensitive(language)) {

3
src/Main/Base/Project/Src/Dom/NRefactoryResolver/Parameter.cs

@ -6,10 +6,11 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -6,10 +6,11 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
{
public class Parameter : AbstractParameter
{
public Parameter(string name, ReturnType type)
public Parameter(string name, ReturnType type, IRegion region)
{
Name = name;
returnType = type;
this.region = region;
}
}
}

76
src/SharpDevelop.sln

@ -1,5 +1,33 @@ @@ -1,5 +1,33 @@
Microsoft Visual Studio Solution File, Format Version 9.00
# SharpDevelop 2.0.0.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{5A3EBEBA-0560-41C1-966B-23F7D03A5486}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Tests", "Main\Core\Test\ICSharpCode.Core.Tests.csproj", "{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9421EDF4-9769-4BE9-B5A6-C87DE221D73C}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.framework.dll", "Tools\NUnit\src\NUnitFramework\framework\nunit.framework.dll.csproj", "{83DD7E12-A705-4DBA-9D71-09C8973D9382}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.core.dll", "Tools\NUnit\src\NUnitFramework\core\nunit.core.dll.csproj", "{EBD43A7F-AFCA-4281-BB53-5CDD91F966A3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinFormsUI", "Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj", "{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.extensions.dll", "Tools\NUnit\src\NUnitFramework\extensions\nunit.extensions.dll.csproj", "{98B10E98-003C-45A0-9587-119142E39986}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
@ -46,34 +74,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "AddIns\Misc\St @@ -46,34 +74,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "AddIns\Misc\St
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9421EDF4-9769-4BE9-B5A6-C87DE221D73C}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.framework.dll", "Tools\NUnit\src\NUnitFramework\framework\nunit.framework.dll.csproj", "{83DD7E12-A705-4DBA-9D71-09C8973D9382}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.core.dll", "Tools\NUnit\src\NUnitFramework\core\nunit.core.dll.csproj", "{EBD43A7F-AFCA-4281-BB53-5CDD91F966A3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinFormsUI", "Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj", "{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit.extensions.dll", "Tools\NUnit\src\NUnitFramework\extensions\nunit.extensions.dll.csproj", "{98B10E98-003C-45A0-9587-119142E39986}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{5A3EBEBA-0560-41C1-966B-23F7D03A5486}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Tests", "Main\Core\Test\ICSharpCode.Core.Tests.csproj", "{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -155,6 +155,16 @@ Global @@ -155,6 +155,16 @@ Global
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{98B10E98-003C-45A0-9587-119142E39986} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{EBD43A7F-AFCA-4281-BB53-5CDD91F966A3} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{83DD7E12-A705-4DBA-9D71-09C8973D9382} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
@ -172,15 +182,5 @@ Global @@ -172,15 +182,5 @@ Global
{B08385CD-F0CC-488C-B4F4-EEB34B6D2688} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{98B10E98-003C-45A0-9587-119142E39986} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{EBD43A7F-AFCA-4281-BB53-5CDD91F966A3} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{83DD7E12-A705-4DBA-9D71-09C8973D9382} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
EndGlobalSection
EndGlobal

Loading…
Cancel
Save