From c5183b1756b19bb73c2bba78888878888bd788b7 Mon Sep 17 00:00:00 2001 From: Vladimir Hirsl Date: Wed, 26 Jan 2005 20:44:23 +0000 Subject: [PATCH] Fix for a problem where SC was not being discovered for Managed projects. --- .../ScannerInfoConsoleParserFactory.java | 2 +- .../scannerconfig2/DefaultRunSIProvider.java | 2 +- .../scannerconfig2/SCProfileInstance.java | 39 ++++++++++++++++--- .../DefaultGCCScannerInfoCollector.java | 15 +------ .../ManagedBuildCPathEntryContainer.java | 3 +- 5 files changed, 39 insertions(+), 22 deletions(-) diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoConsoleParserFactory.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoConsoleParserFactory.java index 7e5480b4c4e..06aaca95725 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoConsoleParserFactory.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoConsoleParserFactory.java @@ -50,13 +50,13 @@ public class ScannerInfoConsoleParserFactory { IProject currentProject, String providerId, IScannerConfigBuilderInfo2 scBuildInfo, + IScannerInfoCollector collector, IMarkerGenerator markerGenerator) { if (scBuildInfo.isProviderOutputParserEnabled(providerId)) { // get the ESIProvider console parser SCProfileInstance profileInstance = ScannerConfigProfileManager.getInstance(). getSCProfileInstance(currentProject, scBuildInfo.getSelectedProfileId()); IScannerInfoConsoleParser clParser = profileInstance.createExternalScannerInfoParser(providerId); - IScannerInfoCollector collector = profileInstance.getScannerInfoCollector(); clParser.startup(currentProject, currentProject.getLocation(), collector, markerGenerator); // create an output stream sniffer return new ConsoleOutputSniffer(outputStream, errorStream, new diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java index 2264b9acf95..7eb6b02a21f 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java @@ -108,7 +108,7 @@ public class DefaultRunSIProvider implements IExternalScannerInfoProvider { cos = new StreamMonitor(new SubProgressMonitor(monitor, 70), cos, 100); ConsoleOutputSniffer sniffer = ScannerInfoConsoleParserFactory.getESIProviderOutputSniffer( - cos, cos, currentProject, providerId, buildInfo, markerGenerator); + cos, cos, currentProject, providerId, buildInfo, collector, markerGenerator); OutputStream consoleOut = (sniffer == null ? cos : sniffer.getOutputStream()); OutputStream consoleErr = (sniffer == null ? cos : sniffer.getErrorStream()); TraceUtil.outputTrace("Default provider is executing command:", fCompileCommand.toString() + ca, ""); //$NON-NLS-1$ //$NON-NLS-2$ diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/SCProfileInstance.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/SCProfileInstance.java index 0b942ec7ee2..5cc44b5f3bb 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/SCProfileInstance.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/SCProfileInstance.java @@ -10,12 +10,16 @@ ***********************************************************************/ 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.IScannerInfoCollector2; import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoConsoleParser; 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; @@ -35,16 +39,27 @@ public class SCProfileInstance { public SCProfileInstance(IProject project, ScannerConfigProfile profile) { this.project = project; this.profile = profile; - instantiate(); } /** * */ - private void instantiate() { + private void instantiateCollector() { // create collector object - collector = (IScannerInfoCollector) profile.getScannerInfoCollectorElement().createScannerInfoCollector(); - if (collector instanceof IScannerInfoCollector2) { - ((IScannerInfoCollector2) collector).setProject(project); + collector = createScannerInfoCollector(); + if (collector != null) { + // call collector.setProject(project) if class supports it + Class clazz = (Class) collector.getClass(); + try { + Method setProjectMethod = clazz.getMethod("setProject", new Class[] {IProject.class});//$NON-NLS-1$ + setProjectMethod.invoke(collector, new Object[] {project}); + } 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 } @@ -60,8 +75,20 @@ public class SCProfileInstance { * @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 (IScannerInfoCollector) collector.createScannerInfoCollector(); + } + return null; + } + /** * @return Creates new buildOutputProvider user object. */ diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/DefaultGCCScannerInfoCollector.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/DefaultGCCScannerInfoCollector.java index 550b92f7160..277ab77aac4 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/DefaultGCCScannerInfoCollector.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/DefaultGCCScannerInfoCollector.java @@ -16,13 +16,11 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector2; import org.eclipse.cdt.make.core.scannerconfig.ScannerInfoTypes; import org.eclipse.cdt.make.internal.core.scannerconfig.util.TraceUtil; +import org.eclipse.cdt.managedbuilder.scannerconfig.IManagedScannerInfoCollector; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; /** * Implementation class for gathering the built-in compiler settings for @@ -32,7 +30,7 @@ import org.eclipse.core.runtime.IProgressMonitor; * * @since 2.0 */ -public class DefaultGCCScannerInfoCollector implements IScannerInfoCollector2 { +public class DefaultGCCScannerInfoCollector implements IManagedScannerInfoCollector { protected Map definedSymbols; protected static final String EQUALS = "="; //$NON-NLS-1$ protected List includePaths; @@ -99,17 +97,8 @@ public class DefaultGCCScannerInfoCollector implements IScannerInfoCollector2 { */ public void setProject(IProject project) { this.project = project; - } - /* (non-Javadoc) - * @see org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector2#updateScannerConfiguration(org.eclipse.core.runtime.IProgressMonitor) - */ - public void updateScannerConfiguration(IProgressMonitor monitor) throws CoreException { - // TODO Auto-generated method stub - - } - /* (non-Javadoc) * @see org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector#getCollectedScannerInfo(java.lang.Object, org.eclipse.cdt.make.core.scannerconfig.ScannerInfoTypes) */ diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildCPathEntryContainer.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildCPathEntryContainer.java index c38384c0881..5914212c167 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildCPathEntryContainer.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildCPathEntryContainer.java @@ -214,10 +214,11 @@ public class ManagedBuildCPathEntryContainer implements IPathEntryContainer { // See if we can load a dynamic resolver SCProfileInstance profileInstance = ScannerConfigProfileManager.getInstance(). getSCProfileInstance(project, MM_PP_DISCOVERY_PROFILE_ID); - IScannerInfoCollector collector = profileInstance.getScannerInfoCollector(); + IScannerInfoCollector collector = profileInstance.createScannerInfoCollector(); if (collector instanceof IManagedScannerInfoCollector) { IManagedScannerInfoCollector mCollector = (IManagedScannerInfoCollector) collector; + mCollector.setProject(project); ManagedBuildCPathEntryContainer.outputTrace(project.getName(), "Path entries collected dynamically"); //$NON-NLS-1$ calculateEntriesDynamically((IProject)info.getOwner(), profileInstance, collector); addIncludePaths(mCollector.getIncludePaths());