如何在Eclipse RCPTT中验证任意动态标记类型是否含指定值?
解决RCPTT中动态标记数组的任意匹配问题
我之前也碰到过类似的RCPTT标记遍历难题,这种动态索引的场景确实没法直接用通配符.*或者简单的foreach命令搞定,不过用RCPTT的eval结合Groovy脚本就能完美解决,给你两种实用方案:
方案1:遍历指定索引范围(0到45)
如果明确要检查的标记索引在0到45之间,用这个脚本:
get-editor "test.c" | get-text-viewer | eval { def markers = it.getProperty("markers") // 遍历0到45的所有索引,只要有一个匹配就返回true def hasMatchingType = (0..45).any { index -> try { def markerEntry = markers[index] // 检查标记存在且Type匹配目标值 markerEntry != null && markerEntry[0].Type == "text-to-verify" } catch (Exception e) { // 遇到不存在的索引直接跳过,返回false false } } return hasMatchingType } | verify-true
关键细节说明:
eval是RCPTT的核心扩展命令,允许执行Groovy代码,能灵活处理数组遍历、条件判断这类复杂逻辑(0..45).any会逐个检查区间内的索引,只要有一个满足条件就立刻返回true,不用遍历全部- 加入
try-catch是为了避免实际标记数量不足46个时抛出索引越界异常,保证脚本稳定性
方案2:遍历所有存在的标记(不限索引范围)
如果不想固定索引区间,想检查所有已存在的标记,用这个更灵活的版本:
get-editor "test.c" | get-text-viewer | eval { def markers = it.getProperty("markers") def hasMatchingType = markers.any { markerEntry -> markerEntry != null && markerEntry[0].Type == "text-to-verify" } return hasMatchingType } | verify-true
额外扩展技巧:
如果需要的是包含指定文本而非完全相等的匹配,把判断条件改成:
markerEntry[0].Type.contains("text-to-verify")
内容的提问来源于stack exchange,提问作者Eric Ipsum
相关产品推荐
相关产品推荐

