标签: code-generation

以编程方式编辑/修改.java文件?(不是.class文件)

所以,这是一段使用CodeModel生成java代码的代码:

    JCodeModel cm = new JCodeModel();
    JDefinedClass dc = cm._class("foo.Bar");
    JMethod m = dc.method(0, int.class, "foo"); 
    m.body()._return(JExpr.lit(5));
    File f = new File("C:/target/classes");
    f.mkdirs();
    cm.build(f);
Run Code Online (Sandbox Code Playgroud)

此代码生成.java文件:

package foo;
public class Bar {

       int foo() {
        return  5;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我不希望CodeModel为我创建一个新的java文件.我已经有一个.java文件,并希望在其中的方法中添加几行代码.所以,我希望API直接修改java文件/创建它的修改后的副本.有办法做到这一点吗?

java code-generation

13
推荐指数
2
解决办法
8220
查看次数

项目Lombok与Eclipse模板/代码生成

与Eclipse中的代码模板/代码生成相比,Project Lombok是否提供了任何好处?是否有任何缺点(除了包括.jar)?

eclipse code-generation lombok

13
推荐指数
3
解决办法
1633
查看次数

使用Asm字节码生成器生成具有泛型类型的方法(ClassWriter)

使用Asm可以很容易地定义简单的getter和setter(幸运的是,它甚至可以在FAQ中解释).但是有一件事没有提到,而且我一直无法找到文档,那就是如何使用泛型类型信息来实现它们.

我实际上能够很容易地确定泛型类型信息(因为代码将采用现有的字段和/或方法,并且存在完整的泛型类型处理和解析).我只需要为包含泛型类型的类型生成泛型版本.

我希望这就像修改签名的Asm ClassWriter/MethodVisitor调用一样容易,但文档中的一些注释表明它可能不那么容易(因为泛型信息存储在与常规信息不同的位置).

编辑:看起来入口点是"ClassWriter.visitField/Method(....,String signature) - 请注意,它的"描述"包含正常的非泛型类信息,但术语"签名"(在JLS中)具体指的是到泛型 - 包括类型信息.

java generics code-generation bytecode java-bytecode-asm

13
推荐指数
1
解决办法
2449
查看次数

以编程方式编写Java

我想知道是否已经有一个以编程方式编写java类或方法的库?

我正在寻找能够将新源代码写入现有文件或扩展已存在文件的库.

java code-generation

13
推荐指数
1
解决办法
4331
查看次数

在Ruby on Rails中生成具有多对多的模型

有没有办法生成一个预定义的多对多关系的Rails模型?事后我知道如何将它添加到Active Record中,但是在数据库迁移和Active Record模型中定义它是很好的.

activerecord code-generation ruby-on-rails

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

库解析和检查Haskell代码?

hackage中是否有任何库可以解析haskell代码并检查它是否是有效代码?

我愿意使用进化模型,我想检查生成的代码串是否可以编译而无需将它们写入磁盘并运行编译器.

理想情况下,能够在字符串中运行代码也很好,但只检查代码的有效性是可以的.

如果你知道检查其他语言(lisp,C,...)的解析器库(在haskell中),它也会很好.

parsing haskell code-generation

13
推荐指数
1
解决办法
1529
查看次数

如何使用jOOQ代码生成器和Maven的自定义策略?

使用jOOQ,我可能希望将jOOQ代码生成器与Maven和自定义生成器策略结合使用.看起来好像可以这样做(省略不相关的部分):

<plugin>
  <groupId>org.jooq</groupId>
  <artifactId>jooq-codegen-maven</artifactId>
  <version>2.2.2</version>

  <!-- The plugin should hook into the generate goal -->
  <executions>
    <execution>
      <goals>
        <goal>generate</goal>
      </goals>
    </execution>
  </executions>

  <configuration>
    <generator>
      <name>org.jooq.util.DefaultGenerator</name>
      <!-- But the custom strategy is not yet compiled -->
      <strategy>
        <name>com.example.MyStrategy</name>
      </strategy>
    </generator>
  </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

以上配置描述了该问题.jOOQ的代码生成器挂钩到Maven生命周期的生成目标,该生成目标发生在生命周期的编译目标之前.但是,对于代码生成,它需要一个预编译的自定义策略类,否则我会得到一个ClassNotFoundException.如何用Maven解决这个问题?我可以在执行generate目标之前编译单个类吗?

java code-generation maven jooq

13
推荐指数
1
解决办法
1610
查看次数

IntelliJ IDEA GUI构建器 - 未生成Java代码

我在IntelliJ IDEA GUI设计器中设计了我的GUI表单,并选择了Project Settings→GUI Designer中的单选按钮来生成源代码而不是.class文件,但我的.java代码文件如下所示:

public class PovRayEmptyProjectWizardPanelVisual {
    private JTextField textField1;
    private JTextField textField2;
    private JTextField textField3;
    private JButton button1;
}
Run Code Online (Sandbox Code Playgroud)

就是这样 - 没有生成创建GUI的代码.如何手动触发此类代码生成,以便我可以.java使用Maven 编译生成的文件?

java user-interface code-generation intellij-idea gui-builder

13
推荐指数
1
解决办法
8385
查看次数

使用Scala生成代码

在Scala中使用SBT工具链时,是否可以编写一个任务来读取项目源的特殊部分,以便在编译时生成scala-code.

关于这个的任何想法甚至文章/教程?我正在寻找与Template Haskell相似的东西.

code-generation scala template-haskell

13
推荐指数
3
解决办法
5985
查看次数

向IntelliSense提供不应修改部分类的提示

最近我使用了相当多的代码生成,通常与部分类相结合.基本上设置如下:

  • 包含生成代码的部分类.其中一些代码将调用部分方法.代码重新生成了很多时间.代码生成器在某些情况下是自定义工具.
  • 部分方法在单独的文件中手动实现.

问题是当我使用像"生成方法"这样的Intellisense功能时,它们由于某种原因在包含生成代码的文件中生成.显然我不希望这样.

我的问题是:是否有可能生成一些提示告诉Intellisense它不应该触摸某些'cs'文件(而是其他部分类)?


更新

回想起来,我应该注意到我正在使用自定义工具来生成代码.它不是EF或简单的转换; 代码生成中涉及到相当多的逻辑.此外,它还使用部分类生成完整的命名空间和类结构.通过从csproj文件中提取"root命名空间" 然后使用文件夹结构来确定绝对命名空间(它与Linq2sql的工作方式类似).

xanatos(谢谢!)建议的答案有效:intellisense对名称进行操作排序,然后按字母顺序对名称进行排序,然后选择列表中的第一项.这意味着您可以生成一个zzzz.foo.cs(虽然有点难看)将正常工作.我刚刚进行了一些实验,发现该功能find all references返回了VS似乎使用的顺序.事实证明,它的工作原理如下:

假设您有一个自定义工具,可以处理文件名foo.bar并将其转换为foo.cs.自定义工具将生成内容作为字符串并将其传递回Visual studio(这就是自定义工具的工作方式......).结果将在一个名为的文件中foo.cs.

现在,我很惊讶地发现Intellisense不会将其排序为foo.cs而是将其排序为foo.bar\foo.cs.换句话说:无论你如何命名您的自定义工具"CS"的输出,你必须到基本文件重命名foo.bar为类似zoo.bar.

虽然这可能是一种解决方法,但我很愿意接受它作为答案,因为我必须给我的项目中的文件奇怪的名字(名字有意义......).此外,我的一些自定义工具依赖于他们的文件名,因此也会被破坏...

因此,我仍然愿意就如何正确解决这个问题提出建议.

c# intellisense code-generation

12
推荐指数
1
解决办法
178
查看次数