/******************************************************************************* * 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; } }