From dc537c5cd0e1a3d04a4911b2f345e0d27e5da8b6 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Thu, 26 Jul 2007 12:35:58 +0000 Subject: [PATCH] Fix for 197930, Scanner Discovery handling if-statements. --- .../GCCPerFileBOPConsoleParserTests.java | 13 +++++++++++++ .../gnu/GCCPerFileBOPConsoleParser.java | 2 +- .../gnu/GCCPerFileBOPConsoleParserUtility.java | 8 ++++---- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/GCCPerFileBOPConsoleParserTests.java b/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/GCCPerFileBOPConsoleParserTests.java index af42b9eef80..3e22eb46775 100644 --- a/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/GCCPerFileBOPConsoleParserTests.java +++ b/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/GCCPerFileBOPConsoleParserTests.java @@ -10,13 +10,17 @@ *******************************************************************************/ package org.eclipse.cdt.make.scannerdiscovery; +import java.util.List; + import junit.framework.TestSuite; import org.eclipse.cdt.core.IMarkerGenerator; import org.eclipse.cdt.core.ProblemMarkerInfo; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.testplugin.CProjectHelper; +import org.eclipse.cdt.make.core.scannerconfig.ScannerInfoTypes; import org.eclipse.cdt.make.internal.core.scannerconfig.gnu.GCCPerFileBOPConsoleParser; +import org.eclipse.cdt.make.internal.core.scannerconfig.util.CCommandDSC; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; @@ -55,4 +59,13 @@ public class GCCPerFileBOPConsoleParserTests extends BaseBOPConsoleParserTests { CProjectHelper.delete(fCProject); } } + + public void testParsingIfStatement_bug197930() throws Exception { + fOutputParser.processLine("if gcc -g -O0 -I\"include abc\" -c impl/testmath.c; then ; fi"); //$NON-NLS-1$ + + List cmds = fCollector.getCollectedScannerInfo(null, ScannerInfoTypes.COMPILER_COMMAND); + assertEquals(1, cmds.size()); + CCommandDSC command= (CCommandDSC) cmds.get(0); + assertEquals("gcc", command.getCompilerName()); + } } diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCPerFileBOPConsoleParser.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCPerFileBOPConsoleParser.java index daccdacc595..8b0940025ac 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCPerFileBOPConsoleParser.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCPerFileBOPConsoleParser.java @@ -115,7 +115,7 @@ public class GCCPerFileBOPConsoleParser extends AbstractGCCBOPConsoleParser { } } - CCommandDSC cmd = fUtil.getNewCCommandDSC(tokens, extensionsIndex > 0); + CCommandDSC cmd = fUtil.getNewCCommandDSC(tokens, compilerInvocationIndex, extensionsIndex > 0); IPath baseDirectory = fUtil.getBaseDirectory(); if (baseDirectory.isPrefixOf(pFilePath)) { List cmdList = new ArrayList(); diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCPerFileBOPConsoleParserUtility.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCPerFileBOPConsoleParserUtility.java index d1dafb488b1..e8c9e5c7893 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCPerFileBOPConsoleParserUtility.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCPerFileBOPConsoleParserUtility.java @@ -114,7 +114,7 @@ public class GCCPerFileBOPConsoleParserUtility extends AbstractGCCBOPConsolePars compiledFileList.add(longFileName); String[] tokens = genericLine.split("\\s+"); //$NON-NLS-1$ - CCommandDSC command = getNewCCommandDSC(tokens, false); // assume .c file type + CCommandDSC command = getNewCCommandDSC(tokens, 0, false); // assume .c file type int index = commandsList2.indexOf(command); if (index == -1) { commandsList2.add(command); @@ -133,12 +133,12 @@ public class GCCPerFileBOPConsoleParserUtility extends AbstractGCCBOPConsolePars * @param cppFileType * @return CCommandDSC compile command description */ - public CCommandDSC getNewCCommandDSC(String[] tokens, boolean cppFileType) { + public CCommandDSC getNewCCommandDSC(String[] tokens, final int idxOfCompilerCommand, boolean cppFileType) { ArrayList dirafter = new ArrayList(); ArrayList includes = new ArrayList(); CCommandDSC command = new CCommandDSC(cppFileType, getProject()); - command.addSCOption(new KVStringPair(SCDOptionsEnum.COMMAND.toString(), tokens[0])); - for (int i = 1; i < tokens.length; ++i) { + command.addSCOption(new KVStringPair(SCDOptionsEnum.COMMAND.toString(), tokens[idxOfCompilerCommand])); + for (int i = idxOfCompilerCommand+1; i < tokens.length; ++i) { String token = tokens[i]; //Target specific options: see GccScannerInfoConsoleParser if (token.startsWith("-m") || //$NON-NLS-1$