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

Add Inherits, Slurp up nested classes

This commit is contained in:
Kevin Glynn 2010-10-19 10:40:55 +02:00
parent 661f14d3af
commit 43c1249563
3 changed files with 42 additions and 21 deletions

View File

@ -603,6 +603,9 @@ namespace RusticiSoftware.Translator.CLR
[XmlElementAttribute("Name")]
public string TypeName { get; set; }
// [XmlElementAttribute("Name")]
// public string[] TypeName { get; set; }
// Path to use when resolving types
[XmlElementAttribute("Use")]
public UseRepTemplate[] Uses { get; set; }

View File

@ -14,7 +14,6 @@ namespace cs2j.Template.Utils
{
private Assembly assembly = null;
private int verbose = 0;
private List<string> extractTypes = new List<string>();
public TemplateFromDLL (string DLLFileName)
{
@ -78,8 +77,18 @@ namespace cs2j.Template.Utils
private void buildInterface(InterfaceRepTemplate iface, Type t) {
iface.TypeName = TypeHelper.buildTypeName(t);
List<String> bases = new List<String>();
if (t.BaseType != null)
bases.Add(TypeHelper.buildTypeName(t.BaseType));
foreach (Type iTy in t.GetInterfaces()) {
bases.Add(TypeHelper.buildTypeName(iTy));
}
iface.Inherits = bases.ToArray();
// Grab Methods
foreach (MethodInfo m in t.GetMethods()) {
foreach (MethodInfo m in t.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance)) {
MethodRepTemplate methRep = new MethodRepTemplate();
methRep.Name = m.Name;
methRep.Return = TypeHelper.buildTypeName(m.ReturnType);
@ -123,10 +132,16 @@ namespace cs2j.Template.Utils
}
private TypeRepTemplate mkTemplate(string typeName) {
private IList<TypeRepTemplate> mkTemplates(string typeName) {
TypeRepTemplate retRep = null;
List<TypeRepTemplate> rets = new List<TypeRepTemplate>();
Type t = assembly.GetType(typeName);
foreach (Type nestedTy in t.GetNestedTypes()) {
foreach(TypeRepTemplate nestedRep in mkTemplates(nestedTy.FullName)) {
rets.Add(nestedRep);
}
}
TypeRepTemplate retRep = null;
if (t.IsClass) {
ClassRepTemplate classRep = new ClassRepTemplate();
buildClass(classRep, t);
@ -145,7 +160,8 @@ namespace cs2j.Template.Utils
}
retRep = enumRep;
}
return retRep;
rets.Add(retRep);
return rets;
}
@ -205,23 +221,25 @@ namespace cs2j.Template.Utils
foreach (string t in extractTypes) {
if (templateDriver.verbose > 0)
Console.WriteLine ( "extracting {0}", t );
TypeRepTemplate tyRep = templateDriver.mkTemplate(t);
IList<TypeRepTemplate> tyReps = templateDriver.mkTemplates(t);
TextWriter writer = null;
if (dumpXmls) {
string xmlFName = Path.Combine(xmlDir, t.Replace('.', Path.DirectorySeparatorChar) + ".xml");
string xmlFDir = Path.GetDirectoryName(xmlFName);
if (!Directory.Exists(xmlFDir))
{
Directory.CreateDirectory(xmlFDir);
}
writer = new StreamWriter(xmlFName);
foreach (TypeRepTemplate tyRep in tyReps) {
if (dumpXmls) {
string xmlFName = Path.Combine(xmlDir, tyRep.TypeName.Replace('.', Path.DirectorySeparatorChar) + ".xml");
string xmlFDir = Path.GetDirectoryName(xmlFName);
if (!Directory.Exists(xmlFDir))
{
Directory.CreateDirectory(xmlFDir);
}
writer = new StreamWriter(xmlFName);
}
else {
writer = Console.Out;
}
templateDriver.writeXmlStream(tyRep, writer);
if (dumpXmls)
writer.Close();
}
else {
writer = Console.Out;
}
templateDriver.writeXmlStream(tyRep, writer);
if (dumpXmls)
writer.Close();
}
}
}

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.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>
<?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.OptionSet</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>