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
分享到:
相关推荐
Java ClassFinal是一款针对Java类文件的安全加密工具,主要用于保护开发者编写的Java代码不被轻易反编译和篡改,从而增强软件的安全性。在Java应用开发中,源代码的保护至关重要,因为Java的字节码(class文件)是可...
ClassFinal正是为解决这些问题而设计的一款Java类文件安全加密工具。这款工具能够对编译后的`.class`文件进行加密处理,使得未经授权的用户无法轻易读取或反编译代码,从而提高代码的安全性。 ClassFinal的特点在于...
### Class.forName 的用法详解 #### 一、概述 `Class.forName` 是 Java 反射 API 中的一个重要方法,主要用于动态加载类。该方法的主要作用是根据提供的全限定类名来加载并返回对应的 `Class` 对象。在 Java 开发...
ClassFinal是一款专业的Java字节码加密工具,它的主要功能是提供对Java编译后生成的.class文件的安全加密处理,保障Java应用程序代码的安全性。该工具具备直接加密jar包或war包的能力,这是因为它能够处理Java应用...
Java 反编译是指将编译后的.class 文件转换回原始的.java 源代码的过程。在实际开发中,我们可能需要反编译.class 文件以便于修改或 debugging。下面将详细介绍.class 文件反编译到.java 文件的过程,包括反编译...
class-dump, class-dump-z.exe,class-dump-z win版本
USB 设备类型 device class 代码完整版 USB 设备类型 device class 代码是一种用于标识设备功能和加载设备驱动程序的代码信息。该信息被包含在三个字节中,分别是 Base Class、SubClass 和 Protocol。这些信息可以...
破解ClassIn强制全屏需要通过C++编写一个破解器,首先需要了解ClassIn强制全屏的原理。一般来说,ClassIn通过调用系统API或者操作系统的特定功能来实现全屏显示,我们需要通过Hook技术截获这些调用,然后修改其行为...
打印机驱动 佳能Canon imageCLASS MF211 驱动打印机驱动 佳能Canon imageCLASS MF211 驱动打印机驱动 佳能Canon imageCLASS MF211 驱动打印机驱动 佳能Canon imageCLASS MF211 驱动打印机驱动 佳能Canon imageCLASS ...
"Java中通过Class类获取Class对象的方法详解" Java中获取Class对象是Java基础知识中的一个重要部分,通过Class类可以获取Class对象,Class对象是Java虚拟机在加载类时自动构造的。下面将详细介绍通过Class类获取...
Java泛型的用法及T.class的获取过程解析 Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析...
赠送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...
内容概要:这里面包含了一些嵌入式 MCU Class B 安全功能开发的文档资料以及 ST 官方提供的 Class B 固件库,该库可移植到自己的代码上实现 MCU CPU寄存器,FLASH,RAM,系统时钟,看门狗的自检。 适合人群:对...
Java元数据——Class类 Java中的元数据Class类是一个基础的概念,它代理了这个类的类型信息、方法签名、属性等信息。每个类都有一个Class对象,它用来创建这个类的所有对象。每个对象的创建都依赖于Class对象的创建...
标题中的“CLASS直接修改工具”指的是用于操作Java字节码(.class文件)的软件工具。这类工具允许开发者查看、分析甚至修改Java类文件的内部结构,通常在进行逆向工程、调试、优化或者安全研究时使用。Java字节码是...
<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字节码或者进行逆向工程时的重要辅助工具。在Java编程环境中,源代码会被编译成字节码(.class文件),这些字节码是机器不可读的,但是可以由Java虚拟机(JVM)执行。...
《class-dump-z:全平台神器,探索iOS与跨平台逆向工程的得力助手》 在IT行业中,尤其是在移动应用开发和安全分析领域,逆向工程是一项至关重要的技能。它可以帮助开发者理解软件的工作原理,查找漏洞,或者优化...
在Java编程语言中,`.class`文件是Java字节码的载体,它是Java源代码(`.java`文件)经过编译后的结果。这些字节码文件可以在任何支持Java的平台上运行,无需关心底层硬件架构。然而,由于`.class`文件是二进制格式...
classin_mover_version.2.1.0可以在ClassIn老师上课启用专注模式,无法最小化窗口时破解ClassIn的窗口置顶最大化,允许切出ClassIn。