data: improved ParserClientImpl recording performance

* Removed storage checks and single use methods
* cache file ids in ParserClientImpl to avoid lookup for every source location
* NameHierarchy::serialize with range to avoid copies when adding nodes
* removed duplicate code in IndexerCxx and IndexerJava, moved to Indexer
This commit is contained in:
Eberhard Graether
2018-09-23 17:52:05 +02:00
parent 7c039a2fb8
commit 34cdde604e
10 changed files with 149 additions and 259 deletions
+6 -42
View File
@@ -1,52 +1,16 @@
#include "IndexerJava.h"
#include "IndexerCommandJava.h"
#include "IndexerStateInfo.h"
#include "JavaParser.h"
#include "ParserClientImpl.h"
IndexerJava::IndexerJava()
: m_indexerStateInfo(std::make_shared<IndexerStateInfo>())
{
m_indexerStateInfo->indexingInterrupted = false;
}
IndexerJava::~IndexerJava()
{
JavaParser::clearCaches();
}
void IndexerJava::interrupt()
{
m_indexerStateInfo->indexingInterrupted = true;
}
std::shared_ptr<IntermediateStorage> IndexerJava::doIndex(std::shared_ptr<IndexerCommandJava> indexerCommand)
{
std::shared_ptr<ParserClientImpl> parserClient = std::make_shared<ParserClientImpl>();
std::shared_ptr<JavaParser> parser = std::make_shared<JavaParser>(parserClient, m_indexerStateInfo);
std::shared_ptr<IntermediateStorage> storage = std::make_shared<IntermediateStorage>();
parserClient->setStorage(storage);
parser->buildIndex(indexerCommand);
parserClient->resetStorage();
if (parserClient->hasFatalErrors())
{
storage->setAllFilesIncomplete();
}
else
{
storage->setFilesWithErrorsIncomplete();
}
if (m_indexerStateInfo->indexingInterrupted)
{
return std::shared_ptr<IntermediateStorage>();
}
return storage;
void IndexerJava::doIndex(
std::shared_ptr<IndexerCommandJava> indexerCommand,
std::shared_ptr<ParserClientImpl> parserClient,
std::shared_ptr<IndexerStateInfo> m_indexerStateInfo
){
JavaParser(parserClient, m_indexerStateInfo).buildIndex(indexerCommand);
}
+6 -8
View File
@@ -1,24 +1,22 @@
#ifndef INDEXER_JAVA_H
#define INDEXER_JAVA_H
#include <memory>
#include "Indexer.h"
#include "IndexerCommandJava.h"
struct IndexerStateInfo;
class IndexerJava: public Indexer<IndexerCommandJava>
class IndexerJava
: public Indexer<IndexerCommandJava>
{
public:
IndexerJava();
virtual ~IndexerJava();
void interrupt() override;
private:
std::shared_ptr<IntermediateStorage> doIndex(std::shared_ptr<IndexerCommandJava> indexerCommand) override;
std::shared_ptr<IndexerStateInfo> m_indexerStateInfo;
void doIndex(
std::shared_ptr<IndexerCommandJava> indexerCommand,
std::shared_ptr<ParserClientImpl> parserClient,
std::shared_ptr<IndexerStateInfo> m_indexerStateInfo) override;
};
#endif // INDEXER_JAVA_H