All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.core.internal.resources.mapping.ModelProviderDescriptor Maven / Gradle / Ivy

Go to download

AspectJ tools most notably contains the AspectJ compiler (AJC). AJC applies aspects to Java classes during compilation, fully replacing Javac for plain Java classes and also compiling native AspectJ or annotation-based @AspectJ syntax. Furthermore, AJC can weave aspects into existing class files in a post-compile binary weaving step. This library is a superset of AspectJ weaver and hence also of AspectJ runtime.

There is a newer version: 1.9.22.1
Show newest version
/*******************************************************************************
 * Copyright (c) 2005, 2015 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *     James Blackburn (Broadcom Corp.) - ongoing development
 *     Lars Vogel  - Bug 473427
 *******************************************************************************/
package org.eclipse.core.internal.resources.mapping;

import java.util.*;
import org.eclipse.core.expressions.*;
import org.eclipse.core.internal.resources.ResourceException;
import org.eclipse.core.internal.utils.Messages;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.resources.mapping.*;
import org.eclipse.core.runtime.*;
import org.eclipse.osgi.util.NLS;

public class ModelProviderDescriptor implements IModelProviderDescriptor {

	private String id;
	private String[] extendedModels;
	private String label;
	private ModelProvider provider;
	private Expression enablementRule;

	private static EvaluationContext createEvaluationContext(Object element) {
		EvaluationContext result = new EvaluationContext(null, element);
		return result;
	}

	public ModelProviderDescriptor(IExtension extension) throws CoreException {
		readExtension(extension);
	}

	private boolean convert(EvaluationResult eval) {
		if (eval == EvaluationResult.FALSE)
			return false;
		return true;
	}

	protected void fail(String reason) throws CoreException {
		throw new ResourceException(new Status(IStatus.ERROR, ResourcesPlugin.PI_RESOURCES, 1, reason, null));
	}

	@Override
	public String[] getExtendedModels() {
		return extendedModels;
	}

	@Override
	public String getId() {
		return id;
	}

	@Override
	public String getLabel() {
		return label;
	}

	@Override
	public IResource[] getMatchingResources(IResource[] resources) throws CoreException {
		Set result = new HashSet<>();
		for (IResource resource : resources) {
			EvaluationContext evalContext = createEvaluationContext(resource);
			if (matches(evalContext)) {
				result.add(resource);
			}
		}
		return result.toArray(new IResource[result.size()]);
	}

	@Override
	public synchronized ModelProvider getModelProvider() throws CoreException {
		if (provider == null) {
			IExtension extension = Platform.getExtensionRegistry().getExtension(ResourcesPlugin.PI_RESOURCES, ResourcesPlugin.PT_MODEL_PROVIDERS, id);
			IConfigurationElement[] elements = extension.getConfigurationElements();
			for (IConfigurationElement element : elements) {
				if (element.getName().equalsIgnoreCase("modelProvider")) { //$NON-NLS-1$
					try {
						provider = (ModelProvider) element.createExecutableExtension("class"); //$NON-NLS-1$
						provider.init(this);
					} catch (ClassCastException e) {
						String message = NLS.bind(Messages.mapping_wrongType, id);
						throw new CoreException(new Status(IStatus.ERROR, ResourcesPlugin.PI_RESOURCES, Platform.PLUGIN_ERROR, message, e));
					}
				}
			}
		}
		return provider;
	}

	public boolean matches(IEvaluationContext context) throws CoreException {
		if (enablementRule == null)
			return false;
		return convert(enablementRule.evaluate(context));
	}

	/**
	 * Initialize this descriptor based on the provided extension point.
	 */
	protected void readExtension(IExtension extension) throws CoreException {
		//read the extension
		id = extension.getUniqueIdentifier();
		if (id == null)
			fail(Messages.mapping_noIdentifier);
		label = extension.getLabel();
		IConfigurationElement[] elements = extension.getConfigurationElements();
		int count = elements.length;
		ArrayList extendsList = new ArrayList<>(count);
		for (int i = 0; i < count; i++) {
			IConfigurationElement element = elements[i];
			String name = element.getName();
			if (name.equalsIgnoreCase("extends-model")) { //$NON-NLS-1$
				String attribute = element.getAttribute("id"); //$NON-NLS-1$
				if (attribute == null)
					fail(NLS.bind(Messages.mapping_invalidDef, id));
				extendsList.add(attribute);
			} else if (name.equalsIgnoreCase(ExpressionTagNames.ENABLEMENT)) {
				enablementRule = ExpressionConverter.getDefault().perform(element);
			}
		}
		extendedModels = extendsList.toArray(new String[extendsList.size()]);
	}

	@Override
	public ResourceTraversal[] getMatchingTraversals(ResourceTraversal[] traversals) throws CoreException {
		List result = new ArrayList<>();
		for (ResourceTraversal traversal : traversals) {
			if (getMatchingResources(traversal.getResources()).length > 0) {
				result.add(traversal);
			}
		}
		return result.toArray(new ResourceTraversal[result.size()]);
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy