View Javadoc
1 /**
2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3 */
4 package net.sourceforge.pmd.lang.java.rule.codesize;
5
6 import java.util.HashMap;
7 import java.util.List;
8 import java.util.Map;
9
10 import net.sourceforge.pmd.lang.ast.Node;
11 import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration;
12 import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
13 import net.sourceforge.pmd.lang.java.ast.ASTFieldDeclaration;
14 import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule;
15 import net.sourceforge.pmd.lang.rule.properties.IntegerProperty;
16 import net.sourceforge.pmd.util.NumericConstants;
17
18
19 public class TooManyFieldsRule extends AbstractJavaRule {
20
21 private static final int DEFAULT_MAXFIELDS = 15;
22
23 private Map<String, Integer> stats;
24 private Map<String, ASTClassOrInterfaceDeclaration> nodes;
25
26 private static final IntegerProperty MAX_FIELDS_DESCRIPTOR = new IntegerProperty(
27 "maxfields", "Max allowable fields",
28 1, 300, DEFAULT_MAXFIELDS, 1.0f
29 );
30
31 public TooManyFieldsRule() {
32 definePropertyDescriptor(MAX_FIELDS_DESCRIPTOR);
33 }
34
35 @Override
36 public Object visit(ASTCompilationUnit node, Object data) {
37
38 int maxFields = getProperty(MAX_FIELDS_DESCRIPTOR);
39
40 stats = new HashMap<String, Integer>(5);
41 nodes = new HashMap<String, ASTClassOrInterfaceDeclaration>(5);
42
43 List<ASTFieldDeclaration> l = node.findDescendantsOfType(ASTFieldDeclaration.class);
44
45 for (ASTFieldDeclaration fd: l) {
46 if (fd.isFinal() && fd.isStatic()) {
47 continue;
48 }
49 ASTClassOrInterfaceDeclaration clazz = fd.getFirstParentOfType(ASTClassOrInterfaceDeclaration.class);
50 if (clazz != null && !clazz.isInterface()) {
51 bumpCounterFor(clazz);
52 }
53 }
54 for (String k : stats.keySet()) {
55 int val = stats.get(k);
56 Node n = nodes.get(k);
57 if (val > maxFields) {
58 addViolation(data, n);
59 }
60 }
61 return data;
62 }
63
64 private void bumpCounterFor(ASTClassOrInterfaceDeclaration clazz) {
65 String key = clazz.getImage();
66 if (!stats.containsKey(key)) {
67 stats.put(key, NumericConstants.ZERO);
68 nodes.put(key, clazz);
69 }
70 Integer i = Integer.valueOf(stats.get(key) + 1);
71 stats.put(key, i);
72 }
73 }
--------------------------------------------------------------------------------
This page was automatically generated by Mavenclass TooManyFieldsRule
分享到:
相关推荐
class汉化工具class汉化工具class汉化工具class汉化工具
ClassFinal是一款java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译
python实现的简单的class解析以及简单执行class,使用python2解析java class文件,并简单执行 class,让大家更加了解class
ClassFinal-java class文件安全加密工具
打印机驱动 佳能Canon imageCLASS MF211 驱动打印机驱动 佳能Canon imageCLASS MF211 驱动打印机驱动 佳能Canon imageCLASS MF211 驱动打印机驱动 佳能Canon imageCLASS MF211 驱动打印机驱动 佳能Canon imageCLASS ...
<div class=chose-ck v-for=(item,index2) key=index2 ref=chosebox> <p>{{item.name}} <dt v-for=(item2,index) in item.childsCurGoods :key=item2.id :class=index==iac[index2]?'check':'' :id=item2.id :...
众所周知,java编译后的class文件是一种中间字节码文件, 很容易被反编译工具反编译,而传统的java源代码保护方法基本都是采用混淆的方式, 但这样会带来很多麻烦,而且也不能真正保护class文件, 很多工具是对class...
class识别jdk版本 jdk版本 class识别jdk版本 jdk版本
很小巧的javaclass反编译工具 只需要把点击exe文件执行 然后点击打开想要反编译的class文件 在对应的目录下就会生成.java的javabean文件 非常好用
1.Nested Class(嵌套类) 1.1.Nested class 1.2.Nested class的分类 1.3.Nested class的使用原因 2.Static Nested Classes 2.1.static nested class访问enclosing class(outer class)的成员 2.2.enclosing...
轻松方便的把class文件转化为java文件
class文件打开工具不需要安装,直接将class文件拖拽到窗口即可
excel_class php的excel类 excel_class php的excel类 excel_class php的excel类
CLASS文件直接修改工具,相当好用,大家可以试试哟!
定义一个基类BaseClass,从它派生出类DerivedClass。BaseClass有成员函数fn1(),fn2(),DerivedClass也有成员函数fn1(),fn2()。在主函数中声明一个DerivedClass的对象,分别用DerivedClass的对象以及BaseClass和...
class-dump, class-dump-z.exe,class-dump-z win版本
java class反编译后的代码还原 java class反编译后的代码还原
ldap提示object class violation
经典的uvm class手册,欢迎大家阅读
在Eclipse中反编译Class文件完全详解在Eclipse中反编译Class文件完全详解在Eclipse中反编译Class文件完全详解