diff options
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.java | 64 |
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; + } +} |