Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "Command Core Expressions/ko"

(New page: Reserved.)
 
Line 1: Line 1:
Reserved.
+
코어 익스프레션은 org.eclipse.core.expresion 플러그인을 기반으로 하는 선언적 혹은 프로그래밍적인 표현식입니다.
 +
 
 +
= 익스프레션과 커맨드 프레임워크 =
 +
 
 +
[[Platform Command Framework]]은 핸들러나 프로그래밍 문맥의 활성화 등을 위한 enabledWhen과 activeWhen, 그리고 메뉴의 가시성 여부 결정을 위한 visibleWhen에 코어 익스프레션을 이용합니다. 커멘드 프레임워크는 커맨드 코어 익스프레션들이 평가될 수 있는 IEvaluateContext를 제공합니다.
 +
 
 +
IEvaluationContext는 평가를 위한 기본 변수 및 다양한 변수 이름들을 제공합니다. 특별히 평가 대상을 지정하지 않는 경우, 기본 평가 대상 변수로 전역 선택 목록(Global Selection)이 <code>java.util.Collection</code>로 제공합니다. (역자: 셀렉션 서비스를 생각하세요) 이 경우 평가 대상은 비어있을 수도 있고 오직 하나의 엔트리만을 가지고 있을 수도 있습니다. (만약 ISelection이 ITextSelection과 같은 것인 경우), 혹은 IStructuredSelection가 될 수도 있습니다.
 +
 
 +
&lt;with/&gt; 엘리먼트를 지정함으로서 자식(With의) 익스프레션 엘리먼트들이 평가를 수행할 대상을 명시적으로 지정할 수 있습니다.
 +
 
 +
= 변수와 커맨드 프레임 워크 =
 +
 
 +
커맨드 프레임워크의 평가에 사용되는 변수들은 [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.ui.workbench/Eclipse%20UI/org/eclipse/ui/ISources.java?view=co ISources.java]에 목록화 되어있습니다.
 +
 
 +
몇몇 변수들은 평가 시점의 어플리케이션 문맥에따라 세팅되지 않을 수도 있습니다.
 +
 
 +
<table border="1">
 +
<tr>
 +
<th>변수명</th>
 +
<th>타입</th>
 +
<th>설명</th>
 +
<th>지원 시작 버전</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activeContexts</td>
 +
<td><code>java.lang.String</code>들로 구성된 <code>java.util.Collection</code></td>
 +
<td>
 +
활성 문맥ID 들의 리스트입니다. 대체로 &lt;iterate/&gt; and &lt;count/&gt;와 함께 이용됩니다. 또한 <code>org.eclipse.common.expressions.PropertyTester</code>와 함께 사용될 수도 있습니다. '''3.3'''버전의 Action Set들은 <code>org.eclipse.ui.actionSet</code>를 부모로하는 문맥에 의해 미러링되어, 활성 문맥안에서 리스트 형태로 존재하게 됩니다.
 +
</td>
 +
<td>3.2</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activeActionSets</td>
 +
<td><code>IActionSetDescriptor[]</code></td>
 +
<td>
 +
'''Note:''' 이것은 현재 내부 클래스를 가리키고, 그 타입이 언제라도 변경될 수 있으므로 지금은 사용되지 않는다
 +
</td>
 +
<td>3.2</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activeShell</td>
 +
<td><code>org.eclipse.swt.widgets.Shell</code></td>
 +
<td>
 +
The currently active shell.  It can be a dialog or workbench window shell.
 +
</td>
 +
<td>3.2</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activeWorkbenchWindowShell</td>
 +
<td><code>org.eclipse.swt.widgets.Shell</code></td>
 +
<td>
 +
The active workbench window shell.
 +
</td>
 +
<td>3.2</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activeWorkbenchWindow</td>
 +
<td><code>org.eclipse.ui.IWorkbenchWindow</code></td>
 +
<td>
 +
The active workbench window.
 +
</td>
 +
<td>3.2</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activeWorkbenchWindow.isCoolbarVisible</td>
 +
<td><code>java.lang.Boolean</code></td>
 +
<td>
 +
Reports coolbar visibility for the currently active workbench window.
 +
</td>
 +
<td>3.3</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activeWorkbenchWindow.isPerspectiveBarVisible</td>
 +
<td><code>java.lang.Boolean</code></td>
 +
<td>
 +
Reports perspective bar visibility for the currently active workbench window.
 +
</td>
 +
<td>3.3</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activeEditor</td>
 +
<td><code>org.eclipse.ui.IEditorPart</code></td>
 +
<td>
 +
The currently active editor.  This is remembered even if the editor is not the currently active part.
 +
</td>
 +
<td>3.2</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activeEditorId</td>
 +
<td><code>java.lang.String</code></td>
 +
<td>
 +
The ID of the currently active editor.  This can be used for expressions on the editor type.
 +
</td>
 +
<td>3.2</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activePart</td>
 +
<td><code>org.eclipse.ui.IWorkbenchPart</code></td>
 +
<td>
 +
The active part, which can be the same as the active editor.
 +
</td>
 +
<td>3.2</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activePartId</td>
 +
<td><code>java.lang.String</code></td>
 +
<td>
 +
The ID of the currently active part.
 +
</td>
 +
<td>3.2</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activeSite</td>
 +
<td><code>org.eclipse.ui.IWorkbenchPartSite</code></td>
 +
<td>
 +
The site of the currently active part.
 +
</td>
 +
<td>3.2</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>selection</td>
 +
<td><code>org.eclipse.jface.viewers.ISelection</code></td>
 +
<td>
 +
The current global selection.  It can be used in &lt;test/&gt; elements with <code>org.eclipse.core.expressions.PropertyTester</code>, in programmatic core expressions, and in '''3.3''' with &lt;iterate/&gt; and &lt;count/&gt; elements.
 +
</td>
 +
<td>3.2</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activeMenu</td>
 +
<td>A <code>java.util.Collection</code> of <code>java.lang.String</code></td>
 +
<td>
 +
This is the list of IDs of the showing context menu.  Examples are like #TextEditorRuler or a part ID.  Most commonly used with &lt;iterate&gt; and &lt;count&gt;, and can also be used with &lt;test&gt; and a <code>org.eclipse.common.expressions.PropertyTester</code>.
 +
</td>
 +
<td>3.2</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activeMenuSelection</td>
 +
<td><code>org.eclipse.jface.viewers.ISelection</code></td>
 +
<td>
 +
This is a selection that is available while a context menu is showing.  It is the selection from the selection provider used to register the context menu, usually from <code>getSite().registerContextMenu(*)</code>.  It is usually the same as the <code>selection</code>variable, but not always.  This is more for legacy compatibility.
 +
</td>
 +
<td>3.3</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activeMenuEditorInput</td>
 +
<td><code>org.eclipse.jface.viewers.ISelection</code></td>
 +
<td>
 +
This is a selection that is available while a context menu is showing.  It is the selection from the editor input, usually if includeEditorInput was set to <code>true</code> during <code>getEditorSite().registerContextMenu(*)</code>.  This is more for legacy compatibility.
 +
</td>
 +
<td>3.3</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activeFocusControl</td>
 +
<td><code>org.eclipse.swt.widgets.Control</code></td>
 +
<td>
 +
A control that has focus and has been registered with the [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.ui.workbench/Eclipse%20UI/org/eclipse/ui/swt/IFocusService.java?view=co IFocusService].
 +
</td>
 +
<td>3.3</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>activeFocusControlId</td>
 +
<td><code>java.lang.String</code></td>
 +
<td>
 +
The ID of a control that has focus and has been registered with the <code>org.eclipse.ui.swt.IFocusService</code>.
 +
</td>
 +
<td>3.3</td>
 +
</tr>
 +
 
 +
</table>
 +
 
 +
= Property Testers =
 +
 
 +
The Eclipse SDK provides a couple of property testers that can be used in core expressions.  The expression defines a property attribute and then takes a combination of args and a value that is tester implementation dependent.  The property attribute is the combination of the namespace and property name.  For example, to test an IResource name the property would be <code>org.eclipse.core.resources.name</code>.
 +
 
 +
 
 +
<table border="1">
 +
<tr>
 +
<th>Namespace</th>
 +
<th>Type</th>
 +
<th>Implementation</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td>org.eclipse.core.runtime</td>
 +
<td>
 +
<code>org.eclipse.core.runtime.Platform</code>
 +
</td>
 +
<td>
 +
[http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.core.expressions/src/org/eclipse/core/internal/expressions/propertytester/PlatformPropertyTester.java?view=co PlatformPropertyTester.java]
 +
</td>
 +
</tr>
 +
 
 +
 
 +
<tr>
 +
<th>Property</th>
 +
<th colspan="2">Description</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td>
 +
product
 +
</td>
 +
<td colspan="2">
 +
Test the id of the currently active product.
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>
 +
isBundleInstalled
 +
</td>
 +
<td colspan="2">
 +
Test if a given bundle is installed in the running environment.  Use the args attribute to pass in the bundle id.
 +
</td>
 +
</tr>
 +
 
 +
 
 +
<tr>
 +
<th>Namespace</th>
 +
<th>Type</th>
 +
<th>Implementation</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td>org.eclipse.core.resources</td>
 +
<td>
 +
<code>org.eclipse.core.resources.IResource</code>
 +
</td>
 +
<td>
 +
[http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.core.resources/src/org/eclipse/core/internal/propertytester/ResourcePropertyTester.java?view=co ResourcePropertyTester.java]
 +
</td>
 +
</tr>
 +
 
 +
 
 +
<tr>
 +
<th>Property</th>
 +
<th colspan="2">Description</th>
 +
</tr>
 +
 
 +
 
 +
 
 +
<tr>
 +
<td>
 +
name
 +
</td>
 +
<td colspan="2">
 +
A property indicating the file name (value <code>"name"</code>). "*" and "?" wild cards are supported.
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>
 +
path
 +
</td>
 +
<td colspan="2">
 +
A property indicating the file path (value <code>"path"</code>). "*" and "?" wild cards are supported.
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>
 +
extension
 +
</td>
 +
<td colspan="2">
 +
A property indicating the file extension (value <code>"extension"</code>). "*" and "?" wild cards are supported.
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>
 +
readOnly
 +
</td>
 +
<td colspan="2">
 +
A property indicating whether the file is read only (value <code>"readOnly"</code>).
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>
 +
projectNature
 +
</td>
 +
<td colspan="2">
 +
A property indicating the project nature (value <code>"projectNature"</code>).
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>
 +
persistentProperty
 +
</td>
 +
<td colspan="2">
 +
A property indicating a persistent property on the selected resource (value <code>"persistentProperty"</code>). If two arguments are given, this treats the first as the property name, and the second as the expected property value. If only one argument (or just the expected value) is given, this treats it as the property name, and simply tests for existence of the property on the resource.
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>
 +
projectPersistentProperty
 +
</td>
 +
<td colspan="2">
 +
A property indicating a persistent property on the selected resource's project. (value <code>"projectPersistentProperty"</code>). If two arguments are given, this treats the first as the property name, and the second as the expected property value. If only one argument (or just the expected value) is given, this treats it as the property name, and simply tests for existence of the property on the resource.
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>
 +
sessionProperty
 +
</td>
 +
<td colspan="2">
 +
A property indicating a session property on the selected resource (value <code>"sessionProperty"</code>). If two arguments are given, this treats the first as the property name, and the second as the expected property value. If only one argument (or just the expected value) is given, this treats it as the property name, and simply tests for existence of the property on the resource.
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>
 +
projectSessionProperty
 +
</td>
 +
<td colspan="2">
 +
A property indicating a session property on the selected resource's project. (value <code>"projectSessionProperty"</code>). If two arguments are given, this treats the first as the property name, and the second as the expected property value. If only one argument (or just the expected value) is given, this treats it as the property name, and simply tests for existence of the property on the resource.
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<th>Namespace</th>
 +
<th>Type</th>
 +
<th>Implementation</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td>org.eclipse.core.resources</td>
 +
<td>
 +
<code>org.eclipse.core.resources.IFile</code>
 +
</td>
 +
<td>
 +
[http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.core.resources/src/org/eclipse/core/internal/propertytester/FilePropertyTester.java?view=co FilePropertyTester.java]
 +
</td>
 +
</tr>
 +
 
 +
 
 +
<tr>
 +
<th>Property</th>
 +
<th colspan="2">Description</th>
 +
</tr>
 +
 
 +
 
 +
 
 +
<tr>
 +
<td>
 +
contentTypeId
 +
</td>
 +
<td colspan="2">
 +
A property indicating that we are looking to verify that the file matches the content type matching the given identifier. The identifier is provided as the expected value.
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<th>Namespace</th>
 +
<th>Type</th>
 +
<th>Implementation</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td>org.eclipse.core.resources</td>
 +
<td>
 +
<code>org.eclipse.core.resources.IProject</code>
 +
</td>
 +
<td>
 +
[http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.core.resources/src/org/eclipse/core/internal/propertytester/ProjectPropertyTester.java?view=co ProjectPropertyTester.java]
 +
</td>
 +
</tr>
 +
 
 +
 
 +
<tr>
 +
<th>Property</th>
 +
<th colspan="2">Description</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td>
 +
open
 +
</td>
 +
<td colspan="2">
 +
A property indicating whether the project is open (value <code>"open"</code>).
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<th>Namespace</th>
 +
<th>Type</th>
 +
<th>Implementation</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td>org.eclipse.core.resources</td>
 +
<td>
 +
<code>org.eclipse.core.resources.mapping.ResourceMapping</code>
 +
</td>
 +
<td>
 +
[http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.core.resources/src/org/eclipse/core/internal/propertytester/ResourceMappingPropertyTester.java?view=co ResourceMappingPropertyTester.java]
 +
</td>
 +
</tr>
 +
 
 +
 
 +
<tr>
 +
<th>Property</th>
 +
<th colspan="2">Description</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td>
 +
projectPersistentProperty
 +
</td>
 +
<td colspan="2">
 +
A property indicating a persistent property on the selected resource's project. (value <code>"projectPersistentProperty"</code>). If two arguments are given, this treats the first as the property name, and the second as the expected property value. If only one argument (or just the expected value) is given, this treats it as the property name, and simply tests for existence of the property on the resource.
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<th>Namespace</th>
 +
<th>Type</th>
 +
<th>Implementation</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td>org.eclipse.ui</td>
 +
<td>
 +
<code>org.eclipse.ui.IWorkbench</code>
 +
</td>
 +
<td>
 +
[http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.ui.workbench/Eclipse%20UI/org/eclipse/ui/internal/activities/ActivityPropertyTester.java?view=co ActivityPropertyTester.java]
 +
</td>
 +
</tr>
 +
 
 +
 
 +
<tr>
 +
<th>Property</th>
 +
<th colspan="2">Description</th>
 +
</tr>
 +
 
 +
 
 +
<tr>
 +
<td>
 +
isActivityEnabled
 +
</td>
 +
<td colspan="2">
 +
Test if the activity in args is enabled.
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td>
 +
isCategoryEnabled
 +
</td>
 +
<td colspan="2">
 +
Test if the category in args is enabled.
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<th>Namespace</th>
 +
<th>Type</th>
 +
<th>Implementation</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td>org.eclipse.ui.workbenchWindow</td>
 +
<td>
 +
<code>org.eclipse.ui.IWorkbenchWindow</code>
 +
</td>
 +
<td>
 +
[http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.ui.workbench/Eclipse%20UI/org/eclipse/ui/internal/OpenPerspectivePropertyTester.java?view=co OpenPerspectivePropertyTester.java]
 +
</td>
 +
</tr>
 +
 
 +
 
 +
<tr>
 +
<th>Property</th>
 +
<th colspan="2">Description</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td>
 +
isPerspectiveOpen
 +
</td>
 +
<td colspan="2">
 +
Tests if any perspective is open.
 +
</td>
 +
</tr>
 +
 
 +
 
 +
 
 +
</table>
 +
 
 +
= Expression examples =
 +
 
 +
Here are some examples.  I'll pretend all of the examples are deciding when a handler is active.
 +
 
 +
== Basic IStructuredSelection ==
 +
 
 +
A view provides a structured selection through its selection provider.  An example would be the InfoView in <b>org.eclipse.ui.examples.contributions</b>.  You can browse the [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.ui.examples.contributions/plugin.xml?content-type=text%2Fplain&view=co plugin.xml] and
 +
[http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.ui.examples.contributions/src/org/eclipse/ui/examples/contributions/view/InfoView.java?view=co InfoView.java] files.  The InfoView provides an <code>IStructuredSelection</code> with 0 or more <code>org.eclipse.ui.examples.contributions.model.Person</code>.
 +
 
 +
When using the default variable, you must treat it as an <code>java.util.Collection</code>.  That means using &lt;count&gt; or &lt;iterate&gt;
 +
 
 +
 
 +
<activeWhen>
 +
    <iterate>
 +
      <instanceof value="org.eclipse.ui.examples.contributions.model.Person"/>
 +
    </iterate>
 +
</activeWhen>
 +
 
 +
== Package Explorer IStructuredSelection ==
 +
 
 +
The Package Explorer is a mixture of <code>org.eclipse.core.resources.IResource</code>, <code>org.eclipse.jdt.core.IJavaElement</code> and other classes.  If you are trying to find all of the *.java files, you would need to:
 +
 
 +
# Iterate through the default variable
 +
# adapt the selection elements to your class, in this case <code>IResource</code>
 +
# use one of the org.eclipse.core.resources property testers to test the IResource property
 +
 
 +
For example:
 +
 
 +
<activeWhen>
 +
    <iterate>
 +
      <adapt type="org.eclipse.core.resources.IResource">
 +
          <test property="org.eclipse.core.resources.name"
 +
                value="*.java"/>
 +
      </adapt>
 +
    </iterate>
 +
</activeWhen>
 +
 
 +
== Active editor type ==
 +
 
 +
If you want your handler to be active for a specific type of editor, you can use <b>activeEditorId</b> to target your handler.
 +
 
 +
<activeWhen>
 +
    <with variable="activeEditorId">
 +
      <equals value="org.eclipse.ui.DefaultTextEditor"/>
 +
    </with>
 +
</activeWhen>
 +
 
 +
= New Core Expressions in 3.3 =
 +
 
 +
In 3.3 there were 2 additions to the core expressions framework.
 +
 
 +
== count and iterate ==
 +
 
 +
Count and iterate have always worked against <code>java.util.Collection</code>.  The &lt;count/&gt; and &lt;iterate&gt; elements can now be used on any variable that adapts to <code>org.eclipse.core.expressions.ICountable</code> and <code>org.eclipse.core.expressions.IIterable</code> or implements the interfaces directly.  It wasn't possible to use the java 1.5 constructs for iterable.
 +
 
 +
The workbench provides an adapter for <code>ISelection</code> and <code>IStructuredSelection</code>.
 +
 
 +
== definitions ==
 +
 
 +
The <b>org.eclipse.core.expressions.definitions</b> extension point was introduced.  You can create core expression definitions, and then reference them from other core expressions.
 +
 
 +
<extension point="org.eclipse.core.expressions.definitions">
 +
    <definition id="org.eclipse.ui.examples.contributions.view.inView">
 +
      <with variable="activePartId">
 +
          <equals value="org.eclipse.ui.examples.contributions.view"/>
 +
      </with>
 +
    </definition>
 +
</extension>
 +
 
 +
Then:
 +
 
 +
<activeWhen>
 +
    <reference definitionId="org.eclipse.ui.examples.contributions.view.inView"/>
 +
</activeWhen>
 +
 
 +
The referenced expression will be evaluated at this point.
 +
 
 +
 
 +
[[Category:Eclipse Project]]

Revision as of 05:44, 31 January 2008

코어 익스프레션은 org.eclipse.core.expresion 플러그인을 기반으로 하는 선언적 혹은 프로그래밍적인 표현식입니다.

익스프레션과 커맨드 프레임워크

Platform Command Framework은 핸들러나 프로그래밍 문맥의 활성화 등을 위한 enabledWhen과 activeWhen, 그리고 메뉴의 가시성 여부 결정을 위한 visibleWhen에 코어 익스프레션을 이용합니다. 커멘드 프레임워크는 커맨드 코어 익스프레션들이 평가될 수 있는 IEvaluateContext를 제공합니다.

IEvaluationContext는 평가를 위한 기본 변수 및 다양한 변수 이름들을 제공합니다. 특별히 평가 대상을 지정하지 않는 경우, 기본 평가 대상 변수로 전역 선택 목록(Global Selection)이 java.util.Collection로 제공합니다. (역자: 셀렉션 서비스를 생각하세요) 이 경우 평가 대상은 비어있을 수도 있고 오직 하나의 엔트리만을 가지고 있을 수도 있습니다. (만약 ISelection이 ITextSelection과 같은 것인 경우), 혹은 IStructuredSelection가 될 수도 있습니다.

<with/> 엘리먼트를 지정함으로서 자식(With의) 익스프레션 엘리먼트들이 평가를 수행할 대상을 명시적으로 지정할 수 있습니다.

변수와 커맨드 프레임 워크

커맨드 프레임워크의 평가에 사용되는 변수들은 ISources.java에 목록화 되어있습니다.

몇몇 변수들은 평가 시점의 어플리케이션 문맥에따라 세팅되지 않을 수도 있습니다.

변수명 타입 설명 지원 시작 버전
activeContexts java.lang.String들로 구성된 java.util.Collection

활성 문맥ID 들의 리스트입니다. 대체로 <iterate/> and <count/>와 함께 이용됩니다. 또한 org.eclipse.common.expressions.PropertyTester와 함께 사용될 수도 있습니다. 3.3버전의 Action Set들은 org.eclipse.ui.actionSet를 부모로하는 문맥에 의해 미러링되어, 활성 문맥안에서 리스트 형태로 존재하게 됩니다.

3.2
activeActionSets IActionSetDescriptor[]

Note: 이것은 현재 내부 클래스를 가리키고, 그 타입이 언제라도 변경될 수 있으므로 지금은 사용되지 않는다

3.2
activeShell org.eclipse.swt.widgets.Shell

The currently active shell. It can be a dialog or workbench window shell.

3.2
activeWorkbenchWindowShell org.eclipse.swt.widgets.Shell

The active workbench window shell.

3.2
activeWorkbenchWindow org.eclipse.ui.IWorkbenchWindow

The active workbench window.

3.2
activeWorkbenchWindow.isCoolbarVisible java.lang.Boolean

Reports coolbar visibility for the currently active workbench window.

3.3
activeWorkbenchWindow.isPerspectiveBarVisible java.lang.Boolean

Reports perspective bar visibility for the currently active workbench window.

3.3
activeEditor org.eclipse.ui.IEditorPart

The currently active editor. This is remembered even if the editor is not the currently active part.

3.2
activeEditorId java.lang.String

The ID of the currently active editor. This can be used for expressions on the editor type.

3.2
activePart org.eclipse.ui.IWorkbenchPart

The active part, which can be the same as the active editor.

3.2
activePartId java.lang.String

The ID of the currently active part.

3.2
activeSite org.eclipse.ui.IWorkbenchPartSite

The site of the currently active part.

3.2
selection org.eclipse.jface.viewers.ISelection

The current global selection. It can be used in <test/> elements with org.eclipse.core.expressions.PropertyTester, in programmatic core expressions, and in 3.3 with <iterate/> and <count/> elements.

3.2
activeMenu A java.util.Collection of java.lang.String

This is the list of IDs of the showing context menu. Examples are like #TextEditorRuler or a part ID. Most commonly used with <iterate> and <count>, and can also be used with <test> and a org.eclipse.common.expressions.PropertyTester.

3.2
activeMenuSelection org.eclipse.jface.viewers.ISelection

This is a selection that is available while a context menu is showing. It is the selection from the selection provider used to register the context menu, usually from getSite().registerContextMenu(*). It is usually the same as the selectionvariable, but not always. This is more for legacy compatibility.

3.3
activeMenuEditorInput org.eclipse.jface.viewers.ISelection

This is a selection that is available while a context menu is showing. It is the selection from the editor input, usually if includeEditorInput was set to true during getEditorSite().registerContextMenu(*). This is more for legacy compatibility.

3.3
activeFocusControl org.eclipse.swt.widgets.Control

A control that has focus and has been registered with the IFocusService.

3.3
activeFocusControlId java.lang.String

The ID of a control that has focus and has been registered with the org.eclipse.ui.swt.IFocusService.

3.3

Property Testers

The Eclipse SDK provides a couple of property testers that can be used in core expressions. The expression defines a property attribute and then takes a combination of args and a value that is tester implementation dependent. The property attribute is the combination of the namespace and property name. For example, to test an IResource name the property would be org.eclipse.core.resources.name.


Namespace Type Implementation
org.eclipse.core.runtime

org.eclipse.core.runtime.Platform

PlatformPropertyTester.java

Property Description

product

Test the id of the currently active product.

isBundleInstalled

Test if a given bundle is installed in the running environment. Use the args attribute to pass in the bundle id.

Namespace Type Implementation
org.eclipse.core.resources

org.eclipse.core.resources.IResource

ResourcePropertyTester.java

Property Description

name

A property indicating the file name (value "name"). "*" and "?" wild cards are supported.

path

A property indicating the file path (value "path"). "*" and "?" wild cards are supported.

extension

A property indicating the file extension (value "extension"). "*" and "?" wild cards are supported.

readOnly

A property indicating whether the file is read only (value "readOnly").

projectNature

A property indicating the project nature (value "projectNature").

persistentProperty

A property indicating a persistent property on the selected resource (value "persistentProperty"). If two arguments are given, this treats the first as the property name, and the second as the expected property value. If only one argument (or just the expected value) is given, this treats it as the property name, and simply tests for existence of the property on the resource.

projectPersistentProperty

A property indicating a persistent property on the selected resource's project. (value "projectPersistentProperty"). If two arguments are given, this treats the first as the property name, and the second as the expected property value. If only one argument (or just the expected value) is given, this treats it as the property name, and simply tests for existence of the property on the resource.

sessionProperty

A property indicating a session property on the selected resource (value "sessionProperty"). If two arguments are given, this treats the first as the property name, and the second as the expected property value. If only one argument (or just the expected value) is given, this treats it as the property name, and simply tests for existence of the property on the resource.

projectSessionProperty

A property indicating a session property on the selected resource's project. (value "projectSessionProperty"). If two arguments are given, this treats the first as the property name, and the second as the expected property value. If only one argument (or just the expected value) is given, this treats it as the property name, and simply tests for existence of the property on the resource.

Namespace Type Implementation
org.eclipse.core.resources

org.eclipse.core.resources.IFile

FilePropertyTester.java

Property Description

contentTypeId

A property indicating that we are looking to verify that the file matches the content type matching the given identifier. The identifier is provided as the expected value.

Namespace Type Implementation
org.eclipse.core.resources

org.eclipse.core.resources.IProject

ProjectPropertyTester.java

Property Description

open

A property indicating whether the project is open (value "open").

Namespace Type Implementation
org.eclipse.core.resources

org.eclipse.core.resources.mapping.ResourceMapping

ResourceMappingPropertyTester.java

Property Description

projectPersistentProperty

A property indicating a persistent property on the selected resource's project. (value "projectPersistentProperty"). If two arguments are given, this treats the first as the property name, and the second as the expected property value. If only one argument (or just the expected value) is given, this treats it as the property name, and simply tests for existence of the property on the resource.

Namespace Type Implementation
org.eclipse.ui

org.eclipse.ui.IWorkbench

ActivityPropertyTester.java

Property Description

isActivityEnabled

Test if the activity in args is enabled.

isCategoryEnabled

Test if the category in args is enabled.

Namespace Type Implementation
org.eclipse.ui.workbenchWindow

org.eclipse.ui.IWorkbenchWindow

OpenPerspectivePropertyTester.java

Property Description

isPerspectiveOpen

Tests if any perspective is open.

Expression examples

Here are some examples. I'll pretend all of the examples are deciding when a handler is active.

Basic IStructuredSelection

A view provides a structured selection through its selection provider. An example would be the InfoView in org.eclipse.ui.examples.contributions. You can browse the plugin.xml and InfoView.java files. The InfoView provides an IStructuredSelection with 0 or more org.eclipse.ui.examples.contributions.model.Person.

When using the default variable, you must treat it as an java.util.Collection. That means using <count> or <iterate>


<activeWhen>
   <iterate>
      <instanceof value="org.eclipse.ui.examples.contributions.model.Person"/>
   </iterate>
</activeWhen>

Package Explorer IStructuredSelection

The Package Explorer is a mixture of org.eclipse.core.resources.IResource, org.eclipse.jdt.core.IJavaElement and other classes. If you are trying to find all of the *.java files, you would need to:

  1. Iterate through the default variable
  2. adapt the selection elements to your class, in this case IResource
  3. use one of the org.eclipse.core.resources property testers to test the IResource property

For example:

<activeWhen>
   <iterate>
      <adapt type="org.eclipse.core.resources.IResource">
         <test property="org.eclipse.core.resources.name" 
               value="*.java"/>
      </adapt>
   </iterate>
</activeWhen>

Active editor type

If you want your handler to be active for a specific type of editor, you can use activeEditorId to target your handler.

<activeWhen>
   <with variable="activeEditorId">
      <equals value="org.eclipse.ui.DefaultTextEditor"/>
   </with>
</activeWhen>

New Core Expressions in 3.3

In 3.3 there were 2 additions to the core expressions framework.

count and iterate

Count and iterate have always worked against java.util.Collection. The <count/> and <iterate> elements can now be used on any variable that adapts to org.eclipse.core.expressions.ICountable and org.eclipse.core.expressions.IIterable or implements the interfaces directly. It wasn't possible to use the java 1.5 constructs for iterable.

The workbench provides an adapter for ISelection and IStructuredSelection.

definitions

The org.eclipse.core.expressions.definitions extension point was introduced. You can create core expression definitions, and then reference them from other core expressions.

<extension point="org.eclipse.core.expressions.definitions">
   <definition id="org.eclipse.ui.examples.contributions.view.inView">
      <with variable="activePartId">
         <equals value="org.eclipse.ui.examples.contributions.view"/>
      </with>
   </definition>
</extension>

Then:

<activeWhen>
   <reference definitionId="org.eclipse.ui.examples.contributions.view.inView"/>
</activeWhen>

The referenced expression will be evaluated at this point.

Back to the top