当前位置: 首页 > news >正文

c 网站开发怎么弹出输入框图片外链

c 网站开发怎么弹出输入框,图片外链,郑州做公司网站的公司,游戏logo设计网站之前分享过一篇使用 AI 可视化 Java 项目的文章,同步在 AI 破局星球、知乎、掘金等地方都分享了。 原文在这里AI 编程:可视化 Java 项目 有很多人感兴趣,我打算写一个系列文章拆解这个项目,大家多多点赞支持~ 今天分享的是第一…

之前分享过一篇使用 AI 可视化 Java 项目的文章,同步在 AI 破局星球、知乎、掘金等地方都分享了。

原文在这里AI 编程:可视化 Java 项目

有很多人感兴趣,我打算写一个系列文章拆解这个项目,大家多多点赞支持~

今天分享的是第一篇:如何使用 Spoon + JavaParser 工具解析一个本地的 Java 项目。

解析这一步骤是整个项目的基础,是为了获得整个 Java 项目的元数据。

这个元数据包含什么呢?1)整个项目的所有的类信息;2)整个项目的所有方法信息

方法信息

序号字段名称字段描述
1method_id方法唯一id标识
2project_name
3method_name方法名
4class_id方法所属类名
5param_type参数类型
6response_type返回类型
7begin_line方法内容开始行
8end_line方法内容结束行
9branch分支
10method_desc方法描述
11chat_descGPT 描述
12invoke_count被调用数量
13mermaid_flow_graph流程图数据
14flow_graph_ignored是否忽略流程图
15annotation_info注解信息
16annotation_type注解类型
17access_modifier修饰符

类信息

序号字段名称字段描述
1class_id类唯一标识
2class_name类名
3project_name项目唯一标识
4package_name包名
5branch分支
6class_type类的类型
7chat_descGPT 类描述
8class_desc类注释
9annotation_info类注解
10method_annotation_info方法注解信息
11annotation_type注解类型

怎么拿到整个项目的类信息和方法信息呢?

首先我们需要一个类解析器、一个方法解析器。使用 Java 的反射,我们就能拿到具体类和方法的详细信息。

类解析器代码:

public void execute(List<CtType<?>> elements) {classStructs = Lists.newArrayList();for (CtType<?> type : elements) {try {// 匿名内部类和泛型会跳过解析if (type.isAnonymous()) {continue;}if (Objects.isNull(type.getPackage())) {continue;}// 获取类的简单类名String simpleClassName = type.getSimpleName();// GPT 接口获取解释String chatDesc = "";// 获取类所属包String packageName = type.getPackage().getQualifiedName();// 获取类注释信息String classComment = type.getDocComment();// 判断接口还是类ClassType classType = getClassType(type);// 获取类注解信息List<AnnotationInfo> annotationInfos = Lists.newArrayList();List<CtAnnotation<?>> annotations = type.getAnnotations();for (CtAnnotation<?> annotation : annotations) {AnnotationInfo annotationInfo = new AnnotationInfo();String annotationName = annotation.getAnnotationType().getSimpleName();annotationInfo.setAnnotationName(annotationName);Map<String, CtExpression> annotationValues = annotation.getValues();for (Map.Entry<String, CtExpression> entry : annotationValues.entrySet()) {String attributeName = entry.getKey();Object attributeValue = entry.getValue();annotationInfo.addAttributeName(attributeName, attributeValue.toString());}annotationInfos.add(annotationInfo);}// 构造类元信息ClassStruct classStruct = buildClassStruct(simpleClassName, packageName, classType,classComment, annotationInfos, chatDesc);classStructs.add(classStruct);} catch (Exception e) {log.error("class parse error, className ==>{}, errMsg ==>", type.getSimpleName(), e);}}// 类元信息入库}

方法解析器

public void execute(List<CtType<?>> elements) {methodStructs = Lists.newArrayList();for (CtType<?> element : elements) {if (element.isAnonymous()) {continue;}if (Objects.isNull(element.getPackage())) {continue;}// 获取包名String packageName = element.getPackage().getQualifiedName();// 获取类名String className = element.getSimpleName();// 获取方法列表Set<CtMethod<?>> methods = element.getMethods();for (CtMethod<?> method : methods) {try {// 获取简单方法名String methodName = method.getSimpleName();// 获取全限定参数String signatureParameters = method.getSignature();int firstIndex = method.getSignature().indexOf("(");int lastIndex = method.getSignature().indexOf(")");String parameters = signatureParameters.substring(firstIndex + 1, lastIndex);List<String> methodParameters = Splitter.on(",").omitEmptyStrings().splitToList(parameters);// 获取响应体类型String responseType = method.getType().getQualifiedName();// 获取方法开始的行int startLine = method.getPosition().getLine();// 获取方法结束的行int endLine = method.getPosition().getEndLine();// 获取方法注释String methodComment = method.getDocComment();// 获取方法包含的注解信息List<AnnotationInfo> annotationInfos = Lists.newArrayList();List<CtAnnotation<?>> annotations = method.getAnnotations();for (CtAnnotation<?> annotation : annotations) {AnnotationInfo annotationInfo = new AnnotationInfo();String annotationName = annotation.getAnnotationType().getSimpleName();annotationInfo.setAnnotationName(annotationName);Map<String, CtExpression> annotationValues = annotation.getValues();for (Map.Entry<String, CtExpression> entry : annotationValues.entrySet()) {String attributeName = entry.getKey();Object attributeValue = entry.getValue();annotationInfo.addAttributeName(attributeName, attributeValue.toString());}annotationInfos.add(annotationInfo);}// 获取方法的访问修饰符String accessModifier = "";if (Objects.isNull(method.getVisibility())) {accessModifier = "default";} else {accessModifier = method.getVisibility().toString();}String methodId = generateIdentityUtil.generateMethodId(MethodSignature.builder().packagePath(packageName).className(className).methodName(methodName).parameterTypeString(methodParameters).build(), endLine - startLine + 1);MethodStruct old = null;// 基于规则判断一波是否需要询问chatint lineCount = endLine - startLine;MethodStruct methodStruct = MethodStruct.builder().appCode(GlobalVariableUtil.getAppCodeName()).methodId(methodId).methodName(methodName).classId(generateIdentityUtil.generateClassId(className, packageName, GlobalVariableUtil.getAppCodeName())).paramTypes(methodParameters).responseType(responseType).beginLine(startLine).endLine(endLine).branch(GlobalVariableUtil.getBranch()).methodDesc(methodComment).annotationInfos(annotationInfos).accessModifier(accessModifier).invokeCount(old == null ? 0 : old.getInvokeCount()).mermaidFlowGraph(old == null ? "" : old.getMermaidFlowGraph()).build();if (old == null) {methodStructs.add(methodStruct);}} catch (Exception e) {log.error("method parse error, className ==>{}, methodName ==>{}, errMsg ==>",className, method.getSimpleName(), e);}}}
//       方法元信息入库}

通过这种方式,我们就能拿到整个 Java 项目的方法信息。

需要注意的是,我们这个时候还没有使用 AI 技术,所以这个元信息中部分字段是空的。

我们看到类解析器和方法解析器方法的入参都是 List<CtType<?>> elements

那么,这个信息从哪里来的呢?

我这里使用的是 Spoon 工具。

Spoon 是什么?

Spoon 框架常被用于解析和处理 Java 源代码。Spoon 是一个强大的源码分析与转换工具,它通过构建抽象语法树(Abstract Syntax Tree, AST)来表示 Java 源代码,并提供了一套丰富的 API 供开发者操作 AST。

Spoon 能够完整且准确地捕获源代码的所有细节,所以它非常适合于进行复杂的静态代码分析、重构、自动插入代码逻辑等工作。

Spoon 不会用?没关系,AI 可以帮你写代码。

我们可以看到,GPT 直接帮我们生成完整代码,我们只需要在对应的地方,替换成我们的类解析器和方法解析器即可。

提示词如下:

你是一个Java技术专家。
我需要解析本地的一个 Java 项目,获得这个项目中的类信息和方法信息。我会给你提供这个 Java 项目的绝对路径。
请你使用 Spoon 生成解析代码

写到这里,我要告诉你的是,其实类解析器和方法解析的代码,也可以交给 AI 来完成哟~ 你可以试试看,如果有问题,随时找阿七给你解答。

到这里,我们今天的内容就结束啦。

下一篇,我们分享使用 AI 生成方法的流程图,请期待~

http://www.tj-hxxt.cn/news/66993.html

相关文章:

  • 做富集分析的网站新业务在线软件下载
  • php网站数据库怎样导入网站推广什么意思
  • 做网站时导航条一般用什么样式上海seo推广整站
  • 建设网站公司项目推广平台有哪些
  • 做平面设计应该在哪个网站求职免费的黄冈网站有哪些平台
  • dedecms本地打开网站seo sem推广
  • 百度网站分析工具拉新推广怎么做
  • 什么什么云用来做网站公关团队
  • 网站开发 方案 报价单网络营销的常用方法有哪些
  • 网站标题如何书写seo包年优化费用
  • 西安网站建设个人北京学校线上教学
  • 世界知名网站企业推广视频
  • 线上app怎么做seo培训优化
  • 河南如何做网站网站权重是什么意思
  • 什么网站有做册子版今天今日头条新闻
  • 网站内容页相关性怎么做爱上链外链购买交易
  • 网站域名管理怎么登陆百度快照查询入口
  • 建立一个网站大约要多少钱百度问一问官网
  • 建设专门网站 强化信息宣传网络营销软文案例
  • php免费企业网站源码推广竞价托管公司
  • 今天郑州新闻头条网站设计优化
  • 做网站腾讯云服务器字节跳动广告代理商加盟
  • 电影网站域名济南百度代理
  • 网站建设师百度百科如何做好线上推广和引流
  • 做网站公司起什么名字唐山百度seo公司
  • 墨刀可以做网站原型图吗怎么做网站排名
  • 网站管理系统推荐网页设计制作网站代码
  • 学网页设计有什么网站网页制作培训网站
  • 网站后期维护内容ueeshop建站费用
  • 淘宝客网站建设难度大吗各大网址收录查询