StubBuilderType (@NotNull IndexedFile file, boolean toBuild) { FileType fileType = file.getFileType(); BinaryFileStubBuilder builder = BinaryFileStubBuilders.INSTANCE.forFileType(fileType); if (builder != null) { if (builder instanceof BinaryFileStubBuilder.CompositeBinaryFileStubBuilder<?>) { Object subBuilder = ((BinaryFileStubBuilder.CompositeBinaryFileStubBuilder<?>)builder).getSubBuilder((FileContent) file); return new StubBuilderType((BinaryFileStubBuilder.CompositeBinaryFileStubBuilder<?>)builder, subBuilder); } else { return new StubBuilderType(builder); } } if (fileType instanceof LanguageFileType) { Language l = ((LanguageFileType)fileType).getLanguage(); ParserDefinition parserDefinition = LanguageParserDefinitions.INSTANCE.forLanguage(l); if (parserDefinition == null) { return null; } IFileElementType elementType = parserDefinition.getFileNodeType(); if (!(elementType instanceof IStubFileElementType)) return null; VirtualFile vFile = file.getFile(); boolean shouldBuildStubFor = ((IStubFileElementType<?>)elementType).shouldBuildStubFor(vFile); if (toBuild && !shouldBuildStubFor) return null; PushedFilePropertiesRetriever pushedFilePropertiesRetriever = PushedFilePropertiesRetriever.getInstance(); @NotNull List<String> properties = pushedFilePropertiesRetriever != null ? pushedFilePropertiesRetriever.dumpSortedPushedProperties(vFile) : Collections.emptyList(); return new StubBuilderType((IStubFileElementType<?>)elementType, properties); } return null; }