我正在将一个遗留项目迁移到 Gradle。构建过程的一个步骤是为专有协议生成 java 源代码。不幸的是,当将项目导入 IntelliJ 时,生成的源代码无法识别,因此该项目无法使用 IntelliJ 构建。
我有以下构建脚本(删除了不相关的部分):
apply plugin: "base"
apply plugin: "java"
task generate {
description "Generates java code"
inputs.files(fileTree("src/codegen/"))
outputs.dir("${buildDir}/generated-src/")
// ...
// codegen
// ...
}
compileJava {
source(generate.outputs)
}
Run Code Online (Sandbox Code Playgroud)
如果我添加以下内容,IntelliJ 会将生成的源添加为源,但无法将其识别为生成的:
sourceSets {
main {
java {
srcDir "${buildDir}/generated-src/"
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让 IntelliJ 将生成的源识别为生成的源,以便显示阻止编辑这些类的正常警告?
通过NSwagStudio为 web api 生成 C# 客户端时,有一个选项可以配置设置以实现所需的输出。但是,退出应用程序并再次运行后,您必须再次从头开始设置设置。
所以我想知道是否有办法保存代码生成设置并在应用程序重启后使用它们?
我有以下设置:
public class CustomAttribute : Attribute
{
[...]
public CustomAttribute(Type type)
{
[...]
}
}
[Custom(typeof(Class2))]
public class Class1
{
public void M1(Class2) {}
public void M2(Class2) {}
}
public partial class Class2
{
[...]
}
Run Code Online (Sandbox Code Playgroud)
我试图使用 .NET 5 中添加的新代码生成机制来实现的是在编译时,找到引用我的生成器的项目中的每个类都被Custom属性注释,然后,为它的类型创建一个分部类包含具有相同名称和参数的方法的构造函数(它不会是相同的参数,只是为了简化一点)。
之前,我计划使用 TTs 来生成部分文件,但为每种类型创建一个文件表明自己既乏味又难以维护。
事情是...
我有点失落。
我确实设法做到了:
现在,虽然我不知道如何进一步进行,但语法树在同一级别具有我的属性的标识符节点和用作参数的类,这意味着如果我使用另一个属性,我担心它们都会得到在同一级别(可能使用顺序获取我的属性的标识符的位置,然后获取下一个)。
但是,即使我们省略了那个......我怎样才能列出我有名字的给定类的所有方法及其参数?由于未加载程序集,反射显然不在画面中。
我只找到了 Rosly 示例,基于使用的解决方案或分析器实际上没有相同类型的可用对象,因此建议的解决方案不适用。而且我不确定对单个文件开始另一个 Roslyn 分析是否真的是应该完成的方式。
我需要生成将从项目中已有的抽象类继承的源代码,并且源生成器项目本身进行编译。但是,当编译器抱怨生成的源无法识别抽象类时,即使它位于同一个项目中。我是否需要以某种方式告诉生成器项目自身具有运行时依赖性?
编辑:我使用 Microsoft.CodeAnalysis.CSharp。以下是描述该情况的代码: https://github.com/alebo611/csharpsourcegenproblem/tree/main/MyGeneratorProject
也就是说,我只想生成已经定义的“车辆”的子类。如果您在 Visual Studio 中运行它,您将收到以下错误:
错误 CS0246 找不到类型或命名空间名称“Vehicle”(您是否缺少 using 指令或程序集引用?) Consumer generated.cs
添加“Using ApplicationContext”没有帮助,它会抱怨找不到上下文。
我使用api( )chatGpt生成 SQL 查询并将其作为模型。openai/v1/chat/completionsgpt-3.5-turbo
但我在从响应中提取 SQL 查询时遇到困难。因为有时 chatGpt 会为查询提供一些解释,有时则不会。我尝试过使用正则表达式,但它不可靠。
regex = r"SELECT .*?;"
match = re.search(regex, result)
if match:
sql_query = match.group()
print(sql_query)
Run Code Online (Sandbox Code Playgroud)
是否有其他方法可以从响应中仅提取代码部分?
有人可以推荐一些优秀的VB.net代码生成工具吗?
我只需要一个开发桌面应用程序的工具.所以事情的网络方面并没有太多关注我.
据我所知,许多PHP框架使用语法糖来提供真实函数的错觉.有些人提供脚手架/骨架生成,这是有限的.句法糖很慢,IDE /编辑器不提供语法糖函数/方法和成员数据的智能感知.我想知道是否有任何工具/框架基于一些流行的框架生成PHP代码并围绕关系模式构建?提前致谢.
我正在尝试做一个凸壳方法,小问题是我需要得到所有三个连续顶点的集合,如下所示:
private void isConvexHull(Ponto[] points) {
Arrays.sort(points);
for (int i = 0; i <points.length; i++) {
isClockWise(points[i],points[i+1],points[i+2]);
}
//...
}
Run Code Online (Sandbox Code Playgroud)
我总是做一些我不认为干净的代码.请帮助我找到一种或多种方法吗?我希望它是循环的,即,如果我的fisrt点是数组中的最后一个元素,第二个元素将是列表中的第3个元素,该集合中的第3个元素将是列表中的第2个元素, 等等.它们必须是连续的,就是这样.
我想跟踪一个Foo类中所有方法的调用.另一个会覆盖所有方法的Foo类......
@Override
public void blah() {
System.out.println("blah()");
super.blah();
}
Run Code Online (Sandbox Code Playgroud)
......会做 - 但是我真的需要覆盖所有这些(超过100种方法)吗?
这可以用更聪明的方式完成,例如使用反射吗?
编辑:澄清 - Foo是一个本机库的JNI接口,我需要这个来保存对文件的所有调用,以生成完全与我在Java中做的C代码.
我正在开发一种编译为javascript的编程语言,生成的代码包含太多的重复,如:
cls.$init = function(){
this.property1 = {};
this.anotherProperty = [1, 2, 3, 4];
this.yetAnotherProperty = "test";
/* etc */
}
Run Code Online (Sandbox Code Playgroud)
这可以做得更小(在这种情况下,在初始化许多属性时),使用with语句:
cls.$init = function(){
with(this){
property1 = {};
anotherProperty = [1, 2, 3, 4];
yetAnotherProperty = "test";
/* etc */
}
}
Run Code Online (Sandbox Code Playgroud)
但问题是......我应该with在生成的代码中使用语句吗?(以后不打算修改)
code-generation ×10
c# ×3
java ×3
.net-5 ×1
c ×1
c++ ×1
chatgpt-api ×1
coding-style ×1
frameworks ×1
gpt-3 ×1
gradle ×1
javascript ×1
nswag ×1
nswagstudio ×1
openai-api ×1
php ×1
reflection ×1
sql ×1
swagger ×1
vb.net ×1