Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/expressions/CPropertyTester.java')
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/expressions/CPropertyTester.java64
1 files changed, 64 insertions, 0 deletions
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/expressions/CPropertyTester.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/expressions/CPropertyTester.java
new file mode 100644
index 00000000000..ecf152b3170
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/expressions/CPropertyTester.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2014 Intel Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Intel Corporation - initial API and implementation
+ * Sergey Prigogin (Google)
+ *******************************************************************************/
+package org.eclipse.cdt.internal.ui.expressions;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.IPreferencesService;
+
+import org.eclipse.cdt.core.model.CoreModel;
+import org.eclipse.cdt.core.model.ITranslationUnit;
+
+/**
+ * Property tester to test expressions in plugin.xml. Tests following expressions:
+ * 1. Checks whether given object is a source file. Usage:
+ * <test property="org.eclipse.cdt.ui.isSource"/>
+ * 2. Checks value of a preference. Usage:
+ * <test property="org.eclipse.cdt.ui.checkPreference" value="org.eclipse.cdt.ui:properties.export.page.enable=true"/>
+ */
+public class CPropertyTester extends PropertyTester {
+ private static final String KEY_SRC = "isSource"; //$NON-NLS-1$
+ private static final String KEY_PREF = "checkPreference"; //$NON-NLS-1$
+ private static final Pattern PREFERENCE_PATTERN = Pattern.compile("(.*)[/:](.*)=(.*)"); //$NON-NLS-1$
+
+ @Override
+ public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+ if (KEY_SRC.equals(property)) {
+ if (receiver instanceof ITranslationUnit) {
+ return ((ITranslationUnit) receiver).isSourceUnit();
+ } else if (receiver instanceof IFile) {
+ IFile file = (IFile) receiver;
+ return CoreModel.isValidSourceUnitName(file.getProject(), file.getName());
+ }
+ } else if (KEY_PREF.equals(property) && expectedValue instanceof String) {
+ Matcher matcher = PREFERENCE_PATTERN.matcher((String) expectedValue);
+ if (matcher.matches()) {
+ String pluginId = matcher.group(1);
+ String preference = matcher.group(2);
+ String wantedValue = matcher.group(3);
+
+ IPreferencesService preferences = Platform.getPreferencesService();
+ String actualValue = preferences.getString(pluginId, preference, null, null);
+ if (wantedValue != null) {
+ return wantedValue.equals(actualValue) || (actualValue == null && wantedValue.equals("false")); //$NON-NLS-1$
+ } else {
+ return actualValue != null;
+ }
+ }
+ }
+ return false;
+ }
+}

Back to the top