`

扩展点中的表达式总结

 
阅读更多

本文来自:http://www.ceclipse.org/read-cec-tid-28291.html

 

在扩展点中,我们进场能够看到一些表达式:

 

 

<enabledWhen>
            <with
                  variable="activeEditor">
               <test
                     property="org.gsbp.ide.common.ui.editor.dirty">
               </test>
            </with>
 </enabledWhen>

 如上就是一段用于判断菜单是否可用的表达式。

 

扩展点里面使用表达式的功能主要存在于org.eclips.core.expression插件中

 

如下是表达式中常见的逻辑:

not  用来对表达式运行结果取反  
and  用来在多个表达式之间进行与运算,只有多个表达式都为true的时候,才会返回true,否则返回false  
or  用来在多个表达式之间进行或运算,只有多个表达式都为false的时候,才会返回false,否则返回true  
instanceof  用来判断指定的对象是否是指定类或者接口的实例  
systemTest  用来比较System系统变量中的值是否与指定值相等  
iterate  用来处理java.util.Collection的所有子对象  
equals  用来判断指定对象与预先设置的数据是否相等  
count  用来处理java.util.Collection的集合大小  
with    
resolve    
adapt  用来将选中对象转成预先指定的对象,以便更灵活的处理  
test    基于最重要的人物总是最后出场的原则,将adapt和test放在最后进行说明。  

 

 

not
not本身并没有具体的信息,只是将其子表达式的结果进行取反。通常的配置如下:

<not>
   <instanceof value="org.eclipse.core.resources.IFile"/>
</not>  

 

如果选中的对象不是文件,会返回true,因为not将instanceof的结果取反。

 

 

and

与not功能相类似,and是将所有的子结点结果进行与运算

 

<and>
   <instanceof value="org.eclipse.core.resources.IFile"/>
   <test property="org.demo.matchesPattern" value="*.html"/>
</and>  

 只有选中的对象是文件,而且名称符合*.html才会返回true。 

 

 

 

or

与not功能相类似,and是将所有的子结点结果进行与运算

 

<or>
   <instanceof value="org.eclipse.core.resources.IFolder"/>
   <instanceof value="org.eclipse.core.resources.IProject"/>
</or> 

  只有选中的对象是目录或者是项目,就会返回true,如果是文件,就会返回false。  

 

 

instanceof

用来判断指定的对象是否是指定类或者接口的实例

 

<instanceof value="org.eclipse.core.resources.IFile"/>  

 只有选中的对象是文件的实例时,如org.eclipse.core.resource.internal.File时,才会返回true.  

 

 

 

systemTest

用来比较System系统变量中的值是否与指定值相等,它会调用System.getProperty("xxx")方法取得系统变量值,,并将该值与指定值进行比较。

 

 

<systemTest property="encoding" value="GB2312"/> 

 那么该配置只有当前JVM的默认编码为GB2312(即中文时),才会返回true. 

 

 

iterate

iterate是一个非常少用的属性,它主要用来处理java.util.Collection中子元素的内容。它会逐渐遍历集合的所有子元素,然后再将每个子元素放入子表达式中进行计算,其实operator有or和and两种可选,是用来支持子表达的或运算和与运算,与前面的or和and相似。

 

 

<iterate operator="or">
         <instanceof value="org.eclipse.core.resources.IFile"/>
</iterate>

 

 

equals

在配置文件中,其实只有一种字符串数据类型,而在Java中的数据类型丰富的多,因此Eclipse提供了一整套的转换机制,用来将字符串转成相应的Java类型,下面是相应的转换规则:1. 对于字符串"true",将会转成Boolean.TRUE2. 对于字符串"false",将会转成Boolean.FALSE3. 如果字符串中有小数点,将会转成浮点数Float4. 如果字符串中只有数字,就会转成整数Integer5. 如果以上的转换出现错误,或者不符合以上情况,就会转成字符串6. 如果希望使用字符串true,或者1.2之类的数据,而不被转成Boolean.True和相应的Float,就使用单绰号',如"''true",就会转成"true",而不是Boolean.True

 

 

<equals value="100"/>  

 

 

count

用来验证一个java.util.Collection中的size是否符合要求,这个值可以有以下几种:v *,表示任意数量v ?,表示0或1个数量v +,表示至少一个数量v 数字,表示size要等于这个指定的数量

 

 

<count value="0" />

 这个属性虽然用的少,但是却不可少,以资源管理器为例,当一个工作区没有任何项目的时候,那么对应的size就为0,如果需要在这种情况出现一个菜单,那么就肯定需要这样一个表达式才能正确的处理。 

 

 

with

通过variable属性取得选中对象的相应数据,比如通过选中对象的getAffectedProjects方法得到一个java.util.Collection对象,再通过iterate和test来进行表达式处理。

 

<with variable="affectedProjects">
     <iterate operator="or">
         <test property="org.demo.projectNature" value="org.eclipse.jdt.core.javanature"/>
     </iterate>
</with>  

 

 

resolve

它和with属性基本一致,但是它多了一个args属性,从而有更高的灵活性,其它方面与with并无区别。

 

<resolve variable="pluginDescriptor" args="org.eclipse.core.runtime">
     <test property="org.demo.isActive"/> 
</resolve>
 

 

adapt

adapter是Eclipse架构的根本所在,它不仅仅解决了上下文环境的问题,对系统的扩展和灵活性都是一个非常好的解决方案,因此在表达式中也充分的利用这个特点。它可以将待处理的对象转换成指定的对象,这样也会有效的增加表达式的灵活性。

 

<adapt type="org.eclipse.core.resources.IResource">
    <test property="org.eclipse.core.resources.extension"         value="datasetx"/>
</adapt>

 

它表示会先将指定的对象通过adapter方式转成一个IResource的实例,如果转换成功,再判断其扩展名是否为datasetx,如果转换不成功,也会返回false。

 

 

test
以上提供了很多功能,但是可能对于开发人员,并不能完全满足他们相应的需求。所以Expression插件提供了test结点,这个结点允许用户通过一个扩展点来定义各种新的表达式处理功能,象org.eclipse.core.resources就提供了对扩展名等一系列的支持。在以后的文章将会详细的描述如何进行扩展。

 

<adapt type="org.eclipse.core.resources.IResource">
    <test property="org.eclipse.core.resources.extension"         value="datasetx"/>
</adapt>

 

这个例子会调用,org.eclipse.core.internal.propertytester.ResourcePropertyTester类来处理数据,从而获得更高的灵活性

 

注意:org.eclipse.core.resources.extension中的org.eclipse.core.resources是

org.eclipse.core.expressions.propertyTesters扩展中的命名空间,extension才是定义的属性。

 

 

最后关于test 的使用,涉及到另一个扩展点,org.eclipse.core.expressions.propertyTesters,自己定义的property

必须扩展一个PropertyTester来判断合法性。关于org.eclipse.core.expressions.propertyTesters扩展,

参考:http://salever.iteye.com/blog/944824

分享到:
评论

相关推荐

    正则表达式总结文档集合

    ### 正则表达式知识点详解 #### 一、绪论 正则表达式是一种用于文本匹配和处理的强大工具,它已经在多种编程环境和技术领域中得到了广泛的应用。从*nix(如Linux, Unix)到现代的编程语言如PHP、C#、Java等,正则...

    中文时间表达式识别研究

    1. 对时间表达式识别的应用领域进行了总结,包括信息抽取、自动问答系统、机器翻译和事件检测与跟踪。 2. 对基于机器学习的序列标注方法进行了研究,介绍了条件最大熵模型和条件随机场模型,并实现了基于这两种模型...

    常用的正则表达式总结.rar

    下面是对"常用的正则表达式总结"的详细解读。 1. **基础字符类**: - `.`:匹配任意单个非换行符的字符。 - `\d`:等价于 `[0-9]`,匹配任何数字。 - `\D`:匹配任何非数字字符。 - `\w`:等价于 `[a-zA-Z0-9_]...

    后缀表达式求值(c语言版)

    根据给定的文件信息,我们可以总结出以下关于“后缀表达式求值”的详细知识点,主要涉及C语言在数据结构中的应用,特别是栈的应用来解析和计算后缀表达式。 ### 1. 后缀表达式的概念 后缀表达式,也称为逆波兰表示...

    java中的EL表达式禁用

    总结来说,EL表达式在Java Web开发中扮演了重要的角色,提供了方便的数据访问和处理。然而,根据项目的实际需求,我们可能需要禁用它以增强安全性或优化性能。理解何时禁用EL以及如何禁用是每个Java Web开发者应该...

    数据结构 表达式求值

    ### 数据结构与表达式求值知识点解析 #### 一、问题背景及定义 在计算机科学领域,**表达式求值**是一项基础而重要的任务。它涉及到如何解析并计算由数字和运算符组成的数学表达式的值。例如,对于表达式 `3 * (9 ...

    c++ 程序 表达式求值

    总结,C++中的表达式求值涉及到语法分析、运算符优先级和结合性、中缀转后缀以及栈的应用等多个知识点。通过这些技术,我们可以构建出能够正确处理复杂表达式的程序,为更复杂的软件开发奠定基础。

    表达式解析和执行,支持参数和函数

    总结来说,表达式解析和执行在C#中涉及到的主要知识点包括:表达式树、参数处理和函数支持。`FireSpider.Expressions`库可能是实现这些功能的工具,为开发者提供了一个强大的框架,用于处理复杂的表达式和函数逻辑。...

    报表工具FineReport正则表达式定义规则

    ### 报表工具FineReport正则表达式定义规则 #### 一、正则表达式概述 正则表达式是一种强大的文本处理...此外,随着技术的发展,正则表达式的功能也在不断扩展和完善,因此持续学习新的特性和技巧也是十分重要的。

    开源表达式解析器开源表达式解析器开源表达式解析器

    ### 开源表达式解析器知识点总结 #### 一、IKExpression概述 IKExpression是一个开源的、可扩展的、基于Java语言开发的超轻量级公式化语言解析执行工具包。该工具包完全独立,不依赖任何第三方Java库,能够轻松...

    php密码正式表达式

    #### 扩展知识点 - **正则表达式元字符**:`^` 表示字符串开头;`$` 表示字符串结尾;`{n,m}` 表示重复次数范围;`[ ]` 表示字符集。 - **预查**:`(?= )` 是正向前视断言,用于检查其后的字符串是否能够匹配给定的...

    C#表单正则表达式验证手册

    10. **最佳实践**:总结在实际项目中使用正则表达式进行表单验证的最佳实践和常见陷阱。 通过学习《C#表单正则表达式验证手册》,开发者能够熟练地运用正则表达式进行复杂的数据验证,提升应用的质量和用户体验。这...

    正则表达式汉字验证

    在Unicode编码标准中,汉字被分配在一系列的码点范围内,这些范围包括但不限于`\u4e00`到`\u9fa5`,这是最常见的汉字区段。因此,要验证一个字符串是否只包含汉字,可以使用正则表达式`^[\u4e00-\u9fa5]+$`。这个...

    linux下关于正则表达式grep的一点总结

    在实际使用中,`grep`命令通常与其他选项结合使用,例如`-i`忽略大小写,`-v`反向匹配,`-E`启用扩展正则表达式,以及`--color`高亮显示匹配结果。通过熟练掌握这些元素和选项,我们可以有效地在大量文本数据中定位...

    EL表达式详解教程

    ### EL表达式详解教程 #### 一、EL表达式的简介 ...通过使用EL表达式,开发者可以减少对JSP Scriptlet的依赖,提高代码的可维护性和扩展性。掌握EL表达式的语法和特性对于Web开发人员来说是非常重要的。

    用MFC编写的表达式运算

    总结来说,用MFC编写表达式运算涉及到C++编程、MFC框架的使用、图形用户界面的设计、字符串解析、运算符优先级处理以及错误处理等多个知识点。通过这样的实践,开发者不仅可以提升C++和MFC的技能,还能深入理解...

    表达式语法分析器

    在实际应用中,这种方法可以高效地处理复杂的数学表达式,并且具有较好的扩展性和灵活性。通过上述分析可以看出,该语法分析器的设计充分考虑了操作符的优先级问题,并且通过栈结构实现了操作数与操作符的有效分离与...

    从键盘接收的表达式中缀转后缀并求结果

    这种方法不仅适用于简单的数学表达式,也可以扩展应用于更复杂的表达式和更高级的编程场景中。掌握这一技术,不仅可以帮助我们更好地理解编译原理中的相关概念,还可以提升我们在实际开发中的效率和能力。

    日期正则表达式(很实用)

    通过对这些表达式的理解,可以更好地应用于实际开发中,提高代码的健壮性和准确性。 通过以上内容的学习,我们可以看出,虽然正则表达式有时会显得较为复杂,但是只要掌握了其基本结构和逻辑,就能很好地应对各种...

    自定义表达式计算 (c#)

    在实现自定义表达式计算引擎时,我们还需要考虑以下关键点: 1. **操作符优先级与结合性**:为了正确解析和计算表达式,我们需要定义每个运算符的优先级和结合性。例如,乘法和除法的优先级高于加法和减法,且都是...

Global site tag (gtag.js) - Google Analytics