/******************************************************************************* * Copyright (c) 2004, 2010 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 - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.make.internal.core.scannerconfig2; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.eclipse.cdt.make.core.MakeCorePlugin; import org.eclipse.cdt.make.core.scannerconfig.IExternalScannerInfoProvider; import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector; import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoConsoleParser; import org.eclipse.cdt.make.core.scannerconfig.InfoContext; import org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigProfile.Action; import org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigProfile.BuildOutputProvider; import org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigProfile.ScannerInfoCollector; import org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigProfile.ScannerInfoConsoleParser; import org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigProfile.ScannerInfoProvider; import org.eclipse.core.resources.IProject; /** * Instantiated scanner config profile * * @author vhirsl */ public class SCProfileInstance { private IProject project; private ScannerConfigProfile profile; private IScannerInfoCollector collector; private InfoContext context; /** * */ public SCProfileInstance(IProject project, ScannerConfigProfile profile) { this(project, new InfoContext(project), profile); } public SCProfileInstance(IProject project, InfoContext context, ScannerConfigProfile profile) { this.project = project; this.profile = profile; this.context = context; } /** * */ private void instantiateCollector() { // create collector object collector = createScannerInfoCollector(); if (collector != null) { // call collector.setProject(project) if class supports it Class<? extends IScannerInfoCollector> clazz = collector.getClass(); try { // Method setProjectMethod = clazz.getMethod("setProject", new Class[] {IProject.class});//$NON-NLS-1$ // setProjectMethod.invoke(collector, new Object[] {project}); Object[] args = null; Method setMethod = null; if(context != null){ try { setMethod = clazz.getMethod("setInfoContext", new Class[] {InfoContext.class});//$NON-NLS-1$ args = new Object[]{context}; } catch(NoSuchMethodException e) { } } if(setMethod == null){ try { setMethod = clazz.getMethod("setProject", new Class[] {IProject.class});//$NON-NLS-1$ args = new Object[]{project}; } catch(NoSuchMethodException e) { } } if(setMethod != null) setMethod.invoke(collector, args); } catch (SecurityException e) { MakeCorePlugin.log(e); // } catch (NoSuchMethodException e) { } catch (IllegalArgumentException e) { } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { MakeCorePlugin.log(e.getCause()); } } // all other objects are created on request } public ScannerConfigProfile getProfile() { return profile; } /** * @return a single scannerInfoCollector object */ public IScannerInfoCollector getScannerInfoCollector() { if (collector == null) { instantiateCollector(); } return collector; } public IScannerInfoCollector createScannerInfoCollector() { ScannerInfoCollector collector = profile.getScannerInfoCollectorElement(); if (collector != null) { return collector.createScannerInfoCollector(); } return null; } /** * @return Creates new buildOutputProvider user object. */ public IExternalScannerInfoProvider createBuildOutputProvider() { BuildOutputProvider bop = profile.getBuildOutputProviderElement(); if (bop != null) { Action action = bop.getAction(); if (action != null) { return (IExternalScannerInfoProvider) action.createExternalScannerInfoProvider(); } } return null; } /** * @return Creates new buildOutputParser user object. */ public IScannerInfoConsoleParser createBuildOutputParser() { BuildOutputProvider bop = profile.getBuildOutputProviderElement(); if (bop != null) { ScannerInfoConsoleParser parserElement = bop.getScannerInfoConsoleParser(); if (parserElement != null) { return (IScannerInfoConsoleParser) parserElement.createScannerInfoConsoleParser(); } } return null; } /** * @return Creates new externalSIProvider user object. */ public IExternalScannerInfoProvider createExternalScannerInfoProvider(String providerId) { ScannerInfoProvider provider = profile.getScannerInfoProviderElement(providerId); if (provider != null) { return (IExternalScannerInfoProvider) provider.getAction().createExternalScannerInfoProvider(); } return null; } /** * @return Creates new esiProviderOutputParser user object. */ public IScannerInfoConsoleParser createExternalScannerInfoParser(String providerId) { ScannerInfoProvider provider = profile.getScannerInfoProviderElement(providerId); if (provider != null) { return (IScannerInfoConsoleParser) provider.getScannerInfoConsoleParser().createScannerInfoConsoleParser(); } return null; } }