标签: codegen

如何使用 java / kotlin 中的注释处理将方法附加到现有类?

我是注释处理和代码生成的新手。我想知道如何执行这样的操作,比如将新方法附加到现有类。这是我想要做的一个例子:

假设我们有一个带有自定义注释的类,如下所示:

class SourceClass {
    @CustomAnnotation
    fun annotatedFun1(vararg argument: Any) {
        //Do something
    }

    @CustomAnnotation
    fun annotatedFun2(vararg argument: Any) {
        //Do something
    }

    fun someOtherFun() {
        //Do something
    }
}
Run Code Online (Sandbox Code Playgroud)

我想得到的结果 - 该类的扩展副本:

class ResultClass {
    fun hasFunWithName(name: String): Boolean {
        return (name in arrayOf("annotatedFun1", "annotatedFun2"))
    }

    fun callFunByName(name: String, vararg arguments: Any) {
        when (name) {
            "annotatedFun1" -> annotatedFun1(*arguments)
            "annotatedFun2" -> annotatedFun2(*arguments)
        }
    }

    fun annotatedFun1(vararg argument: Any) {
        //Do something
    }

    fun annotatedFun2(vararg argument: Any) {
        //Do something …
Run Code Online (Sandbox Code Playgroud)

java annotations codegen kotlin kapt

8
推荐指数
1
解决办法
887
查看次数

对于NSManagedObject,Xcode 9构建了Date vs NSDate的问题

Xcode 9为Date模拟器与设备中的实体的类型属性生成不同的代码.我在coredata中设置了codegen功能.Classcategory/extension

直到Xcode 8.3(最新)它一切正常(NSDate总是).下面是Xcode 9(Swift 4)为属性自动生成的代码 -

在设备上: -

@NSManaged public var requiredDate: Date?
Run Code Online (Sandbox Code Playgroud)

和,

在模拟器上: -

@NSManaged public var requiredDate: NSDate?
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有谁遇到过这个问题?对于一个有50多个成员的项目来解决这个问题的最佳解决方案是什么,直到Xcode更新修复它(我希望有一个苹果雷达)?

xcode date core-data nsmanagedobject codegen

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

Swagger-codegen开始了

我想进入Swagger,更具体地说,是swagger-codegen工具.我发现github和http://swagger.io/中提供的信息,文档和规范相当令人困惑(另外,代码示例的一些链接被破坏/ 404 /).有没有门户网站,我可以看到一些针对初学者的入门教程,代码示例等,使用这些工具?

rest sdk codegen swagger

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

使用JavaPoet生成注释

我正在使用JavaPoet编写代码生成器,需要在类上添加注释

例如 :

package some.package

import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.Entity;
import javax.persistence.Cache

@Entity
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class SomeClass {
}
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像这样:

TypeSpec spec = TypeSpec
  .classBuilder("SomeClass")
  .addAnnotation(Entity.class)
  .addAnnotation(AnnotationSpec.builder(Cache.class)
     .addMember("usage", "$L", CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
     .build())
  .build()
Run Code Online (Sandbox Code Playgroud)

此代码生成类,但生成的代码缺少CacheConcurrencyStrategy的import语句.如何生成代码以便输出所有必需的代码?

java codegen javapoet

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

Apache Spark Codegen Stage增长超过64 KB

当我在30多个列上进行特征工程以创建大约200多个列时遇到错误。它不会使作业失败,但是会显示错误。我想知道如何避免这种情况。

Spark-2.3.1 Python-3.6

群集配置-1个主设备-32 GB RAM,16核4个从设备-16 GB RAM,8核

输入数据-镶木地板文件的8个分区,压缩迅速。

我的Spark提交->

spark-submit --master spark://192.168.60.20:7077 --num-executors 4 --executor-cores 5 --executor-memory 10G --driver-cores 5 --driver-memory 25G --conf spark.sql.shuffle.partitions=60 --conf spark.driver.maxResultSize=2G --conf "spark.executor.extraJavaOptions=-XX:+UseParallelGC" --conf spark.scheduler.listenerbus.eventqueue.capacity=20000 --conf spark.sql.codegen=true /appdata/bblite-codebase/pipeline_data_test_run.py > /appdata/bblite-data/logs/log_10_iter_pipeline_8_partitions_33_col.txt
Run Code Online (Sandbox Code Playgroud)

下面的堆栈跟踪-

ERROR CodeGenerator:91 - failed to compile: org.codehaus.janino.InternalCompilerException: Compiling "GeneratedClass": Code of method "processNext()V" of class "org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage3426" grows beyond 64 KB
org.codehaus.janino.InternalCompilerException: Compiling "GeneratedClass": Code of method "processNext()V" of class "org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage3426" grows beyond 64 KB
    at org.codehaus.janino.UnitCompiler.compileUnit(UnitCompiler.java:361)
    at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:234)
    at org.codehaus.janino.SimpleCompiler.compileToClassLoader(SimpleCompiler.java:446)
    at org.codehaus.janino.ClassBodyEvaluator.compileToClass(ClassBodyEvaluator.java:313)
    at …
Run Code Online (Sandbox Code Playgroud)

codegen apache-spark janino pyspark

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

CoreData 对成员“id”Xcode 12 的不明确引用

我有一个属性 id 为 String 类型的 coredata 实体

尝试从关键路径引用该属性时会引发错误

let path = #keyPath(User.id) //Ambiguous reference to member 'id'
Run Code Online (Sandbox Code Playgroud)

代码生成器设置为类定义。

我试图检查类的生成文件,我发现实体类现在确认Identifiable需要id

我注意到将部署目标设置为低于 iOS 13 的任何内容都会解决这个问题(但我不想这样做)

Xcode 12.0 测试版 4 (12A8179i)

有没有办法在不禁用代码生成或更改部署目标的情况下解决这个问题?

core-data ios codegen swift xcode12

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

Swagger codegen 忽略 POJO 类的空字段

我正在制作一个 REST API,我想在类生成时添加 Jackson 注释以忽略空字段,因此我想仅为某些类添加此注释,而不是为洞项目添加此注释。

我知道这可以通过在 application.properties 中添加以下行来完成:

spring.jackson.default-property-inclusion=non_null
Run Code Online (Sandbox Code Playgroud)

但这是针对整个项目的。

我看到有一些“.mustache”文件

- api.mustache
- apiController.mustache
Run Code Online (Sandbox Code Playgroud)

我想我必须在其中之一添加一些代码,或者我应该在 application.yml 中插入一些代码?

我还将 Spring Boot 与 Swagger-codgen 一起使用。

预先感谢您,祝您有美好的一天!

jackson codegen swagger spring-boot

5
推荐指数
1
解决办法
9551
查看次数

使用 Sympy 生成 C 代码。将 Pow(x,2) 替换为 x*x

我正在使用公共子表达式消除 (CSE) 例程和 ccode 打印机使用 sympy 生成 C 代码。

但是,我希望将幂表达式设置为 (x*x) 而不是 pow(x,2)。

无论如何要这样做吗?

例子:

import sympy as sp
a= sp.MatrixSymbol('a',3,3)
b=sp.Matrix(a)*sp.Matrix(a)

res = sp.cse(b)

lines = []
     
for tmp in res[0]:
    lines.append(sp.ccode(tmp[1], tmp[0]))

for i,result in enumerate(res[1]):
    lines.append(sp.ccode(result,"result_%i"%i))
Run Code Online (Sandbox Code Playgroud)

将输出:

x0[0] = a[0];
x0[1] = a[1];
x0[2] = a[2];
x0[3] = a[3];
x0[4] = a[4];
x0[5] = a[5];
x0[6] = a[6];
x0[7] = a[7];
x0[8] = a[8];
x1 = x0[0];
x2 = x0[1];
x3 = x0[3];
x4 = x2*x3;
x5 …
Run Code Online (Sandbox Code Playgroud)

python code-generation sympy codegen python-3.x

5
推荐指数
1
解决办法
1235
查看次数

JDK14 无法运行“java --add-opens”

我正在做一个小项目来学习 swagger-codegen。当我执行“mvn clean install”时,出现以下错误:

Unable to make public boolean java.util.Collections$EmptyMap.isEmpty() accessible: module java.base does not "opens java.util" to unnamed module @1e1b061

进而

Failed to execute goal io.swagger.codegen.v3:swagger-codegen-maven-plugin:3.0.18:generate (default) on project swgtst-api: Code generation failed. See above for the full exception.

当我试图java --add-opens=java.base/java.util=ALL-UNNAMED用这里写的来解决它时https://docs.oracle.com/javase/9​​/migrate/toc.htm#JSMIG-GUID-2F61F3A9-0979-46A4-8B49-325BA0EE8B66 什么也没发生,只是 java显示帮助。

肯定最后一个命令有语法问题,但我不知道究竟是什么......我做错了什么?

java codegen swagger

5
推荐指数
1
解决办法
501
查看次数

React Query + Codegen - 自定义获取器

我使用 codegen + React 查询 + 我自己的 fetcher 来处理 API 调用。 https://www.graphql-code-generator.com/plugins/typescript-react-query#using-fetch-with-codegen-configuration

我的要求:

  • 我需要一个自定义提取器 - 来解决自定义后端错误(我需要从响应中提取一些信息)
  • 我需要有一个选项来为每个查询传递额外的标头(因此我生成的钩子需要能够获取一些额外的参数并在 API 调用中使用它们)

我认为 option:fetcher: 'fetch'符合我的第二个要求(我可以为每个钩子添加额外的标头/端点),但我不能使用我自己的格式抛出 graphql 错误(有一个来自本机 fetch 方法的默认抛出)。

是否有任何选项可以创建一个解决方案(可能结合适当的配置+自定义获取器)来满足这两个要求?谢谢!

codegen reactjs react-query

5
推荐指数
1
解决办法
3334
查看次数