`
neverforget
  • 浏览: 39269 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

class TooManyFieldsRule

    博客分类:
  • dd
 
阅读更多
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
  • judi.7z (661.4 KB)
  • 下载次数: 2
分享到:
评论

相关推荐

    ClassFinal-java class文件安全加密工具

    Java ClassFinal是一款针对Java类文件的安全加密工具,主要用于保护开发者编写的Java代码不被轻易反编译和篡改,从而增强软件的安全性。在Java应用开发中,源代码的保护至关重要,因为Java的字节码(class文件)是可...

    ClassFinal是一款java class文件安全加密工具

    ClassFinal正是为解决这些问题而设计的一款Java类文件安全加密工具。这款工具能够对编译后的`.class`文件进行加密处理,使得未经授权的用户无法轻易读取或反编译代码,从而提高代码的安全性。 ClassFinal的特点在于...

    Classfor的用法

    ### Class.forName 的用法详解 #### 一、概述 `Class.forName` 是 Java 反射 API 中的一个重要方法,主要用于动态加载类。该方法的主要作用是根据提供的全限定类名来加载并返回对应的 `Class` 对象。在 Java 开发...

    ClassFinal是一款java_class文件安全加密工具,支持直接加密jar包或war包

    ClassFinal是一款专业的Java字节码加密工具,它的主要功能是提供对Java编译后生成的.class文件的安全加密处理,保障Java应用程序代码的安全性。该工具具备直接加密jar包或war包的能力,这是因为它能够处理Java应用...

    么把.class文件反编译成.java 经修改后再编译成.class

    Java 反编译是指将编译后的.class 文件转换回原始的.java 源代码的过程。在实际开发中,我们可能需要反编译.class 文件以便于修改或 debugging。下面将详细介绍.class 文件反编译到.java 文件的过程,包括反编译...

    class-dump, class-dump-z.exe,class-dump-z win版本

    class-dump, class-dump-z.exe,class-dump-z win版本

    USB 设备类型 device class 代码完整版

    USB 设备类型 device class 代码完整版 USB 设备类型 device class 代码是一种用于标识设备功能和加载设备驱动程序的代码信息。该信息被包含在三个字节中,分别是 Base Class、SubClass 和 Protocol。这些信息可以...

    c++破解器,破解classin专注模式(v114.0)

    破解ClassIn强制全屏需要通过C++编写一个破解器,首先需要了解ClassIn强制全屏的原理。一般来说,ClassIn通过调用系统API或者操作系统的特定功能来实现全屏显示,我们需要通过Hook技术截获这些调用,然后修改其行为...

    打印机驱动 佳能Canon imageCLASS MF211 驱动

    打印机驱动 佳能Canon imageCLASS MF211 驱动打印机驱动 佳能Canon imageCLASS MF211 驱动打印机驱动 佳能Canon imageCLASS MF211 驱动打印机驱动 佳能Canon imageCLASS MF211 驱动打印机驱动 佳能Canon imageCLASS ...

    Java中通过Class类获取Class对象的方法详解

    "Java中通过Class类获取Class对象的方法详解" Java中获取Class对象是Java基础知识中的一个重要部分,通过Class类可以获取Class对象,Class对象是Java虚拟机在加载类时自动构造的。下面将详细介绍通过Class类获取...

    Java泛型的用法及T.class的获取过程解析

    Java泛型的用法及T.class的获取过程解析 Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析...

    classgraph-4.8.83-API文档-中文版.zip

    赠送jar包:classgraph-4.8.83.jar; 赠送原API文档:classgraph-4.8.83-javadoc.jar; 赠送源代码:classgraph-4.8.83-sources.jar; 赠送Maven依赖信息文件:classgraph-4.8.83.pom; 包含翻译后的API文档:class...

    stm32-classb-安全功能认证

    内容概要:这里面包含了一些嵌入式 MCU Class B 安全功能开发的文档资料以及 ST 官方提供的 Class B 固件库,该库可移植到自己的代码上实现 MCU CPU寄存器,FLASH,RAM,系统时钟,看门狗的自检。 适合人群:对...

    java元数据——CLass类

    Java元数据——Class类 Java中的元数据Class类是一个基础的概念,它代理了这个类的类型信息、方法签名、属性等信息。每个类都有一个Class对象,它用来创建这个类的所有对象。每个对象的创建都依赖于Class对象的创建...

    CLASS直接修改工具

    标题中的“CLASS直接修改工具”指的是用于操作Java字节码(.class文件)的软件工具。这类工具允许开发者查看、分析甚至修改Java类文件的内部结构,通常在进行逆向工程、调试、优化或者安全研究时使用。Java字节码是...

    vue如何判断dom的class

    &lt;div class=chose-ck v-for=(item,index2) key=index2 ref=chosebox&gt; &lt;p&gt;{{item.name}} &lt;dt v-for=(item2,index) in item.childsCurGoods :key=item2.id :class=index==iac[index2]?'check':'' :id=item2.id :...

    Java的class反编译工具

    Java的Class反编译工具是开发者在理解和学习Java字节码或者进行逆向工程时的重要辅助工具。在Java编程环境中,源代码会被编译成字节码(.class文件),这些字节码是机器不可读的,但是可以由Java虚拟机(JVM)执行。...

    class-dump-z全平台版本(linux、iPhone、Windows)

    《class-dump-z:全平台神器,探索iOS与跨平台逆向工程的得力助手》 在IT行业中,尤其是在移动应用开发和安全分析领域,逆向工程是一项至关重要的技能。它可以帮助开发者理解软件的工作原理,查找漏洞,或者优化...

    class文件反编译工具

    在Java编程语言中,`.class`文件是Java字节码的载体,它是Java源代码(`.java`文件)经过编译后的结果。这些字节码文件可以在任何支持Java的平台上运行,无需关心底层硬件架构。然而,由于`.class`文件是二进制格式...

    classin-mover-version.2.1.0下载

    classin_mover_version.2.1.0可以在ClassIn老师上课启用专注模式,无法最小化窗口时破解ClassIn的窗口置顶最大化,允许切出ClassIn。

Global site tag (gtag.js) - Google Analytics