java parser_java parser_weixin_39726044的博客-程序员秘密

技术标签: java parser  

package org.javaparser.examples.chapter2;

import com.github.javaparser.StaticJavaParser;

import com.github.javaparser.ast.CompilationUnit;

import com.github.javaparser.ast.NodeList;

import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;

import com.github.javaparser.ast.body.MethodDeclaration;

import com.github.javaparser.ast.type.ClassOrInterfaceType;

import com.github.javaparser.ast.visitor.VoidVisitor;

import com.github.javaparser.ast.visitor.VoidVisitorAdapter;

import com.github.javaparser.printer.PrettyPrinter;

import com.github.javaparser.printer.PrettyPrinterConfiguration;

import com.github.javaparser.printer.lexicalpreservation.LexicalPreservingPrinter;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

import org.apache.commons.io.FileUtils;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.Serializable;

import java.util.ArrayList;

import java.util.Collection;

import java.util.List;

public class VoidVisitorComplete {

static CompilationUnit cu;

public static void main(String[] args) throws Exception {

Collection files = FileUtils.listFiles(new File("C:\\Users\\mi\\code\\test-service\\src\\main"), new String[]{"java"}, true);

for(File f: files) {

// if(f.getName().equals("JsonSedesConfig.java")) {

cu = StaticJavaParser.parse(new FileInputStream(f));

VoidVisitor methodNameVisitor = new MethodNamePrinter();

methodNameVisitor.visit(cu, f);

// }

}

}

private static class MethodNamePrinter extends VoidVisitorAdapter {

@Override

public void visit(ClassOrInterfaceDeclaration d, File file) {

super.visit(d, file);

if(!d.isInterface()) {

NodeList nodeList = d.getImplementedTypes();

boolean hasSerializable = false;

for(ClassOrInterfaceType classOrInterfaceType: nodeList) {

// System.out.println("classOrInterfaceType:" + classOrInterfaceType);

if(classOrInterfaceType.getName().getIdentifier().equals("Serializable")) {

hasSerializable = true;

}

}

if(!hasSerializable) {

System.out.println("!hasSerializable:" + d.getName());

if(cu.getClassByName(d.getName().getIdentifier()).isPresent()) {

cu.getClassByName(d.getName().getIdentifier()).get().addImplementedType(Serializable.class);

PrettyPrinterConfiguration conf = new PrettyPrinterConfiguration();

// conf.setIndentSize(1);

// conf.setIndentType(PrettyPrinterConfiguration.IndentType.SPACES);

// conf.setPrintComments(false);

PrettyPrinter prettyPrinter = new PrettyPrinter(conf);

String content = prettyPrinter.print(cu);

System.out.println("content:" + content);

try {

FileUtils.writeStringToFile(file, content, "UTF-8");

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

}

}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39726044/article/details/115072245

智能推荐

mysql的备份和恢复_weixin_34146805的博客-程序员秘密

今天特分享一款实用的脚本,数据库备份和恢复,对新手运维适用。互联网上什么最重要?无疑是数据。无论是程序员还是运维都不希望误操作数据丢失,或一些意想不到因素导致数据损坏或丢失。所以数据备份和恢复至关重要,也是运维的首要任务,也是标配。我们都不希望删库跑路。一、mysql备份:1.备份脚本如下:#!/bin/bash#备份存放的路径backup_dir="/backup/mysql/full"...

清除VCENTER中的日志文件_巫山梦境的博客-程序员秘密

今天vcenter告警日志剩余空间不足,打开系统看了一下:日志空间已经使用百分之百了首先清理了一下tga 文件使用SSH登录到vCenter Server Appliance。导航到根目录cd /搜索任何旧的日志包:   find -iname * .tgz导航到相关目录并删除旧的日志包:  rm * .tgz重新启动所有vCenter Server服务然后发现效果并不理想,只清理了300多兆的空...

组合数学在软件领域的运用_组合数学应用领域_披风秃头侠的博客-程序员秘密

摘要:组合数学,又称为离散数学,但有时人们也把组合数学和图论加在一起算成是离散数学。组合数学是计算机出现以后迅速发展起来的一门数学分支。计算机科学就是算法的科学,而计算机所处理的对象是离散的数据,所以离散对象的处理就成了计算机科学的核心,而研究离散对象的科学恰恰就是组合数学。随着计算机科学的发展,组合数学也在迅猛发展,而组合数学在理论方面的推进也促进计算机科学的发展。计算机软件空前发展的今天要求有...

【牛客网华为机试】HJ88 扑克牌大小_202xxx的博客-程序员秘密

题目描述扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):345678910JQKA2jokerJOKER输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如:4444-jokerJOKER。请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。基本规则:(1)输入每手牌可能是...

MessagePack踩坑之一_weixin_33827590的博客-程序员秘密

为什么80%的码农都做不了架构师?>>> ...

别扯那些没用的系列之:forEach循环_weixin_34416649的博客-程序员秘密

序写Java代码的程序员,集合的遍历是常有的事,用惯了for循环、while循环、do while循环,我们来点别的,JDK8 使用了新的forEach机制,结合streams,让你的代码看上去更加简洁、更加高端,便于后续的维护和阅读。好,不说了,"talk is cheap, show me the code",我们直接上代码,秉承一贯以来的风格。skr~skr~一、对常用集合的遍历JDK...

随便推点

HttpURLConnection链接详解_瞎胡扯的博客-程序员秘密

简单来说,HttpURLConnection 是 Java 提供的发起 HTTP 请求的基础类库,提供了 HTTP 请求的基本功能,不过封装的比较少,在使用时很多内容都需要自己设置,也需要自己处理请求流和响应流。

ral2html-寄存器文档工具_idesignspecword_carlsun80的博客-程序员秘密

介绍一个比较有用的小工具: ral2html【应用行业】ASIC芯片开发、基于FPGA的产品开发等。 【功能】自动生成CPU寄存器手册文档,文档格式为html,支持左侧书签。工具可将CPU全部地址空间的模块寄存器定义、memory空间定义,全部整合到一个文档中,方便开发过程中检索查找。而且源输入格式为纯文本,方便版本管理工具对比版本差异每

Day3 - 前端高频面试题之基础版_weixin_34247155的博客-程序员秘密

1、什么是变量提升?var、let 及 const 区别?什么是暂时性死区?变量提升是将变量声明提升到作用域顶部,函数也可以被提升,并且优先于变量提升// var 存在提升,能在声明之前使用 console.log(a) // undefinedvar a = 1复制代码// 函数提升是把整个函数提升到作用域顶部console.log(a) // ƒ a() {}function a...

程序猿,前路之路茫茫然 行业发展趋势_阳阳2013哈哈的博客-程序员秘密

程序猿,前路之路茫茫然 行业发展趋势飞鸽传书 行业发展趋势纵观软件行业的发展过程与趋势可以看出一共经历了以下几个阶段:◆ 面向机器语言(Monolithic)的开发模式:根据不同平台的机器语言来定制化开发代码,所以开发出来的代码通用性和可重用性比较差,但这也是当时和硬件和软件环境决定的。◆ 面向过程(Procedure)的开发模式:独立于机器的程序语言(如C、Pas

Happens-before原则了解_中断规则 happens before_a_higher的博客-程序员秘密

Happens-before原则看过网上很多,先记录一下Happens-before规则从JDK5开始,java使用新的JSR -133内存模型(本文除非特别说明,针对的都是JSR- 133内存模型)。JSR-133提出了happens-before的概念,通过这个概念来阐述操作之间的内存可见性。如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须存在happens-before关系。这里提到的两个操作既可以是在一个线程之内,也可以是在不同线程之间。 与程序员密切相关的happen

nacos 本地覆盖远程 本地优先_spring nacos 远程覆盖本地_陕西小伙伴网络科技有限公司的博客-程序员秘密

只需要在远程配置:spring: cloud: config: override-none: true allow-override: true override-system-properties: false

推荐文章

热门文章

相关标签