快速业务通道

基于JDT的JAR源代码搜索 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
   /* 跳过此  jar 的搜索 */  }

基于JDT的JAR源代码搜索(4)

时间:2010-11-20 IBM 魏强 王芹华 邵兵

步骤 3. 获得 JarPackageFragmentRoot 中的 IClassFile 列表

如果想获得 .class 文 件的源码,就需要获得 .class 文件对应的 IClassFile 对象,下面的程序展示 了如何从 JarPackageFragmentRoot 对象开始遍历,获得其包含的 PackageFragment 对象,又从 PackageFragment 对象中获得 IClassFile 对象 列表。

清单 4. 获取所有类文件的代码

JarPackageFragmentRoot root = …   IJavaElement[] children = root.getChildren();  if (children  != null)  {    /* 遍历 JarPackageFragmentRoot 下的 所有包元素 */    for (IJavaElement ele : children)    {       if (ele instanceof PackageFragment)       {         IJavaElement[] classes =  ((PackageFragment) ele).getChildren();         /* 遍历  PackageFragment 下的所有类元素 */         for  (IJavaElement cls : children)         {            if (ele instanceof IClassFile)            {             /* 获得 IClassFile 对象进行操作  */           }         }        }    }  }

需要注意的是,JDT 中 Jar 文件 中的包(package)对应的类为 JarPackageFragment,但是该类为 default 类 型,无法引用,可以先将它转换为它的父类 PackageFragment,然后进行处理。

步骤 4. 获得 IClassFile 源代码并比较

得到 IClassFile 对象 后,需要获得其源码 .IClassFile 提供了非常方便的接口: getSource。应用 该方法可以获得源码字符串。如果该方法的输出值为 null,说明这个类还未绑 定源代码。这种情况下可以通过双击 .class 文件,点击 Change Attached Source 按钮进行源代码的绑定。下面的程序展示了如何根据用户输入的正则表 达式进行比较搜索。

清单 5. 获取类文件源码并比较

IClassFile cf = … ;  Pattern  searchPattern = Pattern.compile("用户输入的正则表达式");  /*  获得 IClassFile 源码 */  String source = cf.getSource ();  if (source != null)  {   Matcher matcher  = searchPattern.matcher(source);   while (matcher.find())   {     /* 获得偏移量 */     int offset =  matcher.start();     String group = matcher.group();     /* 获得长度 */     int length = group.length ();   }  }

基于JDT的JAR源代码搜索(5)

时间:2010-11-20 IBM 魏强 王芹华 邵兵

步骤 5. 获得 JarPackageFragmentRoot 中的非 JAVA 资源

Jar 文件中 JAVA 资源主要 是 .java 文件和 .class 文件。Jar 文件中非 JAVA 的资源,对应的类为 IJarEntryResource,比如 Jar 中的 .properties 文件、META-INF 文件夹、 META-INF 文件夹下的 MANIFEST.MF 等,都属于非 JAVA 资源,这些非 JAVA 资 源可以存放于 JarPackageFragmentRoot 下,也可以存放于 JarPackageFragment 下。下面的程序展示如何遍历获得 JarPackageFragmentRoot 下的所有非 JAVA 资源。

清单 6. 获得非类文 件的资源

/* 注:ele 也可以是 PackageFragment, 它们都拥 有 getNonJavaResources 方法 */  JarPackageFragmentRoot ele  = … ;  Object[] nonjavares =  ele.getNonJavaResources();  if (nonjavares != null)   {    for (Object o : no

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号