private TokenStream getTokenStreamOfIncludedFile(final CsmInclude include) {
FileImpl file = (FileImpl) include.getIncludeFile();
if (file != null && file.isValid()) {
PreprocessorStatePair includeContextPair = this.getContextPreprocStatePair(include.getStartOffset(), include.getEndOffset());
if (includeContextPair == null) {
return file.getTokenStream(0, Integer.MAX_VALUE, 0, true);
}
APTPreprocHandler.State thisFileStartState = includeContextPair.state;
LinkedList<APTIncludeHandler.IncludeInfo> reverseInclStack = APTHandlersSupport.extractIncludeStack(thisFileStartState);
reverseInclStack.addLast(new IncludeInfoImpl(include, file.getAbsolutePath()));
ProjectBase projectImpl = getProjectImpl(true);
if (projectImpl == null) {
return file.getTokenStream(0, Integer.MAX_VALUE, 0, true);
}
APTPreprocHandler preprocHandler = projectImpl.createEmptyPreprocHandler(getAbsolutePath());
APTPreprocHandler restorePreprocHandlerFromIncludeStack = projectImpl.restorePreprocHandlerFromIncludeStack(reverseInclStack, getAbsolutePath(), preprocHandler, thisFileStartState, Interrupter.DUMMY);
TokenStream includedFileTS = file.createParsingTokenStreamForHandler(restorePreprocHandlerFromIncludeStack, true, null, null);
if(includedFileTS != null) {
APTLanguageFilter languageFilter = file.getLanguageFilter(thisFileStartState);
return languageFilter.getFilteredStream(includedFileTS);
}
}
return null;
}