View | Details | Raw Unified | Return to bug 173302 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/cdt/internal/ui/CProjectAdapterFactory.java (-2 / +15 lines)
Lines 11-16 Link Here
11
11
12
package org.eclipse.cdt.internal.ui;
12
package org.eclipse.cdt.internal.ui;
13
13
14
import org.eclipse.core.expressions.IEnablementVetoHolder;
14
import org.eclipse.core.resources.IProject;
15
import org.eclipse.core.resources.IProject;
15
import org.eclipse.core.runtime.IAdapterFactory;
16
import org.eclipse.core.runtime.IAdapterFactory;
16
17
Lines 23-30 Link Here
23
 */
24
 */
24
public class CProjectAdapterFactory implements IAdapterFactory {
25
public class CProjectAdapterFactory implements IAdapterFactory {
25
26
26
	private static final Class[] ADAPTERS = { IProject.class };
27
	private static final Class[] ADAPTERS = { IEnablementVetoHolder.class, IProject.class };
27
28
29
	private final IEnablementVetoHolder vetoHolder;
30
	
31
	public CProjectAdapterFactory() {
32
		vetoHolder = new IEnablementVetoHolder() {
33
			public boolean vetoes(String id) {
34
				return "org.eclipse.ui.propertypages.project.reference".equals(id); //$NON-NLS-1$
35
			}
36
		};
37
	}
38
	
28
	/*
39
	/*
29
	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class)
40
	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class)
30
	 */
41
	 */
Lines 32-37 Link Here
32
		if (IProject.class.equals(adapterType)) {
43
		if (IProject.class.equals(adapterType)) {
33
			return ((ICProject)adaptableObject).getProject();
44
			return ((ICProject)adaptableObject).getProject();
34
		}
45
		}
46
		if(IEnablementVetoHolder.class.equals(adapterType)) {
47
			return vetoHolder;
48
		}
35
		return null;
49
		return null;
36
	}
50
	}
37
51
Lines 41-45 Link Here
41
	public Class[] getAdapterList() {
55
	public Class[] getAdapterList() {
42
		return ADAPTERS;
56
		return ADAPTERS;
43
	}
57
	}
44
45
}
58
}
(-)plugin.xml (-3 / +25 lines)
Lines 42-47 Link Here
42
            class="org.eclipse.cdt.internal.ui.CProjectAdapterFactory"
42
            class="org.eclipse.cdt.internal.ui.CProjectAdapterFactory"
43
            adaptableType="org.eclipse.cdt.core.model.ICProject">
43
            adaptableType="org.eclipse.cdt.core.model.ICProject">
44
         <adapter type="org.eclipse.core.resources.IProject"/>
44
         <adapter type="org.eclipse.core.resources.IProject"/>
45
         <adapter type="org.eclipse.core.expressions.IEnablementVetoHolder"/>
45
      </factory>
46
      </factory>
46
   </extension>
47
   </extension>
47
48
Lines 1640-1645 Link Here
1640
             <instanceof value="org.eclipse.cdt.ui.CElementGrouping"/>
1641
             <instanceof value="org.eclipse.cdt.ui.CElementGrouping"/>
1641
          </or>
1642
          </or>
1642
       </triggerPoints>
1643
       </triggerPoints>
1644
       <override
1645
             policy="InvokeAlwaysRegardlessOfSuppressedExt"
1646
             suppressedExtensionId="org.eclipse.ui.navigator.resourceContent"/>
1643
       <possibleChildren>
1647
       <possibleChildren>
1644
          <or>
1648
          <or>
1645
             <instanceof value="org.eclipse.core.resources.IWorkspaceRoot"/>
1649
             <instanceof value="org.eclipse.core.resources.IWorkspaceRoot"/>
Lines 1652-1660 Link Here
1652
             <instanceof value="org.eclipse.cdt.ui.CElementGrouping"/>
1656
             <instanceof value="org.eclipse.cdt.ui.CElementGrouping"/>
1653
          </or>
1657
          </or>
1654
       </possibleChildren>
1658
       </possibleChildren>
1655
       <override
1659
       Mikhail has pointed out that the previous patch is unsuitable, as it relies on persitent properties on the project, and these are not preserved as part of the project when shared via source control.
1656
             policy="InvokeAlwaysRegardlessOfSuppressedExt"
1660
1657
             suppressedExtensionId="org.eclipse.ui.navigator.resourceContent"/>
1661
This second patch introduces a new PropertyTester acting on any type (java.lang.Object) testing a property "org.eclipse.core.expressions.notVetoed"
1662
1663
If the object being tested can be Adapted to an IEnablementVetoHolder, then it is queried to see if it vetoes the enablement of the host object, otherwise it has no effect.
1664
1665
This would allow us to have the Project References enablement check to see if the object its acting upon vetoes its enablement:
1666
1667
<enabledWhen>
1668
    <and>
1669
        <test
1670
           args="org.eclipse.ui.propertypages.project.reference"
1671
           property="org.eclipse.core.expressions.notVetoed">
1672
        </test>
1673
        <adapt
1674
           type="org.eclipse.core.resources.IProject">
1675
        </adapt>
1676
    </and>
1677
</enabledWhen>
1678
1679
Note that the test operates on the object before it is adapted to an IProject - this would allow CDT a say over what pages are displayed in its ICProject properties pages, without taking control over what is displayed for IProject objects.
1658
       <commonSorter
1680
       <commonSorter
1659
             class="org.eclipse.cdt.ui.CElementSorter"
1681
             class="org.eclipse.cdt.ui.CElementSorter"
1660
             id="org.eclipse.cdt.ui.commonSorter"/>
1682
             id="org.eclipse.cdt.ui.commonSorter"/>

Return to bug 173302