有没有人知道Java的工具(类似于C#的codedom),它提供了一种生成.java文件的Java代码的方法?
编辑:我正在建立一个平台,其主要目标是自动化操作.提供一些输入,我想为外部工具生成代码.所以它不是运行时生成的.我想生成并输出到实际文件.
我需要创建一个带有随机列数的Oracle表来进行负载测试.我只想指定类型为NUMBER的列数,类型为VARCHAR2的列数等,并且应自动生成字段.另外,我将使用随机数据填充表格,我将使用dbms_random.
我怎样才能做到这一点?
新的(> 2.0).NET框架是否为代码生成提供了任何增强功能?
我在2.0中使用CodeDom,我想知道代码生成是否更简单.
我想编写一个工具,使用编译.class文件作为输入生成一些代码.具体来说,我想从这个类文件中读取:
输入类文件可能会引用不在工具类路径中的几种类型.这没关系,我不需要对它们做任何事情,只需要将完全限定的类型名称作为字符串读取.我确实需要从注释中获取一些信息,但它们将在工具的类路径中.
有没有我可以用于此目的的图书馆?如果API有点像反射API那会很好,但它不一定如此.
这就是我目前正在做的事情:
protected void setupProject()
{
bool lbDone = false;
int liCount = 0;
while (!lbDone && liCount < pMaxRetries)
{
try
{
pProject.ProjectItems.Item("Class1.cs").Delete();
lbDone = true;
}
catch (System.Runtime.InteropServices.COMException loE)
{
liCount++;
if ((uint)loE.ErrorCode == 0x80010001)
{
// RPC_E_CALL_REJECTED - sleep half sec then try again
System.Threading.Thread.Sleep(pDelayBetweenRetry);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我尝试阻止大多数调用EnvDTE的东西,它运行得很好.我遇到的问题是当我遍历一个集合并对每个项目执行一次操作时.
foreach(ProjectItem pi in pProject.ProjectItems)
{
// do something to pi
}
Run Code Online (Sandbox Code Playgroud)
有时我会foreach(ProjectItem pi in pProject.ProjectItems)在行中获得异常.因为如果我得到RPC_E_CALL_REJECTED异常,我不想启动foreach循环,我不知道我能做什么.
编辑回答评论:是的我正在从另一个程序自动化VS,是的,我通常在同时使用VS做其他事情.我们有一个应用程序读取xml文件,然后根据xml文件生成大约50个VS解决方案.这通常需要几个小时,所以当我发生这种情况时,我会尝试做其他工作.
我正在编写一个小型命令式语言的编译器.目标语言是Java字节码,编译器在Haskell中实现.
我已经写了一个语言的前端 - 即我有一个词法分析器,解析器和类型检查器.我无法弄清楚如何进行代码生成.
我保留了一个表示局部变量堆栈的数据结构.我可以使用局部变量的名称查询此结构并获取其在堆栈中的位置.当我遍历语法树时传递这个数据结构,并在我进入和退出新范围时弹出和推送变量.
我弄清楚的是如何发出字节码.在终端发出字符串并将它们连接在更高的级别似乎是一个糟糕的解决方案,无论是清晰度还是性能方面.
tl; dr如何在使用语法树时发出字节码?
我正在尝试在Visual Studio 2010中创建用于代码生成的自定义工具.首先我注册它:
"$(FrameworkSDKDir)Bin\NETFX 4.0 Tools\gacutil.exe" /if "$(TargetPath)"
Run Code Online (Sandbox Code Playgroud)
然后我通过reg键添加它:
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\CLSID\{6A96476E-74F3-4AB3-9CCA-F15EC6104D84}]
"RuntimeVersion"="v4.0.30319"
"Class"="MapBuildTool.MapFileGenerator"
"Assembly"="MapBuildTool, Version=1.0.0.0, Culture=en-US, PublicKeyToken=7d8abca94a1e38ae"
"ThreadingModel"="Both"
"InprocServer32"="C:\\Windows\\SysWOW64\\mscoree.dll"
@="MapBuildTool"
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Generators\{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}\MapBuildTool]
"CLSID"="{6A96476E-74F3-4AB3-9CCA-F15EC6104D84}"
"GeneratesDesignTimeSource"=dword:00000001
@="MapBuildTool"
Run Code Online (Sandbox Code Playgroud)
然后visual studio说:
Cannot find custom tool 'MapBuildTool' on this system.
Run Code Online (Sandbox Code Playgroud)
好的......现在怎么样?它找不到自定义工具注册表项吗?它是否找到了钥匙,但装卸组件有困难?它是否加载了程序集但是在实例化类时遇到了麻烦......?哪些日志/地方在那里我可以找出哪些错误?
code-generation visual-studio-2010 customtool visual-studio visual-studio-2010-sp1
有很多类似的问题集中在一个方面进行优化,但是每个解决方案都有一个丑陋的缺点。
假设我想开发一个XML模式(XSD),该模式允许以下文档,并希望使用XJC生成类:
<Catalogue>
<Book>...</Book>
<Journal>...</Journal>
<Book>...</Book>
...
</Catalogue>
Run Code Online (Sandbox Code Playgroud)
模式应为类型层次结构建模(Book并且Journal是的子类Publication)。自然,生成的Java类也应该如此。
我尝试了以下所有主要问题的方法:
1.)建模目录,以包含xsd:choice所有可能的子类型。
<xsd:complexType name="Catalogue">
<xsd:choice maxOccurs="unbounded">
<xsd:element ref="Book" />
<xsd:element ref="Magazine" />
</xsd:choice>
</xsd:complexType>
<xsd:element name="Publication" abstract="true" type="Publication" />
<xsd:element name="Book" type="Book"/>
<xsd:element name="Magazine" type="Magazine"/>
<xsd:complexType name="Publication">
<xsd:sequence></xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Book">
<xsd:complexContent>
<xsd:extension base="Publication">
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
...
Run Code Online (Sandbox Code Playgroud)
这里的问题是,我必须提到choice元素中所有可能的子类型,这在实际应用中可能很多。一个较小的问题是,尽管该Catalogue属性具有正确的类型,List<Publication>但其名称却很丑陋bookAndMagazine。由于冗余的架构定义,因此不是一种选择!
2.)建模目录以包含xsd:sequence父类的
<xsd:complexType name="Catalogue">
<xsd:choice maxOccurs="unbounded">
<xsd:element ref="Publication" maxOccurs="unbounded"/>
</xsd:choice>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)
仅当XML文档的格式为时,这才起作用<Publication xsi:type="Book"...>。因此,别无选择! …
我有一个特定于域的语言,可以转换为SQL.我必须编写自己的词法分析器,解析器和代码生成器,还是有可以帮助我的工具?
code-generation ×10
c# ×2
java ×2
parsing ×2
.class-file ×1
antlr ×1
bytecode ×1
codedom ×1
customtool ×1
decompiling ×1
dsl ×1
erlang ×1
haskell ×1
inheritance ×1
jaxb ×1
lexer ×1
oracle ×1
plsql ×1
random ×1
reflection ×1
sql ×1
xjc ×1
xsd ×1