首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

代码洁癖症的我,学习Lint学到心态爆炸

本文开始的红色错误可以通过注解来消除(一般建议是根据提示进行修正,除非明白自己在做什么),可以在类或该代码所在的方法添加@SuppressLint。 ?...自定义Lint 规则的过程也就是重写Detector类相关方法的过程。具体看下小结实践。 Scanner 扫描并发现代码中的Issue,Detector需要实现Scaner,可以继承一个到多个。...定义类NamingConventionDetector,并继承自Detector。因为这里是检测Java文件类名和方法是否符合规则,所以实现Detector.UastScanner接口。...,可以根据具体需求,重写抽象类AbstractUastVisitor的visitXXX方法。...重启Android Studio,让规则生效。检测到方法大写,不符合命名规范,报导该问题。 ? 类名不符合规范: ? 从上文可以看到,放在目录下的jar包对所有工程都是有效的。

1.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    详解C# 利用反射根据类名创建类的实例对象

    EXE 或 DLL) dynamic obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例 2、若要反射当前项目中的类(即当前项目已经引用它了...(即包括命名空间)"); // 创建类的实例,返回为 object 类型,需要强制类型转换 3、也可以为: Type type = Type.GetType("类的完全限定名"); dynamic...======================================================= 补充: 1)反射创建某个类的实例时,必须保证使用类的完全限定名(命名空间 + 类名)。...我们编写的代码中不是有很多很多的类吗,类有很多很多的成员,在编译代码的时候,元数据表就根据代码把类的所有信息都记录在了它里面(其实它就是一个数据结构,组织类的信息)。...最后对比下: 元数据形成:根据代码具体shu容形成类的记录信息; 反射:根据元数据的记录找到所需的代码; 至于实例,用Type类实现很方便: Type t = typeof(System.string)

    3.1K10

    管中窥豹:结合NewApi实践来了解Lint代码扫描

    01 Issueid:规则名,唯一; 02 Summary:规则的简单概述; 03 Priority:优先级,1~10,10为最严重 04 Severity:严重性,Fatal,Error,Warning...01 Issue:lint规则定义,比如NewApi,lint已有规则列表维护在BuiltinIssueRegistry类中,目前lint官网提供有280+个规则,可以按需打开也可以修改各个规则的严重级别...:连接检查项和检测器,也声明规则的查找范围,常用的scope包括CLASS_FILE,JAVA_FILE,RESOURCE_FILE等; 04 Registry:注册模块,lint维护了一张所有规则的列表...自定义lint规则是以jar形式存在的,通过继承lint的两个类来实现规则扩展: ①继承IssueRegistry:自定义Lint规则的主类,有且只有一个,注册这个自定义Lint项目中有哪些自定义的issue...②继承Detector并实现Detector中合适的XXXScanner接口:可以根据需求实现多个自定义Detector类,在每个Detector类中实现自定义的一个或多个issue; ?

    1.5K100

    【Android 逆向】应用安装目录 ( Android 应用的默认安装目录 | 查找 Android 应用的安装目录 | 查询当前正在运行的应用包名 | 根据包名查询应用安装路径 )

    文章目录 一、Android 应用的默认安装目录 二、查找 Android 应用的安装目录 1、查询当前正在运行的应用包名 2、根据包名查询应用安装路径 一、Android 应用的默认安装目录 ---..., 这是应用的内存存储空间 , 应用拥有该目录下的所有权限 , 存放应用运行时所需的数据 ; 二、查找 Android 应用的安装目录 ---- 如果系统是定制的 , 可能应用安装目录不是上述路径..., 这时可以使用下面的方法查找 Android 应用的安装目录 ; 1、查询当前正在运行的应用包名 使用 dumpsys activity top | grep pid 命令 , 查询当前正在运行的应用的包名...com.google.android.apps.nexuslauncher/.NexusLauncherActivity c848feb pid=3004 walleye:/system/app # 2、根据包名查询应用安装路径...上面查询的正在运行的应用中 , 查询起点中文网的应用包名 ; ACTIVITY com.qidian.QDReader/.ui.activity.QDReaderActivity 6c25868 pid

    5.8K10

    反射-详细概念

    任何类被使用时都会创建一个Class对象。 Class类是Java反射机制的基础,通过Class类,可以得到一个类的基本信息。...使用反射机制,根据这个字符串获得某个类的Class实例 动态配置实例的属性 java获取反射的三种方法 通过new对象实现反射机制 通过路径实现反射机制 通过类名实现反射机制 class类的对象理解...= Class.forName("fanshe.Student"); System.out.println(classobj2.getName()); //方式三(通过类名...); System.out.println(user); 获得的是默认有参的构造方法(公共) uclass.getConstructor Constructor con = uclass.getConstructor...、属性的值,也可以对属性进行赋值 获得指定的公共的成员变量 uclass.getField("num");//获得指定的公共的成员变量 uclass.getDeclaredField("name");获得指定私有的成员变量

    28420

    AndroidLintWatchDog Custom-Lint 自定义Lint检查的实现

    Android Lint 内置了很多 Lint 规则,用来检测一些常见的代码问题(例如,正确性问题、安全问题、性能问题,等等)。...利用自定义 Lint 规则,既可以用来在项目中检测代码质量问题,也可以用来保证编码规范的执行。...下面列举一些常见的lint会检测的代码问题: 缺少翻译(和未使用的翻译); 布局性能问题(老的 layout opt 工具会用于查找所有这样的问题,和除此之外更多的问题); 未使用的资源; 不一致的数组大小...在这里根据自身业务需求,实现各种自定义探测器(Detector ),并定义各种 issue,根据自身需求的不同这样的类可以有一个或多个。...2 ImageFileSizeDetector 目标:检查图片文件尺寸是否超过某个限定的大小。

    91920

    听GPT 讲Rust源代码--compiler(43)

    EarlyLintPass trait则定义了前期代码检查的方法和属性,这个trait的实现类会在编译器的解析阶段进行调用。...具体来说,该函数会遍历抽象语法树(AST)中的节点,查找使用了enum宏的地方,并对这些地方进行检查。 在函数实现中,首先会获取到使用enum宏的相关信息,包括调用的位置、使用的宏名等。...这个结构体的作用是在编译器推断类型的过程中,根据一些规则来增加类型边界,从而确保不透明类型的正确使用。...在Rust编译器中启用该lint规则后,编译器将会根据规则检查代码中的方法调用,如果发现不必要的方法调用则会输出警告信息,帮助开发者提高代码质量和性能。...对于通过值传递的参数,将其标记为警告或错误,具体根据lint的配置。 根据不同的情况,生成相应的lint报告或警告信息,并添加到编译器的报告列表中。

    9910

    静态测试技术之 Lint 冗余资源清理

    二、冗余资源的清理 随着长时间的版本迭代,工程中会冗余许多资源文件,手动查找删除效率太低难免有漏网之鱼,代码扫描工具可以方便的查找出未被引用的图片、ID等资源,本文主要应用Android lint的unUsedResources...规则进行冗余资源查找清理。...: 配置文件中支持几个维度的自定义配置: (1)规则id级别调整,置为ignore则该规则不生效,如: (2)路径忽略,如: (3)正则表达式忽略,如: 三、冗余资源清理原理解析 Lint扫描工具是如何扫描出冗余资源的呢...,查找范围包括Manifest,资源文件,java源文件及测试代码: 1、根据R.java获取资源列表: Detetor类中JavaScanner接口定义的getApplicableNodeTypes...: 2、查找代码中的引用: Detetor类中JavaScanner接口定义的appliesToResourceRefsh()需要与visitResourceReference()函数配合使用,appliesToResourceRefsh

    2.1K00

    Uboot 大全 | uboot 启动流程(二)

    以下为详细介绍: 如何为目标板添加一个dts文件 在arch//dts目录下,添加一个xxx.dts文件,该文件可以从内核拷贝,或者在uboot dts目录下选择一个其它目标板的dts为基础,再根据实际需求进行修改...对上可以为同一类设备提供统一的操作接口,对下可以为驱动提供标准的注册接口,从而提高代码的可重用性和可移植性。同时,驱动模型通过树形结构组织uboot中的所有设备,为系统对设备的统一管理提供了方便。...per_child_auto; int per_child_plat_auto; uint32_t flags; }; 其注册和遍历方式与driver完全相同,只是结构体类型和section名有所不同...udevice是在驱动模型初始化流程中根据扫描到的设备动态创建的,在uboot中实际的设备可以通过以下两种方式定义: devicetree方式:这种方式通过devicetree维护设备信息,uboot在驱动模型初始化时...\ ll_entry_declare(struct driver_info, __name, driver_info) uclass结构体 uclass用于表示一类具有相同功能的设备

    2K40

    团队分享,Bem规范调研及实践

    背景 最近老大在维护别人的代码时,发现我们团队写的样式各有种的想法及风格,这在后续维护会增加一定的难度,所以老大决定统一样式的会名规范,所以就安排我去调研及实践,下面是我调研的结果。...性能 CSS 引擎查找样式表,对每条规则都按从右到左的顺序去匹配,以下这段代码看起来很快,实际上很慢。通常我们会认为浏览器是这样工作的:找到唯一ID元素ul-id —> 把样式应用到li元素上。...在 css 定义时,也必须依靠层级选择器来限定约束作用域,以避免跨组件的样式污染。...假设我们要实现这样的一个卡片功能: 根据上面的设计图,我们用 bem 方式来给对应 class 命名,如下所示: 的命名中只包含三个部分,元素名只占其中一部分,所以不能出现多个元素名的情况。这样的约定可以防止当层级很深命名过长的问题。

    81410

    php命名空间详解

    namespace\Foo 也是一个完全限定名称。 6.4、名称解析规则如下: 6.4.1、对完全限定名称的函数,类和常量的调用在编译时解析。例如 new \A\B 解析为类 A\B。...6.4.2、所有的非限定名称和限定名称(非完全限定名称)根据当前的导入规则在编译时进行转换。...6.4.3、在命名空间内部,所有的没有根据导入规则转换的限定名称均会在其前面加上当前的命名空间名称。...6.4.4、非限定类名根据当前的导入规则在编译时转换(用全名代替短的导入名称)。例如,如果命名空间 A\B\C 导入为C,则 new C() 被转换为 new A\B\C() 。...new D\E()的解析: 6.4.6.3、在类名称前面加上当前命名空间名称变成:A\B\D\E,然后查找该类。 6.4.6.4、尝试自动装载类 A\B\D\E。

    2.5K80

    结合静态代码扫描来给插件间接口把把脉

    选定了工具之后实现部分就水到渠成了,按lint规则扩展来添加需要的检查规则,下图虚线模块是每个自定义规则需要扩展的地方: [W3hAE6A.png] 1、注册规则,声明扫描范围为JAVA_FILE_SCOPE...接口,并定义我们关注的扫描节点: [Eg0f0tR.png] [m3205Xm.png] (1)查找插件接口定义: 在扫描工具中我们可以按抽象语法树来进行代码节点的查找,在Android Lint中scanner...前面说到,手管编译前编译脚本会根据插件配置在框架生成相应的插件及接口常量类: [bqhNzsc.png] 因此插件接口我们可以重写visitClassDeclaration(ClassDeclarationnode...)函数在类声明节点中查找解析相应的类文件,将functionid的内部类的所有常量定义加入接口名list,并收集相应的location信息: [pXwIyRg.png] [kbqhhL2.png] (2...[dh9o8Fj.png] 获取插件接口调用,调用非本插件的接口常量则认为是对外部接口的调用,将插件名及location信息加入到该接口的调用列表中。

    1.3K60

    Lint Tool Analysis (2)

    ,lint规则的查找过程也是在LintClient中定义的,下面的代码片段中包含两个重要的查找自定义lint规则的方法。...- findRuleJars方法是针对指定的project去查找自定义的lint规则,从源码来看,针对project自定义lint规则时只适用于基于Gradle的项目,包括普通的项目和库项目(library...IssueRegistry的类JarFileIssueRegistry,前面我们自定义的lint规则的jar包就是由它来解析并加载的。...此外,这个类使用了缓存机制来保存已经加载过的jar文件,所以也就导致了我们在自定义lint中出现的更改jar包但是Android Studio并没有更新lint规则的bug!...工具是如何查找自定义的lint规则,但是并没有看到这些规则是如何注册到IssueRegistry上去的,而这个艰巨的任务实际上是在LintDriver中完成的,主要流程都在方法registerCustomDetectors

    2.4K20

    PHP中命名空间是怎样的存在?(三)

    例如 new \A\B 解析为类 A\B。 所有的非限定名称和限定名称(非完全限定名称)根据当前的导入规则在编译时进行转换。...在命名空间内部,所有的没有根据导入规则转换的限定名称均会在其前面加上当前的命名空间名称。例如,在命名空间 A\B 内部调用 C\D\e(),则 C\D\e() 会被转换为 A\B\C\D\e() 。...非限定类名根据当前的导入规则在编译时转换(用全名代替短的导入名称)。例如,如果命名空间 A\B\C 导入为C,则 new C() 被转换为 new A\B\C() 。...下面是调用 new C() 及 new D\E() 的解析过程:new C()的解析: 在当前命名空间中查找A\B\C类。 尝试自动装载类A\B\C。...new D\E()的解析: 在类名称前面加上当前命名空间名称变成:A\B\D\E,然后查找该类。 尝试自动装载类 A\B\D\E。

    1K10

    C++为什么有参数依赖查找(ADL)?

    重载解析:如果名称查找找到了多个具有相同名称的声明,编译器将根据上下文和参数类型来选择最合适的声明。...作为变量名// 访问类类型,需要使用作用域运算符MyType::MyType instance; // 正确,访问类MyType非限定名称查找非限定名称查找是指在名字没有出现在域运算符::右边的情况下...在查找时,还存在一些特殊的规则,以下仅举两例:比如在查找域运算符::左边的名字时,会忽略函数、变量、枚举等,只有类型名称会被查找在类内部声明的友元函数,其名称查找规则与成员函数相同。...在类外部定义的友元函数,其查找规则与命名空间中的函数相同。限定名称查找限定名称查找用于处理在作用域解析操作符::右侧出现的名称。...查找合并:将普通未限定查找找到的声明集合与ADL找到的声明集合合并,并应用特殊规则,例如,通过ADL可见的关联类中的友元函数和函数模板,即使它们在普通查找中不可见。

    12110
    领券