Browse Source

Fixed conversion of inner class type references to CodeDom.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@5298 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Daniel Grunwald 16 years ago
parent
commit
b87a337213
  1. 2
      src/Libraries/NRefactory/Project/Src/Ast/TypeReference.cs
  2. 22
      src/Libraries/NRefactory/Project/Src/Visitors/CodeDOMOutputVisitor.cs
  3. 8
      src/Libraries/NRefactory/Test/NRefactoryTests.csproj
  4. 10
      src/Libraries/NRefactory/Test/NRefactoryTests.csproj.user
  5. 33
      src/Libraries/NRefactory/Test/Output/CodeDOM/CodeDOMTypeReferenceTest.cs

2
src/Libraries/NRefactory/Project/Src/Ast/TypeReference.cs

@ -439,7 +439,7 @@ namespace ICSharpCode.NRefactory.Ast @@ -439,7 +439,7 @@ namespace ICSharpCode.NRefactory.Ast
public override string ToString()
{
return "[InnerClassTypeReference: (" + baseType.ToString() + ")." + base.ToString() + "]";
return baseType.ToString() + "+" + base.ToString();
}
}
}

22
src/Libraries/NRefactory/Project/Src/Visitors/CodeDOMOutputVisitor.cs

@ -78,7 +78,21 @@ namespace ICSharpCode.NRefactory.Visitors @@ -78,7 +78,21 @@ namespace ICSharpCode.NRefactory.Visitors
variables.Clear();
parameters.Clear();
}
string GetDotNetNameFromTypeReference(TypeReference type)
{
string name;
InnerClassTypeReference ictr = type as InnerClassTypeReference;
if (ictr != null) {
name = GetDotNetNameFromTypeReference(ictr.BaseType) + "+" + ictr.Type;
} else {
name = type.Type;
}
if (type.GenericTypes.Count != 0)
name = name + "`" + type.GenericTypes.Count.ToString();
return name;
}
CodeTypeReference ConvType(TypeReference type)
{
if (type == null) {
@ -88,7 +102,11 @@ namespace ICSharpCode.NRefactory.Visitors @@ -88,7 +102,11 @@ namespace ICSharpCode.NRefactory.Visitors
throw new InvalidOperationException("empty type");
}
CodeTypeReference t = new CodeTypeReference(type.Type);
CodeTypeReference t = new CodeTypeReference(GetDotNetNameFromTypeReference(type));
InnerClassTypeReference ictr = type as InnerClassTypeReference;
if (ictr != null) {
type = ictr.CombineToNormalTypeReference();
}
foreach (TypeReference gt in type.GenericTypes) {
t.TypeArguments.Add(ConvType(gt));
}

8
src/Libraries/NRefactory/Test/NRefactoryTests.csproj

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@ -16,6 +17,7 @@ @@ -16,6 +17,7 @@
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
<PlatformTarget>AnyCPU</PlatformTarget>
<WarningLevel>4</WarningLevel>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
@ -41,6 +43,9 @@ @@ -41,6 +43,9 @@
<HintPath>..\..\..\Tools\NUnit\nunit.framework.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
@ -48,6 +53,7 @@ @@ -48,6 +53,7 @@
<Compile Include="General\UnitTest.cs" />
<Compile Include="Lexer\CSharp\PreprocessingTests.cs" />
<Compile Include="Lexer\VBNet\CustomLexerTests.cs" />
<Compile Include="Output\CodeDOM\CodeDOMTypeReferenceTest.cs" />
<Compile Include="Parser\CheckParentVisitor.cs" />
<Compile Include="Parser\Expressions\AddressOfExpressionTests.cs" />
<Compile Include="Parser\Expressions\LambdaExpressionTests.cs" />

10
src/Libraries/NRefactory/Test/NRefactoryTests.csproj.user

@ -1,10 +0,0 @@ @@ -1,10 +0,0 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<LastOpenVersion>8.0.50215</LastOpenVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<StartAction>Program</StartAction>
<StartProgram>D:\Corsavy\SharpDevelop\bin\SharpDevelop.exe</StartProgram>
<StartArguments>D:\Corsavy\SharpDevelop\src\Libraries\NRefactory\NRefactory.sln</StartArguments>
</PropertyGroup>
</Project>

33
src/Libraries/NRefactory/Test/Output/CodeDOM/CodeDOMTypeReferenceTest.cs

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using System.CodeDom;
using ICSharpCode.NRefactory.Ast;
using ICSharpCode.NRefactory.Visitors;
using NUnit.Framework;
namespace ICSharpCode.NRefactory.Tests.Output.CodeDOM.Tests
{
[TestFixture]
public class CodeDOMTypeReferenceTest
{
[TestAttribute]
public void InnerClassTypeReferencTest()
{
InnerClassTypeReference ictr = new InnerClassTypeReference(
new TypeReference("OuterClass", new List<TypeReference> { new TypeReference("String") }),
"InnerClass",
new List<TypeReference> { new TypeReference("Int32"), new TypeReference("Int64") });
Assert.AreEqual("OuterClass<String>+InnerClass<Int32,Int64>", ictr.ToString());
CodeTypeOfExpression result = (CodeTypeOfExpression)new TypeOfExpression(ictr).AcceptVisitor(new CodeDomVisitor(), null);
Assert.AreEqual("OuterClass`1+InnerClass`2", result.Type.BaseType);
Assert.AreEqual(3, result.Type.TypeArguments.Count);
}
}
}
Loading…
Cancel
Save