/******************************************************************************* * Copyright (c) 2004, 2005 IBM 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: * IBM Corporation - initial API and implementation *******************************************************************************/ /* */ package org.eclipse.jem.internal.proxy.core; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.pde.core.plugin.*; import org.eclipse.jem.internal.proxy.core.ProxyPlugin.FoundIDs; /* * Used for PDE Processing for the Proxy Plugin class. It will be optionally loaded * if PDE plugin is installed. This allows usage in an installation that doesn't have * PDE installed. * * @since 1.0.2 */ class PDEProcessForPlugin implements ProxyPlugin.IPDEProcessForPlugin { /* * (non-Javadoc) * @see org.eclipse.jem.internal.proxy.core.ProxyPlugin.IPDEProcessForPlugin#processPlugin(org.eclipse.jdt.core.IJavaProject, java.util.Map, boolean, boolean) */ public void findPlugins(IJavaProject project, FoundIDs foundIds, boolean visible, boolean first) { IPluginModelBase m = PluginRegistry.findModel(project.getProject()); if (m instanceof IPluginModel) { // it is a plugin, process it. IPlugin plugin = ((IPluginModel) m).getPlugin(); if (foundIds.pluginIds.containsKey(plugin.getId())) return; // already processed it foundIds.pluginIds.put(plugin.getId(), first || visible ? Boolean.TRUE : Boolean.FALSE); expandPlugin(plugin, foundIds, visible, first); } return; } private void expandPlugin(IPluginBase plugin, FoundIDs foundIds, boolean visible, boolean first) { IPluginImport[] imports = plugin.getImports(); for (int i = 0; i < imports.length; i++) { IPluginImport pi = imports[i]; Boolean piValue = (Boolean) foundIds.pluginIds.get(pi.getId()); boolean importVisible = first || (visible && pi.isReexported()); if (piValue != null && (!importVisible || piValue.booleanValue())) continue; // we already processed it, this time not visible, or this time visible and was previously visible. // Now either first time, or it was there before, but now visible, but this time it is visible. // We want it to become visible in that case. foundIds.pluginIds.put(pi.getId(), importVisible ? Boolean.TRUE : Boolean.FALSE); // Note: this search does not take into account the IPluginImport's version or match level // but neither did the previous version IPluginModelBase model = PluginRegistry.findModel(pi.getId()); if (model != null && model.isEnabled()) { IPluginBase foundPlugin = model.getPluginBase(); if (foundPlugin != null) { expandPlugin(foundPlugin, foundIds, importVisible, false); } } } } }