From e7d6eed46debb9efde3dd8a22f55264bdf77f29d Mon Sep 17 00:00:00 2001 From: John Camelon Date: Tue, 19 Apr 2005 19:32:33 +0000 Subject: [PATCH] Fixed Bug 91086 - Indexer problem: Preprocessor inclusion not found --- .../parser/tests/scanner2/IncludeTest.java | 19 +++++++++++++++++++ .../core/parser/scanner2/BaseScanner.java | 16 ++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/IncludeTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/IncludeTest.java index f9f03ac39d9..45b24484612 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/IncludeTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/IncludeTest.java @@ -25,6 +25,7 @@ import org.eclipse.cdt.core.parser.NullLogService; import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.ParserMode; +import org.eclipse.cdt.core.parser.ScannerInfo; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTVariable; import org.eclipse.cdt.core.parser.tests.CompleteParseBaseTest; @@ -164,4 +165,22 @@ public class IncludeTest extends FileBasePluginTest { assertEquals( v.getName(), "three" ); //$NON-NLS-1$ assertFalse( i.hasNext() ); } + + public void testBug91086() throws Exception { + IFile inclusion = importFile( "file.h", "#define FOUND 666\n" ); //$NON-NLS-1$ //$NON-NLS-2$ + StringBuffer buffer = new StringBuffer( "#include \"" ); //$NON-NLS-1$ + buffer.append( inclusion.getLocation().toOSString() ); + buffer.append( "\"\n"); //$NON-NLS-1$ + buffer.append( "int var = FOUND;\n"); //$NON-NLS-1$ + IFile code = importFile( "code.c", buffer.toString() ); //$NON-NLS-1$ + for (ParserLanguage p = ParserLanguage.C; p != null; p = (p == ParserLanguage.C) ? ParserLanguage.CPP + : null) { + Iterator i = parse( code, p, new ScannerInfo() ).getDeclarations(); + IASTVariable var = (IASTVariable) i.next(); + assertEquals( var.getInitializerClause().getAssigmentExpression().getLiteralString(), "666" ); //$NON-NLS-1$ + assertFalse( i.hasNext() ); + } + + + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java index a9635b5fb55..2d5c8838adf 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java @@ -2882,6 +2882,22 @@ abstract class BaseScanner implements IScanner { } } + // if not found by this point, and the inclusion is local, try just the + // path as is (bug 91086) + + if( local ) + { + reader = createReader( EMPTY_STRING, filename ); + if (reader != null) { + pushContext(reader.buffer, new InclusionData(reader, + createInclusionConstruct(fileNameArray, + reader.filename, local, startOffset, + startingLine, nameOffset, + nameEndOffset, nameLine, endOffset, + endLine, false))); + return; + } + } handleProblem(IProblem.PREPROCESSOR_INCLUSION_NOT_FOUND, startOffset, fileNameArray); }