gpt4 book ai didi

java - CompilationUnit 中所有变量的 IField

转载 作者:太空宇宙 更新时间:2023-11-04 08:37:45 25 4
gpt4 key购买 nike

我需要获取源代码中所有变量的IField 或IJavaElement 引用。我使用插件,获取一个 ICompilationUnit,我可以使用以下方法读取所有顶级对象:

for( IJavaElement i:unit.getTypes()[0].getChildren() )

for( IJavaElement i:unit.getAllTypes() )

如何访问局部变量?我试图将 ICompilationUnit 解析为 CompilationUnit,其中<​​strong>我可以获取每个字段的 ASTNode,但是我无法将其信息转换为 IField。有什么想法吗?

//编辑:例如:对于一个类:

public class Test {

int global1; int global2; void a() { global1 = 4; int local1; int local2 = 5; }

}

我打电话

for (IType type : unit.getTypes()) { System.out.println("itype "+type); for (IField iField : type.getFields()) { System.out.println("iField "+iField); }}

输出是:

itype class Test [in [Working copy] Test.java [in [in src [in testowy]]]] int global1 int global2 void a() iField int global1 [in Test [in [Working copy] Test.java [in [in src [in testowy]]]]] iField int global2 [in Test [in [Working copy] Test.java [in [in src [in testowy]]]]]

所以没有找到局部变量...

//添加 - 仍在挣扎:实际上这不是我所期望的行为。

for( IMethod i:unit.getAllTypes()[0].getMethods() )
{
System.out.println("index to h:"+h+" type "+i.getSource()+" name: "+i.getElementName());
h++;
int o =0;
for( IJavaElement j: i.getChildren() )
{
System.out.println("index to o: "+o+j+" type "+j.getElementType()+" name: "+j.getElementName());
o++;
}

}

这段代码我期望找到所有方法(有效)并从方法中获取所有局部变量(无效)。它永远不会进入带有字段的循环。它正确打印函数声明,因此我确信它可以看到所有变量...

至于使用 INode,我可以访问所有节点,但是如何将类型从 Node 更改为我需要的 IField/IJavaElement?

谢谢:)

最佳答案

如果你只想获取某个类型的字段,你可以这样做:

for (IType type : iCompilationUnit.getTypes()) {
for (IField iField : type.getFields()) {
....
}
}

但是,如果您想查找所有变量声明(字段和局部变量),最好使用 ASTVisitor 。这将访问您的整个 AST,您只需实现所需 AST 元素的访问方法,在您的情况下,我猜它将是 VariableDeclarationFragment的。

关于java - CompilationUnit 中所有变量的 IField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6000668/

25 4 0
文章推荐: python - 从一个 tkinter 窗口打开另一个 tkinter 窗口
文章推荐: java - java中从网页读取标签的问题</a> </div> <div> 文章推荐: <a class="a-tag" href="/article/22/2935804/detail.html" target="_blank">python - 跨多个程序正确使用 Scikit 的 StandardScaler</a> </div> <div> 文章推荐: <a class="a-tag" href="/article/22/2935803/detail.html" target="_blank">java - 修改netbeans中的initComponents()</a> </div> </div> <div class="content-p"> <ul class="like-article"> <li> <a class="a-tag" href="/article/23/6456845/detail.html" target="_blank">javascript if( 变量 = =(变量 2 || 变量 3 || ...))</a> <p> 这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How to nest OR statements in JavaScript? 有没有办法做到这一点: </p> </li> <li> <a class="a-tag" href="/article/23/5187519/detail.html" target="_blank">JavaScript 变量 = 变量</a> <p>在 JavaScript 中有没有办法让一个变量总是等于一个变量?喜欢var1 = var2但是当var2更新,也是var1 . 例子 var var1 = document.getElementBy</p> </li> <li> <a class="a-tag" href="/article/23/3880693/detail.html" target="_blank">python - 如何阅读此 python 代码?变量 1 = 变量 2 == 变量 3</a> <p>我正在努力理解这代表什么 var1 = var2 == var3 我的猜测是这等同于: if (var2 == var3): var1 = var2 最佳答案 赋值 var1 = var2 </p> </li> <li> <a class="a-tag" href="/article/23/4743147/detail.html" target="_blank">php - 变量 $_GET 变量</a> <p>这个问题已经有答案了: What does the PHP error message "Notice: Use of undefined constant" mean? (2 个回答) 已关闭 8 </p> </li> <li> <a class="a-tag" href="/article/23/4193630/detail.html" target="_blank">MySQL:变量=变量+select语句</a> <p>我在临时表中有几条记录,我想从每条记录中获取一个值并将其添加到一个变量中,例如 color | caption -------------------------------- re</p> </li> <li> <a class="a-tag" href="/article/18/636229/detail.html" target="_blank">linux - 如何将原始字符串转换为变量(变量 --> $变量)?</a> <p>如何将字符串转为变量(字符串变量--> $variable)? 或者用逗号分隔的变量列表然后转换为实际变量。 我有 2 个文件: 列名文件 行文件 我需要根据字符串匹配行文件中的整行,并根据列名文件命</p> </li> <li> <a class="a-tag" href="/article/23/8166485/detail.html" target="_blank">PHP:来自与变量(变量-变量)连接的字符串的新变量</a> <p>我有一个我无法解决的基本 php 问题,我也想了解为什么! $upperValueCB = 10; $passNodeMatrixSource = 'CB'; $topValue= '$uppe</p> </li> <li> <a class="a-tag" href="/article/23/8135827/detail.html" target="_blank">php 变量 = 变量 1 ||变量2</a> <p>这可能吗? php $variable = $variable1 || $variable2? 如果 $variable1 为空则使用 $variable2 是否存在类似的东西? 最佳答案 PHP 5</p> </li> <li> <a class="a-tag" href="/article/23/7635434/detail.html" target="_blank">perl - for 循环不会修改 `my` 变量,但会修改 `our` 变量</a> <p>在 Perl 5.20 中,for 循环似乎能够修改模块作用域的变量,但不能修改父作用域中的词法变量。 #!/usr/bin/env perl use strict; use warnings; ou</p> </li> <li> <a class="a-tag" href="/article/23/6694663/detail.html" target="_blank">JavaScript: 变量 = 变量.concat(另一个变量);</a> <p>为什么这不起作用: var variable; variable = variable.concat(variable2); $('#lunk').append(variable) 我无法弄清楚这一点</p> </li> <li> <a class="a-tag" href="/article/23/6564683/detail.html" target="_blank">c++ - 指针的大小(*变量 VS 变量)</a> <p>根据我的理解,在32位机器上,指针的sizeof是32位(4字节),而在64位机器上,它是8字节。无论它们指向什么数据类型,它们都有固定的大小。我的计算机在 64 位上运行,但是当我打印包含 * 的大</p> </li> <li> <a class="a-tag" href="/article/23/6406056/detail.html" target="_blank">java - 变量+=值和变量=变量+值之间的区别;</a> <p>例如: int a = 10; a += 1.5; 这运行得很完美,但是 a = a+1.5; 此作业表示类型不匹配:无法从 double 转换为 int。所以我的问题是:+= 运算符 和= 运算符 </p> </li> <li> <a class="a-tag" href="/article/23/5604667/detail.html" target="_blank">MySQL 语法错误 |变量 = 变量 + 整数</a> <p>您好,我写了这个 MySQL 存储过程,但我一直收到这个语法错误 #1064 - You have an error in your SQL syntax; check the manual that</p> </li> <li> <a class="a-tag" href="/article/23/3581356/detail.html" target="_blank">swift - 如果(变量 == 变量 + 5)</a> <p>我试图在我的场景中显示特定的奖牌,这取决于你的高分是基于关卡的目标。 // Get Medal Colour if levelHighscore goalScore { sc</p> </li> <li> <a class="a-tag" href="/article/18/966982/detail.html" target="_blank">c++ - 变量 = !!变量与变量 =(变量!= 0)</a> <p>我必须维护相当古老的 Visual C++ 源代码的大型代码库。我发现代码如下: bIsOk = !!m_ptr->isOpen(some Parameters) bIsOk的数据类型是bool,is</p> </li> <li> <a class="a-tag" href="/article/23/4118035/detail.html" target="_blank">php - Javascript 变量,发送到 PHP 变量</a> <p>我有一个从 MySQL 数据库中提取的动态产品列表。在 list 上有一个立即联系 按钮,我正在使用一个 jquery Modal 脚本,它会弹出一个表单。 我的问题是尝试将产品信息变量传递给该弹出窗</p> </li> <li> <a class="a-tag" href="/article/18/855747/detail.html" target="_blank">c++ - 类型(变量)与(类型)变量</a> <p> 这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va</p> </li> <li> <a class="a-tag" href="/article/14/248982/detail.html" target="_blank">javascript - 变量 === 未定义与 typeof 变量 === "undefined"</a> <p>jQuery Core Style Guidelines建议两种不同的方法来检查变量是否已定义。 全局变量:typeof variable === "undefined" 局部变量:variable </p> </li> <li> <a class="a-tag" href="/article/23/5702671/detail.html" target="_blank">jquery - 动态(变量)变量(如 php 中的?)</a> <p>这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: “Variable” Variables in Javascript? 我想肯定有一种方法可以在 JavaScrip</p> </li> <li> <a class="a-tag" href="/article/23/5402617/detail.html" target="_blank">c# - 变量 1 = 变量 2 = 真;优点缺点?</a> <p>在语句中使用多重赋值有什么优点或缺点吗?在简单的例子中 var1 = var2 = true; 赋值是从右到左的(我相信 C# 中的所有赋值都是如此,而且可能是 Java,尽管我没有检查后者)。但是,</p> </li> </ul> </div> </div> <div class="resource col-xs-3 col-sm-3 col-md-3 col-lg-3"> <div class="content-p content-p-comment"> <div class="phone-current phone-current-float"> <img alt="" src="/images/phone/manphone.jpeg"> </div> <div class="phone-current-float phone-current-style"> 太空宇宙 </div> <div class="phone-current-summary"> <span><strong>个人简介</strong></span> <p> 我是一名优秀的程序员,十分优秀! </p> </div> </div> <div class="content-p content-p-comment"> <article class="p-list"> <div class="art-margin" style="border-bottom: 1px solid #f3f0f0; padding-bottom: 5px;"> <strong>作者热门文章</strong> </div> <ul class="recomment-list-user"> <li><a class="a-tag" href="/article/22/2177999/detail.html" target="_blank">android - 多次调用 OnPrimaryClipChangedListener</a></li> <li><a class="a-tag" href="/article/22/2177998/detail.html" target="_blank">android - 无法更新 RecyclerView 中的 TextView 字段</a></li> <li><a class="a-tag" href="/article/22/2177997/detail.html" target="_blank">android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0</a></li> <li><a class="a-tag" href="/article/22/2177996/detail.html" target="_blank">android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色</a></li> </ul> </article> </div> <div class="content-p content-p-comment"> <article class="p-list"> <div class="art-margin" style="border-bottom: 1px solid #f3f0f0; padding-bottom: 5px;"> <strong>滴滴打车优惠券免费领取</strong> </div> <img alt="滴滴打车优惠券" src="/images/ad/didiad.png" width="210px" onclick="window.open('/ad/didi', '_blank')"> </article> </div> <div class="content-p content-p-comment"> <article class="p-list"> <div class="art-margin" style="border-bottom: 1px solid #f3f0f0; padding-bottom: 5px;"> <strong>全站热门文章</strong> </div> <ul class="recomment-list-user"> <li><a class="a-tag" href="/article/92/8828598/detail.html" target="_blank">让LLM来评判|基础概念</a></li> <li><a class="a-tag" href="/article/92/8828597/detail.html" target="_blank">Pulsar客户端如何控制内存使用</a></li> <li><a class="a-tag" href="/article/92/8828596/detail.html" target="_blank">G1原理—4.G1垃圾回收的过程之YoungGC</a></li> <li><a class="a-tag" href="/article/92/8828595/detail.html" target="_blank">利用mybatis拦截器记录sql,辅助我们建立索引(一)</a></li> <li><a class="a-tag" href="/article/92/8828594/detail.html" target="_blank">C#实现Winform程序在系统托盘显示图标&开机自启动</a></li> <li><a class="a-tag" href="/article/92/8828593/detail.html" target="_blank">《痞子衡嵌入式半月刊》第116期</a></li> <li><a class="a-tag" href="/article/92/8828592/detail.html" target="_blank">k8s列出所有未配置探针的deployment</a></li> <li><a class="a-tag" href="/article/92/8828591/detail.html" target="_blank">unityassetbundle加载图集的所有sprite图片</a></li> <li><a class="a-tag" href="/article/92/8828590/detail.html" target="_blank">终于决定:把自己家的能源管理系统开源了!</a></li> <li><a class="a-tag" href="/article/92/8828589/detail.html" target="_blank">了解ASP.NETCore中的中间件</a></li> </ul> </article> </div> </div> </div> </div> <div class="foot-font" style="border-top: 1px solid #f3f0f0; margin: auto; padding: 15px; background-color: #474443" align="center"> <a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank"><span class="color-txt-foot">Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号</span></a> <br/> <a href="/" target="_blank"><span class="color-txt-foot">广告合作:1813099741@qq.com</span></a> <a href="http://www.6ren.com" target="_blank"><span class="color-txt-foot">6ren.com</span></a> </div> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d1cb9c185f1642d6f07e22cafa330c45"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d46c26b2162aface49b8acf6cb7025e1"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>