diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java index 76c81fe3fc1..56ac3aa661c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java @@ -84,7 +84,7 @@ public class Scanner2 implements IScanner, IScannerData { int count; private ExpressionEvaluator expressionEvaluator = new ExpressionEvaluator(); - private final Map fileCache = new HashMap(100); + private final CharArrayObjectMap fileCache = new CharArrayObjectMap(100); // The context stack private static final int bufferInitialSize = 8; @@ -1486,12 +1486,13 @@ public class Scanner2 implements IScanner, IScannerData { { String absolutePath = parentFile.getAbsolutePath(); String finalPath = ScannerUtility.createReconciledPath( absolutePath, filename ); - reader = (CodeReader)fileCache.get(finalPath); - if (reader == null) + reader = (CodeReader)fileCache.get(finalPath.toCharArray()); + if (reader == null){ reader = ScannerUtility.createReaderDuple( finalPath, requestor, getWorkingCopies() ); - if (reader != null) { - if (reader.filename != null) + if (reader != null && reader.filename != null) fileCache.put(reader.filename, reader); + } + if (reader != null) { if (dlog != null) dlog.println("#include \"" + finalPath + "\""); //$NON-NLS-1$ //$NON-NLS-2$ IASTInclusion inclusion = getASTFactory().createInclusion( fileNameArray, reader.filename, local, startOffset, startingLineNumber, nameOffset, nameEndOffset, nameLine, endOffset, endLine, getCurrentFilename() ); pushContext(reader.buffer, new InclusionData( reader, inclusion )); @@ -1513,12 +1514,13 @@ public class Scanner2 implements IScanner, IScannerData { continue; } } else { - reader = (CodeReader)fileCache.get(finalPath); - if (reader == null) + reader = (CodeReader)fileCache.get(finalPath.toCharArray()); + if (reader == null){ reader = ScannerUtility.createReaderDuple( finalPath, requestor, getWorkingCopies() ); - if (reader != null) { - if (reader.filename != null) + if (reader != null && reader.filename != null) fileCache.put(reader.filename, reader); + } + if (reader != null) { if (dlog != null) dlog.println("#include <" + finalPath + ">"); //$NON-NLS-1$ //$NON-NLS-2$ IASTInclusion inclusion = getASTFactory().createInclusion( fileNameArray, reader.filename, local, startOffset, startingLineNumber, nameOffset, nameEndOffset, nameLine, endOffset, endLine, getCurrentFilename() ); pushContext(reader.buffer, new InclusionData( reader, inclusion ));