@ contract-case/java-ast (英语)
这是一个 临时 叉数 @ impress/ java- ast (英语)它的存在是为了解决下列问题:
在编写本报告时,每期都有公开公关:
- https://github.com/ampress/ast-types/pull/9 (英语)
- https://github.com/ampress/ast-types/pull/6 互联网档案馆的存檔,存档日期2014-12-02
然而,这些尚未有任何活动,所以我不确定项目是否得到维持.
我并不想长期维持这个分叉 希望公关会合并到原来的仓库里.
原始读取如下.
@ impress/ java- ast (英语)
一个通过抽象语法树(AST)方法生成Java代码的库. 这个库允许您以类型安全的方式程序化生成Java代码.
范围和目的
Java AST 库并不是要覆盖所有的Java语言功能. 取而代之的是,它侧重于用Amprextion插件创建地基和锅炉板代码所需的元素. 库为生成结构完善的Java代码用于常见模式和使用案例提供构件.
当需要更专业或定制代码时 CodeBlock 类可以用作通用节点,可以包括任何代码作为字符串:
import { CodeBlock } from '@amplication/java-ast';
// Create a custom code block for specialized logic
const customLogic = new CodeBlock(`
// Custom Java implementation
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
while ((line = reader.readLine()) != null) {
processLine(line);
}
} catch (IOException e) {
logger.error("Error reading file", e);
}
`);
// Add to your class or method
安装
npm install @amplication/java-ast
大楼
运行 nx build java-ast 来建造图书馆.
运行单元测试
运行 nx test java-ast 通过 欢乐。 。 。 .
发布到 npm
要发布到 npm @amplication/java-ast 数字 :
- 确保更新软件包中的版本. json.
- 运行如下 :
# From the monorepo root folder
npm i
npx nx build java-ast
cd ./dist/libs/java-ast
要将软件包发布为"beta"运行 :
npm publish --access public --tag beta
要将软件包发布为“ 最新” 运行 :
npm publish --access public
特征
- 类型安全 Java 代码生成
- 支持所有核心Java构造(类,界面,enum,方法,字段等)
- 自动导入管理
- JavaDoc 生成
- 适当的代码格式化
基本用途
import {
Class,
Field,
Method,
Parameter,
Type,
Access,
Annotation,
ClassReference,
CodeBlock,
Writer
} from '@amplication/java-ast';
// Create a class
const userClass = new Class({
name: 'User',
packageName: 'com.example.model',
access: Access.Public,
annotations: [
new Annotation({
reference: new ClassReference({
name: 'Entity',
packageName: 'javax.persistence'
})
})
]
});
// Add fields
userClass.addField(new Field({
name: 'id',
type: Type.long(),
access: Access.Private,
annotations: [
new Annotation({
reference: new ClassReference({
name: 'Id',
packageName: 'javax.persistence'
})
}),
new Annotation({
reference: new ClassReference({
name: 'GeneratedValue',
packageName: 'javax.persistence'
}),
namedArguments: new Map([
['strategy', 'GenerationType.IDENTITY']
])
})
]
}));
userClass.addField(new Field({
name: 'username',
type: Type.string(),
access: Access.Private,
javadoc: 'The username of the user.'
}));
// Add a constructor
userClass.addConstructor({
access: Access.Public,
parameters: [
new Parameter({
name: 'username',
type: Type.string()
})
],
body: new CodeBlock({
code: 'this.username = username;'
})
});
// Add a method
userClass.addMethod(new Method({
name: 'getUsername',
access: Access.Public,
parameters: [],
returnType: Type.string(),
body: new CodeBlock({
code: 'return username;'
})
}));
// Generate Java code
const writer = new Writer({ packageName: 'com.example.model' });
userClass.write(writer);
const javaCode = writer.toString();
console.log(javaCode);
产出如下:
package com.example.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
/**
* The username of the user.
*/
private String username;
public User(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
}
高级使用
创建接口
import { Interface, Method, Type, Access } from '@amplication/java-ast';
const repository = new Interface({
name: 'UserRepository',
packageName: 'com.example.repository',
access: Access.Public,
extends_: [
new ClassReference({
name: 'JpaRepository',
packageName: 'org.springframework.data.jpa.repository'
})
]
});
// Add methods to the interface
repository.addMethod(new Method({
name: 'findByUsername',
access: Access.Public,
parameters: [
new Parameter({
name: 'username',
type: Type.string()
})
],
returnType: Type.optional(Type.reference(
new ClassReference({ name: 'User', packageName: 'com.example.model' })
))
}));
创建 Enums
import { Enum, Access } from '@amplication/java-ast';
const roleEnum = new Enum({
name: 'Role',
packageName: 'com.example.model',
access: Access.Public,
javadoc: 'User roles in the system.'
});
// Add enum values
roleEnum.addValue({ name: 'ADMIN' });
roleEnum.addValue({ name: 'USER' });
roleEnum.addValue({ name: 'GUEST' });
许可证
麻省理工学院