标签: code-generation

从Scala编译器插件生成Scala代码树

这里有一些 资源是书面的Scala编译器插件对代码模式匹配启发在网络上,但这些并不在生成代码(构建符号树)帮助.我应该在哪里开始弄清楚如何做到这一点?(如果有一种比手动构建符号树更简单的方法,我也会感兴趣.)

例如,我想编写一个插件,用这个表达式的简单AST替换一些代码,其中变量(从原始程序代码中提取)可以是任何类型:

"" + hello + ", " + world + "!"
Run Code Online (Sandbox Code Playgroud)

我意识到这可能是棘手的,因为拳击toString,例如,如果 hello是一个对象,并且world是一个int,这应该是这样的:

"".+(hello.toString().+(", ".+(new Integer(world).toString().+("!"))))
Run Code Online (Sandbox Code Playgroud)

compiler-construction plugins code-generation scala

7
推荐指数
1
解决办法
1450
查看次数

java部分类

小序言.我是1.4 jdk的优秀java开发人员.在它之后,我已经切换到另一个平台,但在这里我遇到了问题所以问题强烈关于jdk 1.6(或更高:)).我有3个耦合类,与本机方法有关的耦合性质.贝娄是这三班的榜样

public interface A
{
     public void method();
}
final class AOperations
{
     static native method(. . .);
}
public class AImpl implements A
{
    @Override
    public void method(){ 
        AOperations.method( . . . );
    }
}
Run Code Online (Sandbox Code Playgroud)

所以有接口A,由AOperations以本机方式实现,而AImpl只是将方法调用委托给本机方法.这些关系是自动生成的.一切都好,但我有问题.有时像A这样的接口需要暴露迭代器功能.我可以影响接口,但不能改变实现(AImpl).

在C#中说我可以通过简单的部分来解决问题:(C#sample)

partial class AImpl{
 ... //here comes auto generated code
} 

partial class AImpl{
 ... //here comes MY implementation of 
 ... //Iterator 
} 
Run Code Online (Sandbox Code Playgroud)

所以,有部分或类似的java模拟.

编辑:根据@pgras的评论,我需要一些澄清.AImpl不在真空中,有一些工厂(本机实现)返回AImpl的实例,这就是为什么从AImpl创建继承不适用.

编辑2:可能它没有关系,但它是如何由JUnit 4完成的:

public class SomeTest {
 ...
 //there is no direct inheritance from Assert, …
Run Code Online (Sandbox Code Playgroud)

java language-features code-generation

7
推荐指数
1
解决办法
2万
查看次数

iOS和Android的代码生成

我正在寻找一个框架,从一个代码库为Android和iOS创建应用程序.我知道Appcelarator和PhoneGap等.但我需要一种不同的产品.我不确定它是否存在.我在这里或谷歌上找不到它.

我们是Android和iOS开发人员团队,不怕本地构建.我想要的是一个帮助我快速启动开发的工具.最好是一个工具,我可以创建基本UI和模型,并生成本机代码,以作为进一步开发的基础.

这样的工具存在吗?

android code-generation scaffolding ios

7
推荐指数
1
解决办法
1万
查看次数

在Roslyn中使用泛型生成有效类型名称的技术

我正在尝试一些可能的技术,用于在运行时生成C#接口的动态代理.到目前为止,我发现Roslyn在没有太多摩擦的情况下带我走了一段路,但我对处理泛型类型有点困惑.特别是,要解析类型名称.

我的基本工作流程是:

  • 为使用,命名空间和类构建脚手架 CompilationUnitSyntax
  • 检查接口是否已获得代理
  • 对于界面上的每个方法,使用MethodInfo构建一个MethodDeclarationSyntaxusing SyntaxFactory.MethodDeclaration,目标是我的新动态类

这是我困惑的问题的一个例子.在这一点上,似乎我需要解析一个字符串来获得一个TypeSyntax(在这种情况下为返回类型),并且我唯一可以接受它的地方是methodInfo.ReturnType.Name:

var methodDecl = SyntaxFactory.MethodDeclaration(SyntaxFactory.ParseTypeName(methodInfo.ReturnType.Name), methodInfo.Name);

例如,问题是SyntaxFactory.ParseTypeName期望'有效'的C#语法类型声明List<string>,但访问Name或FullName属性的形式如下:

{Name = "List`1" FullName =
"System.Collections.Generic.List`1[[UnitTests.SamplePoco, UnitTests,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}   System.Type
{System.RuntimeType}
Run Code Online (Sandbox Code Playgroud)

这显然不会用反引号解析,缺少尖括号等.

Reflection样式类(MethodInfo,Types)和Roslyn语法单元之间是否有更好的桥梁?我也尝试了一种纯粹的反射发射方式解决方案,但是想知道我是否可以在这里找到一个基于Roslyn的方法.

c# reflection code-generation roslyn

7
推荐指数
2
解决办法
1628
查看次数

java类加载器和运行时编译

尽管警告会放弃我目前的行动方案,但我目前看不到更好的方法来解决我的问题.我必须 在运行时生成 Java代码,然后编译它,加载它并引用它.

问题是生成的代码导入已经由系统类加载器加载的代码(我想) - 也就是代码存在于我的类路径中的一个jar中.(我在Java 6上运行Tomcat 6 Web容器.)您可能会问自己为什么这是一个问题 - 我确定不知道 - 但事实是我遇到了编译错误:

/W:/.../parser/v0.5/AssignELParser.java:6:包com.xxx.yyy.zzz.configuration不存在

下面是一些关于互联网的例子,我定义了以下类:

class MemoryClassLoader extends ChainedAction {

    private static final Logger LOG = Logger.getLogger(MemoryClassLoader.class);

    private LoaderImpl impl;

    private class LoaderImpl extends ClassLoader {

        // The compiler tool
        private final JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

        // Compiler options
        private final Iterable<String> options = Arrays.asList("-verbose");

        // DiagnosticCollector, for collecting compilation problems
        private final DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();

        // Our FileManager
        private final MemoryFileManager manager = …
Run Code Online (Sandbox Code Playgroud)

java compiler-construction code-generation runtime classloader

6
推荐指数
1
解决办法
2216
查看次数

在Haskell中创建唯一标签

我正在为Haskell中的简单命令式语言编写编译器,输出Java字节码.我已经到了我发出字节码的抽象表示的地步.

在编写用于编译if语句的代码时遇到了一些麻烦.要实现if语句,我需要跳转到标签.因此,我需要为该标签生成一个名称,该名称必须是唯一的.

我的第一个想法是通过一些状态compileStatement,即

compileStatement :: Statement -> UniqueIDState -> [AbstractInstruction]
Run Code Online (Sandbox Code Playgroud)

当然,compilerStatement是递归的,所以使用这种方法需要我从递归调用中将唯一ID生成器的状态传递回upp:

compileStatement :: Statement -> UniqueIDState -> (UniqueIdState, [AbstractInstruction])
Run Code Online (Sandbox Code Playgroud)

这看起来有点笨拙,特别是如果我意识到我需要在将来携带更多状态; 有更优雅的方式吗?

compiler-construction haskell code-generation

6
推荐指数
2
解决办法
1658
查看次数

我可以配置Hibernate默认为每个表创建单独的序列吗?

Hibernate默认创建一个globel序列,用于为所有表生成id(在PostgreSQL的情况下),它可以扩展非常糟糕的恕我直言.虽然我可以为每个实体类型指定使用哪个序列,但我不喜欢这样做.我不喜欢明确命名序列和强制使用序列作为生成器策略,因为我希望hibernate为可能根本不支持序列的数据库生成DDL.单个全局序列也使得无法使用32位int作为主键,这意味着我必须将所有int id转换为long类型.

orm ddl code-generation hibernate

6
推荐指数
1
解决办法
8110
查看次数

Eclipse生成的equals是否有任何特殊原因使用1231和1237的值作为布尔值?

标题基本上都说明了一切.我尝试过谷歌搜索,但返回了大量的误报.我想我只是想知道这两个具体数字背后是否有一定的理由,或者他们是否很容易就有其他许多数字?

编辑:并且,由于数字的来源已被回答,布尔hashCode方法的编写者使用这些数字的任何理由(除了他们是素数)?其他任何一个素数都可以效果吗?

java eclipse algorithm code-generation equals

6
推荐指数
2
解决办法
297
查看次数

如何在Vala中使用CCode属性?

我正在尝试使用Vala中的C宏.在我看来,这应该可以使用CCode指令,但我找不到任何有关如何使用它的有意义的文档.

在"黑客的Vala指南"中有一个关于CCode参数的简短部分, 以及一个关于使用CCode从Vala调用C宏的邮件列表线程.

但这两种资源都无法帮助我理解CCode的真正作用.它显然会影响Vala如何生成C代码,从黑客指南到Vala我可以推断出CCode指令可能会让我直接影响在遍历Valas AST时如何创建CCode树.

有人能解释一下CCode的作用吗?

c code-generation abstract-syntax-tree vala

6
推荐指数
1
解决办法
1565
查看次数

从Android Studio调试器导出对象

有没有一种方法可以从Android Studio(IntelliJ IDEA)调试器中导出对象。例如,Visual Studio具有对象导出器

最后,我需要创建/生成使用基于服务器响应的值初始化的对象。因此,也欢迎任何其他实现此目的的解决方案。

debugging android code-generation intellij-idea android-studio

6
推荐指数
2
解决办法
3366
查看次数