所以这就是问题所在。我有一个文件说A.java。现在不要理会语法。但这是我的目标。
import com.random.OrderSRO;
import com.random.SuborderSRO;
public A {
public void doRandom(){
OrderSRO orderSRO = service.getOrderByCode(request).getOrderSRO();
oEDTO.setCustomerName(orderSRO.getCustomerName());
for (SuborderSRO suborderSRO : orderSRO.getSuborders()) {
SOI undeliveredSOI = iShService.getSOIBySuborder(suborderSRO.getCode());
oEDTO.setSuborders(allSuborders);
oEDTO.setShDetail(pack.getShDetail());
oEDTO.setShMethod(pack.getShMethod().getCode());
oEDTO.setPurchaseDate(DateUtils.dateToString(orderSRO.getCreated(), "yyyy-MM-dd HH:mm:ss"));
oEDTO.setTotalAmount(orderSRO.getSellingPrice());
oEDTO.setPaidAmount(orderSRO.getPaidAmount());
oEDTO.setSdCash(orderSRO.getSdCash());
oEDTO.setShDetailsRequired(true);
}
public void doRandom1() {
OrderSRO orderSRO1 = service.getOrderByCode(request).getOrderSRO();
oEDTO.setPurchaseDate(DateUtils.dateToString(orderSRO1.getCreated(), "yyyy-MM-dd HH:mm:ss"));
oEDTO.setTotalAmount(orderSRO1.getSellingPrice());
oEDTO.setPaidAmount(orderSRO1.getPaidAmount());
oEDTO.setSdCash(orderSRO1.getSdCash());
}
}
我需要检查A.java中正在使用的OrderSRO的哪些方法。让我解释一下我使用的方法。
所以我需要检查像
这样的模式OrderSRO orderSRO = orderClientService.getOrderByCode(request).getOrderSRO();
现在我有可变的orderSRO。我现在需要再次在同一个文件A.java中
虽然我已经能够实现它,但我的方法并不干净。想知道它是否可以巧妙地完成,比如说一行
grep -o 'OrderSRO .*=' EmailServiceImpl.java | awk '{ct[$2];} END {for (var in ct) {str=str "|" var "\\.[a-zA-Z]*"};print str}' >> pat2.txt
cat pat2.txt. This gives me
orderSRO1\.[a-zA-Z]*|orderSRO\.[a-zA-Z]*
grep -Ewof pat2.txt A.java | sort -u
orderSRO.getCode
orderSRO.getCreated
orderSRO.getCustomerName
orderSRO.getMobile
orderSRO.getPaidAmount
orderSRO.getSdCash
orderSRO.getSellingPrice
orderSRO.getSuborders
orderSRO1.getMobile
orderSRO1.getPaidAmount
orderSRO1.getSdCash
orderSRO1.getSellingPrice
orderSRO1.getSuborders
答案 0 :(得分:0)
我无法自拔。这是一个非常自定义的awk脚本:
awk -F"[.]*OrderSRO[ ]*|[ ]*=" 'NF>2 {a[$2]; next} {for( i in a ) {c=split($0, line, i".|[(][)]"); if(c==3&&line[2]!~/^\./) print i"."line[2]}}' A.java
产生:
orderSRO.getCustomerName
orderSRO.getSuborders
orderSRO.getCode
orderSRO.getCreated
orderSRO.getSellingPrice
orderSRO.getPaidAmount
orderSRO.getSdCash
orderSRO1.getCreated
orderSRO1.getSellingPrice
orderSRO1.getPaidAmount
orderSRO1.getSdCash
其中方法调用按文件顺序排列,并至少具有以下假设:
它与问题输出不匹配,因为样本orderSRO.getMobile()
中不存在A.java
之类的内容。
这是一个多线视图:
awk -F"[.]*OrderSRO[ ]*|[ ]*=" '
NF>2 {a[$2]; next}
{
for( i in a ) {
c=split($0, line, i".|[(][)]")
if(c==3&&line[2]!~/^\./)
print i"."line[2]
}
}' A.java
可以翻译成:
FS
以在NF>2
NF>2
时,将变量名添加到数组中,不要尝试处理该行split()
变量名称+"。"或"()" (这就是为什么这只适用于没有arg getters的原因)split()
计数(c
)为3时,第二个元素应为吸气剂如果你必须一直这样做,那么你最好使用能够原生地理解代码的东西。也就是说,在没有多次搜索的情况下,我无法想到在Eclipse中执行此操作的方法。