有什么必要?
Java编译的强制规则使其成为必要。Java需要知道代码域中是什么,以便验证是否遵循了规则。域是类路径中的一组jar文件。
如果实现接口,则非抽象实现类或实现接口的类的非抽象子类需要实现该接口。需要满足重写注释的要求。对其他方法的引用必须是可见的,无论是从代码角度还是从人的角度来看。如果一个方法使用不同类或接口中的方法,则调用类需要知道该方法的签名。
我该怎么做?
我将使用“分类器”来引用类和接口。
您需要从一组已知的已验证分类器和已知的未验证分类器开始。
仔细检查每个未验证的分类器,并识别所使用的任何未知分类器,并将它们添加到未验证分类器集中。
验证当前未验证的分类器是否在类路径上。如果未找到,则出错。
将已处理的分类器从“未验证”移到“已验证”。
使用的分类器包括字段类型、方法返回类型、方法参数类型、参数中的变量类型、扩展类、实现的接口、注释,在某些情况下还包括Javadoc引用。根据您的项目规则,仅使用导入可能会错过一些东西。一个接口可能在同一个包中,但来源于不同的项目。
这些操作使用基于文本的切换来完成代码。反射可以使用字符串“”创建类包.类名没有被标识为“二手类”。这些概念将需要超出纯源代码分析或字节码分析范围的额外处理。