| Summary: | IASTTranslationUnit.getRawSignature() return empty string. | ||||||
|---|---|---|---|---|---|---|---|
| Product: | [Tools] CDT | Reporter: | Alfred Wang <alfred.wang> | ||||
| Component: | cdt-parser | Assignee: | Markus Schorn <mschorn.eclipse> | ||||
| Status: | RESOLVED FIXED | QA Contact: | Markus Schorn <mschorn.eclipse> | ||||
| Severity: | normal | ||||||
| Priority: | P3 | CC: | cdtdoug, vivkong, wainersm | ||||
| Version: | 7.0 | ||||||
| Target Milestone: | 8.0 | ||||||
| Hardware: | PC | ||||||
| OS: | Linux | ||||||
| Whiteboard: | |||||||
| Attachments: |
|
||||||
Created attachment 190759 [details]
fix
Fixed in 8.0. *** cdt cvs genie on behalf of mschorn *** Bug 339316: Empty IASTTranslationUnit.getRawSignature(). [*] CPreprocessor.java 1.68 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java?root=Tools_Project&r1=1.67&r2=1.68 [*] ScannerContext.java 1.19 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerContext.java?root=Tools_Project&r1=1.18&r2=1.19 |
Build Identifier: CDT 7.0, org.eclipse.cdt.core_5.2.0.201006141710.jar A c++ source file, test.cpp is like this: #define MACRO 1 int main() { int i = MACRO; return i; } I use the following code to process this file: private static IASTTranslationUnit parse(String filename, String[] incPaths, ParserLanguage lang, boolean useGNUExtensions, boolean expectNoProblems) throws ParserException { FileContent codeReader = FileContent.createForExternalFileLocation(filename); ScannerInfo scannerInfo = new ScannerInfo(null, incPaths); IScannerExtensionConfiguration configuration = null; if (lang == ParserLanguage.C) configuration = GCCScannerExtensionConfiguration.getInstance(); else configuration = GPPScannerExtensionConfiguration.getInstance(); IScanner scanner = new CPreprocessor(codeReader, scannerInfo, lang, NULL_LOG, configuration, IncludeFileContentProvider.getSavedFilesProvider()); ISourceCodeParser parser2 = null; if (lang == ParserLanguage.CPP) { ICPPParserExtensionConfiguration config = null; if (useGNUExtensions) config = new GPPParserExtensionConfiguration(); else config = new ANSICPPParserExtensionConfiguration(); parser2 = new GNUCPPSourceParser(scanner, ParserMode.COMPLETE_PARSE, NULL_LOG, config); } else { ICParserExtensionConfiguration config = null; if (useGNUExtensions) config = new GCCParserExtensionConfiguration(); else config = new ANSICParserExtensionConfiguration(); parser2 = new GNUCSourceParser(scanner, ParserMode.COMPLETE_PARSE, NULL_LOG, config); } IASTTranslationUnit tu = parser2.parse(); if (parser2.encounteredError()) { for (int i = 0; i < tu.getPreprocessorProblems().length; i++) if (tu.getPreprocessorProblems()[i].isError()) System.err.println("Error:" + tu.getPreprocessorProblems()[i].getMessage()); } return tu; } public static void main(String[] args) { String inputFile = "/home/xxxx/test.cpp"; String[] incPaths = null; try { IASTTranslationUnit tu = parse(inputFile, incPaths, ParserLanguage.CPP, true, true); String result = tu.getRawSignature(); result.length(); } catch (ParserException ex) { ex.printStackTrace(); } } tu.getRawSignature() returns empty string. Reproducible: Always