1
0
mirror of https://github.com/twiglet/cs2j.git synced 2025-01-18 13:15:17 +01:00

Build type strings via TypeHelper.buildTypeName so that we handle generic types better (note: delegate types such as Action<> seem broken)

This commit is contained in:
Kevin Glynn 2010-10-15 16:34:00 +02:00
parent 0bf8cc9aed
commit 613e11c377
5 changed files with 46 additions and 25 deletions

View File

@ -15,17 +15,14 @@
<File FileName="src/cs2j/CLR/TypeRep.cs" Line="146" Column="45" />
<File FileName="src/cs2j/CLR/cs2j.cs" Line="231" Column="56" />
<File FileName="cs2jTest/TranslationTemplate.cs" Line="22" Column="1" />
<File FileName="src/cs2j/TemplateUtils/TemplateFromDLL.cs" Line="182" Column="1" />
<File FileName="src/NDesk.Options/Options.cs" Line="693" Column="29" />
<File FileName="src/cs2jTemplateGen/Main.cs" Line="80" Column="32" />
<File FileName="src/NDesk.Options/Options.cs" Line="261" Column="27" />
<File FileName="src/cs2jTemplateGen/Main.cs" Line="222" Column="5" />
<File FileName="../antlr2/Translator/Main.cs" Line="289" Column="1" />
</Files>
<Pads>
<Pad Id="ProjectPad">
<State expanded="True">
<Node name="cs2j" expanded="True">
<Node name="References" expanded="True" />
<Node name="CSharp" expanded="True" />
</Node>
<Node name="cs2j" expanded="True" />
<Node name="cs2jTemplateGen" expanded="True" selected="True" />
<Node name="NDesk.Options" expanded="True" />
</State>
@ -34,7 +31,9 @@
<State expanded="True" selected="True" />
</Pad>
<Pad Id="MonoDevelop.Debugger.WatchPad">
<State />
<State>
<Value>t</Value>
</State>
</Pad>
<Pad Id="ConnectionManagerPad">
<State selected="True" />
@ -47,7 +46,6 @@
<MonoDevelop.Ide.DebuggingService.Breakpoints>
<BreakpointStore>
<Breakpoint file="/Users/keving/gitrepos/cs2j/CSharpTranslator/antlr3/src/cs2j/TestFramework/TestFramework.cs" line="27" />
<Breakpoint file="/Users/keving/gitrepos/cs2j/CSharpTranslator/antlr3/src/cs2jTemplateGen/Main.cs" line="199" />
</BreakpointStore>
</MonoDevelop.Ide.DebuggingService.Breakpoints>
<MonoDevelop.Ide.DebuggingService.PinnedWatches ctype="PinnedWatchStore" />

View File

@ -0,0 +1,25 @@
using System;
using System.Text;
namespace cs2j
{
public static class TypeHelper
{
public static string buildTypeName(Type t) {
StringBuilder typeName = new StringBuilder();
if (t.IsGenericType) {
typeName.Append(t.GetGenericTypeDefinition().FullName + "[");
foreach(Type a in t.GetGenericArguments()) {
typeName.Append(buildTypeName(a) + ",");
}
typeName.Remove(typeName.Length - 1,1);
typeName.Append("]");
}
else {
typeName.Append(t.FullName);
}
return typeName.ToString();
}
}
}

View File

@ -65,6 +65,7 @@
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Utils\DirectoryHT.cs" />
<Compile Include="Utils\Constants.cs" />
<Compile Include="Utils\TypeHelper.cs" />
</ItemGroup>
<ItemGroup>
<None Include="CSharp\SignatureExtracter.g" />
@ -115,7 +116,4 @@
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Folder Include="TemplateUtils\" />
</ItemGroup>
</Project>

View File

@ -35,32 +35,32 @@ namespace cs2j.Template.Utils
Console.WriteLine ("Enums:");
foreach (Type item in exportedTypes) {
if (item.IsEnum) {
Console.WriteLine (" * " + item.FullName);
Console.WriteLine (" * " + TypeHelper.buildTypeName(item));
}
}
Console.WriteLine ("Interfaces:");
foreach (Type item in exportedTypes) {
if (item.IsInterface) {
Console.WriteLine (" * " + item.FullName);
Console.WriteLine (" * " + TypeHelper.buildTypeName(item));
}
}
Console.WriteLine ("Classes:");
foreach (Type item in exportedTypes) {
if (item.IsClass) {
Console.WriteLine (" * " + item.FullName);
Console.WriteLine (" * " + TypeHelper.buildTypeName(item));
}
}
Console.WriteLine ("Arrays:");
foreach (Type item in exportedTypes) {
if (item.IsArray) {
Console.WriteLine (" * " + item.FullName);
Console.WriteLine (" * " + TypeHelper.buildTypeName(item));
}
}
Console.WriteLine ("Others:");
foreach (Type item in exportedTypes) {
if (!item.IsEnum && !item.IsInterface && !item.IsClass && !item.IsArray) {
Console.WriteLine (" * " + item.FullName);
Console.WriteLine (" * " + TypeHelper.buildTypeName(item));
}
}
@ -69,7 +69,7 @@ namespace cs2j.Template.Utils
private void buildParameters(ConstructorRepTemplate c, MethodBase m) {
foreach (ParameterInfo p in m.GetParameters()) {
ParamRepTemplate paramRep = new ParamRepTemplate();
paramRep.Type = p.ParameterType.FullName;
paramRep.Type = TypeHelper.buildTypeName(p.ParameterType);
paramRep.Name = p.Name;
c.Params.Add(paramRep);
}
@ -77,12 +77,12 @@ namespace cs2j.Template.Utils
private void buildInterface(InterfaceRepTemplate iface, Type t) {
iface.TypeName = t.FullName;
iface.TypeName = TypeHelper.buildTypeName(t);
// Grab Methods
foreach (MethodInfo m in t.GetMethods()) {
MethodRepTemplate methRep = new MethodRepTemplate();
methRep.Name = m.Name;
methRep.Return = m.ReturnType.FullName;
methRep.Return = TypeHelper.buildTypeName(m.ReturnType);
buildParameters(methRep, m);
iface.Methods.Add(methRep);
}
@ -91,7 +91,7 @@ namespace cs2j.Template.Utils
foreach (PropertyInfo p in t.GetProperties()) {
PropRepTemplate propRep = new PropRepTemplate();
propRep.Name = p.Name;
propRep.Type = p.PropertyType.FullName;
propRep.Type = TypeHelper.buildTypeName(p.PropertyType);
iface.Properties.Add(propRep);
}
@ -99,7 +99,7 @@ namespace cs2j.Template.Utils
foreach (EventInfo e in t.GetEvents()) {
FieldRepTemplate eventRep = new FieldRepTemplate();
eventRep.Name = e.Name;
eventRep.Type = e.EventHandlerType.FullName;
eventRep.Type = TypeHelper.buildTypeName(e.EventHandlerType);
iface.Events.Add(eventRep);
}
}
@ -117,7 +117,7 @@ namespace cs2j.Template.Utils
foreach (FieldInfo f in t.GetFields()) {
FieldRepTemplate fieldRep = new FieldRepTemplate();
fieldRep.Name = f.Name;
fieldRep.Type = f.FieldType.FullName;
fieldRep.Type = TypeHelper.buildTypeName(f.FieldType);
klass.Fields.Add(fieldRep);
}
@ -139,7 +139,7 @@ namespace cs2j.Template.Utils
}
else if (t.IsEnum) {
EnumRepTemplate enumRep = new EnumRepTemplate();
enumRep.TypeName = t.FullName;
enumRep.TypeName = TypeHelper.buildTypeName(t);
foreach (FieldInfo f in t.GetFields(BindingFlags.Public | BindingFlags.Static)) {
enumRep.Members.Add(new EnumMemberRepTemplate(f.Name, f.GetRawConstantValue().ToString()));
}

View File

@ -1 +1 @@
<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <ProductVersion>10.0.0</ProductVersion> <SchemaVersion>2.0</SchemaVersion> <ProjectGuid>{CC80B16E-0700-4AA5-ABA0-ADBCD9316952}</ProjectGuid> <OutputType>Exe</OutputType> <RootNamespace>cs2jTemplateGen</RootNamespace> <AssemblyName>cs2jTemplateGen</AssemblyName> <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DebugSymbols>true</DebugSymbols> <DebugType>full</DebugType> <Optimize>false</Optimize> <OutputPath>bin\Debug</OutputPath> <DefineConstants>DEBUG</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> <Externalconsole>true</Externalconsole> <Commandlineparameters>-dll /Users/keving/gitrepos/cs2j/CSharpTranslator/antlr3/src/cs2jTemplateGen/bin/Debug/NDesk.Options.dll NDesk.Options.OptionValueType</Commandlineparameters> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <DebugType>none</DebugType> <Optimize>false</Optimize> <OutputPath>bin\Release</OutputPath> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> <Externalconsole>true</Externalconsole> </PropertyGroup> <ItemGroup> <Reference Include="System" /> <Reference Include="System.Xml" /> </ItemGroup> <ItemGroup> <Compile Include="Main.cs" /> <Compile Include="AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\cs2j\cs2j.csproj"> <Project>{CE961AC5-C8D4-41B3-AAF3-23FA8FAEE8AD}</Project> <Name>cs2j</Name> </ProjectReference> <ProjectReference Include="..\NDesk.Options\NDesk.Options.csproj"> <Project>{E6ACBB37-AF38-45E1-B399-0CEE63809A15}</Project> <Name>NDesk.Options</Name> </ProjectReference> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> </Project>
<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <ProductVersion>10.0.0</ProductVersion> <SchemaVersion>2.0</SchemaVersion> <ProjectGuid>{CC80B16E-0700-4AA5-ABA0-ADBCD9316952}</ProjectGuid> <OutputType>Exe</OutputType> <RootNamespace>cs2jTemplateGen</RootNamespace> <AssemblyName>cs2jTemplateGen</AssemblyName> <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DebugSymbols>true</DebugSymbols> <DebugType>full</DebugType> <Optimize>false</Optimize> <OutputPath>bin\Debug</OutputPath> <DefineConstants>DEBUG</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> <Externalconsole>true</Externalconsole> <Commandlineparameters>-dll /Users/keving/gitrepos/cs2j/CSharpTranslator/antlr3/src/cs2jTemplateGen/bin/Debug/NDesk.Options.dll NDesk.Options.OptionValueCollection</Commandlineparameters> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <DebugType>none</DebugType> <Optimize>false</Optimize> <OutputPath>bin\Release</OutputPath> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> <Externalconsole>true</Externalconsole> </PropertyGroup> <ItemGroup> <Reference Include="System" /> <Reference Include="System.Xml" /> </ItemGroup> <ItemGroup> <Compile Include="Main.cs" /> <Compile Include="AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\cs2j\cs2j.csproj"> <Project>{CE961AC5-C8D4-41B3-AAF3-23FA8FAEE8AD}</Project> <Name>cs2j</Name> </ProjectReference> <ProjectReference Include="..\NDesk.Options\NDesk.Options.csproj"> <Project>{E6ACBB37-AF38-45E1-B399-0CEE63809A15}</Project> <Name>NDesk.Options</Name> </ProjectReference> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> </Project>