diff --git a/java_indexer/src/io/coati/AccessKind.java b/java_indexer/src/io/coati/AccessKind.java index 5195fca5..63c7cefd 100644 --- a/java_indexer/src/io/coati/AccessKind.java +++ b/java_indexer/src/io/coati/AccessKind.java @@ -3,7 +3,7 @@ package io.coati; import com.github.javaparser.ast.AccessSpecifier; public enum AccessKind -{ // these values need to be the same as AccesType in C++ code +{ // these values need to be the same as AccesKind in C++ code NONE(0), PUBLIC(1), PROTECTED(2), diff --git a/java_indexer/src/io/coati/DefinitionKind.java b/java_indexer/src/io/coati/DefinitionKind.java new file mode 100644 index 00000000..84e25647 --- /dev/null +++ b/java_indexer/src/io/coati/DefinitionKind.java @@ -0,0 +1,20 @@ +package io.coati; + +public enum DefinitionKind +{ // these values need to be the same as DefinitionKind in C++ code + NONE(0), + IMPLICIT(1), + EXPLICIT(2); + + private final int m_value; + + private DefinitionKind(int value) + { + this.m_value = value; + } + + public int getValue() + { + return m_value; + } +} diff --git a/java_indexer/src/io/coati/JavaAstVisitor.java b/java_indexer/src/io/coati/JavaAstVisitor.java index ec3eeff0..36e82ec1 100644 --- a/java_indexer/src/io/coati/JavaAstVisitor.java +++ b/java_indexer/src/io/coati/JavaAstVisitor.java @@ -78,10 +78,11 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter JavaIndexer.recordSymbolWithLocationAndScope( m_callbackId, JavaparserDeclNameResolver.getQualifiedName(name).toSerializedNameHierarchy(), - SymbolType.PACKAGE, + SymbolKind.PACKAGE, name.getRange(), n.getRange(), - AccessKind.NONE, false + AccessKind.NONE, + DefinitionKind.EXPLICIT ); while (name.getQualifier().isPresent()) @@ -90,8 +91,9 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter JavaIndexer.recordSymbol( m_callbackId, JavaparserDeclNameResolver.getQualifiedName(name).toSerializedNameHierarchy(), - SymbolType.PACKAGE, AccessKind.NONE, - false + SymbolKind.PACKAGE, + AccessKind.NONE, + DefinitionKind.EXPLICIT ); } @@ -105,10 +107,11 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_typeSolver).toSerializedNameHierarchy(); JavaIndexer.recordSymbolWithLocationAndScope( - m_callbackId, qualifiedName, (n.isInterface() ? SymbolType.INTERFACE : SymbolType.CLASS), + m_callbackId, qualifiedName, (n.isInterface() ? SymbolKind.INTERFACE : SymbolKind.CLASS), name.getRange(), n.getRange(), - AccessKind.fromAccessSpecifier(Modifier.getAccessSpecifier(n.getModifiers())), false + AccessKind.fromAccessSpecifier(Modifier.getAccessSpecifier(n.getModifiers())), + DefinitionKind.EXPLICIT ); if (n.getRange().isPresent()) @@ -152,9 +155,10 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter } JavaIndexer.recordSymbolWithLocation( - m_callbackId, qualifiedName, SymbolType.TYPE_PARAMETER, + m_callbackId, qualifiedName, SymbolKind.TYPE_PARAMETER, range, - AccessKind.TYPE_PARAMETER, false + AccessKind.TYPE_PARAMETER, + DefinitionKind.EXPLICIT ); List parentContext = m_context; @@ -171,10 +175,11 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_typeSolver).toSerializedNameHierarchy(); JavaIndexer.recordSymbolWithLocationAndScope( - m_callbackId, qualifiedName, SymbolType.ENUM, + m_callbackId, qualifiedName, SymbolKind.ENUM, name.getRange(), n.getRange(), - AccessKind.fromAccessSpecifier(Modifier.getAccessSpecifier(n.getModifiers())), false + AccessKind.fromAccessSpecifier(Modifier.getAccessSpecifier(n.getModifiers())), + DefinitionKind.EXPLICIT ); if (n.getRange().isPresent()) @@ -195,9 +200,10 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_typeSolver).toSerializedNameHierarchy(); JavaIndexer.recordSymbolWithLocation( - m_callbackId, qualifiedName, SymbolType.ENUM_CONSTANT, + m_callbackId, qualifiedName, SymbolKind.ENUM_CONSTANT, n.getRange(), - AccessKind.NONE, false + AccessKind.NONE, + DefinitionKind.EXPLICIT ); List parentContext = m_context; @@ -214,10 +220,11 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_typeSolver).toSerializedNameHierarchy(); JavaIndexer.recordSymbolWithLocationAndScope( - m_callbackId, qualifiedName, SymbolType.METHOD, + m_callbackId, qualifiedName, SymbolKind.METHOD, name.getRange(), n.getRange(), - AccessKind.fromAccessSpecifier(Modifier.getAccessSpecifier(n.getModifiers())), false + AccessKind.fromAccessSpecifier(Modifier.getAccessSpecifier(n.getModifiers())), + DefinitionKind.EXPLICIT ); List parentContext = m_context; @@ -234,10 +241,11 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_typeSolver).toSerializedNameHierarchy(); JavaIndexer.recordSymbolWithLocationAndScope( - m_callbackId, qualifiedName, SymbolType.METHOD, + m_callbackId, qualifiedName, SymbolKind.METHOD, name.getRange(), n.getRange(), - AccessKind.fromAccessSpecifier(Modifier.getAccessSpecifier(n.getModifiers())), false + AccessKind.fromAccessSpecifier(Modifier.getAccessSpecifier(n.getModifiers())), + DefinitionKind.EXPLICIT ); @@ -329,9 +337,10 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter SimpleName name = declarator.getName(); JavaIndexer.recordSymbolWithLocation( - m_callbackId, qualifiedName, SymbolType.FIELD, + m_callbackId, qualifiedName, SymbolKind.FIELD, name.getRange(), - AccessKind.fromAccessSpecifier(Modifier.getAccessSpecifier(n.getModifiers())), false + AccessKind.fromAccessSpecifier(Modifier.getAccessSpecifier(n.getModifiers())), + DefinitionKind.EXPLICIT ); m_context.add(new DeclContext(qualifiedName)); @@ -562,8 +571,9 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter String referencedName = JavaparserTypeNameResolver.getQualifiedTypeName(n, m_typeSolver).toSerializedNameHierarchy(); JavaIndexer.recordSymbol( - m_callbackId, referencedName, SymbolType.BUILTIN_TYPE, - AccessKind.NONE, true + m_callbackId, referencedName, SymbolKind.BUILTIN_TYPE, + AccessKind.NONE, + DefinitionKind.EXPLICIT ); for (DeclContext context: m_context) @@ -589,8 +599,9 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter String referencedName = JavaparserTypeNameResolver.getQualifiedTypeName(n, m_typeSolver).toSerializedNameHierarchy(); JavaIndexer.recordSymbol( - m_callbackId, referencedName, SymbolType.BUILTIN_TYPE, - AccessKind.NONE, true + m_callbackId, referencedName, SymbolKind.BUILTIN_TYPE, + AccessKind.NONE, + DefinitionKind.EXPLICIT ); for (DeclContext context: m_context) @@ -805,9 +816,10 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter JavaIndexer.logError(m_callbackId, e + " at " + m_filePath + "<"+ beginLine + ", " + beginColumn + ">"); JavaIndexer.recordSymbolWithLocation( - m_callbackId, "unsolved-symbol\ts\tp", SymbolType.TYPE_MAX, + m_callbackId, "unsolved-symbol\ts\tp", SymbolKind.TYPE_MAX, n.getRange(), - AccessKind.DEFAULT, false + AccessKind.DEFAULT, + DefinitionKind.EXPLICIT ); } diff --git a/java_indexer/src/io/coati/JavaIndexer.java b/java_indexer/src/io/coati/JavaIndexer.java index 1096d677..6671425f 100644 --- a/java_indexer/src/io/coati/JavaIndexer.java +++ b/java_indexer/src/io/coati/JavaIndexer.java @@ -126,69 +126,69 @@ public class JavaIndexer // helpers static public void recordSymbol( - int address, String symbolName, SymbolType symbolType, - AccessKind access, boolean isImplicit + int address, String symbolName, SymbolKind symbolType, + AccessKind access, DefinitionKind definitionKind ) { recordSymbol( address, symbolName, symbolType.getValue(), - access.getValue(), (isImplicit ? 1 : 0) + access.getValue(), definitionKind.getValue() ); } static public void recordSymbolWithLocation( - int address, String symbolName, SymbolType symbolType, + int address, String symbolName, SymbolKind symbolType, Optional range, - AccessKind access, boolean isImplicit + AccessKind access, DefinitionKind definitionKind ) { recordSymbolWithLocation( address, symbolName, symbolType, range.orElse(Range.range(0, 0, 0, 0)), - access, isImplicit + access, definitionKind ); } static public void recordSymbolWithLocation( - int address, String symbolName, SymbolType symbolType, + int address, String symbolName, SymbolKind symbolType, Range range, - AccessKind access, boolean isImplicit + AccessKind access, DefinitionKind definitionKind ) { recordSymbolWithLocation( address, symbolName, symbolType.getValue(), range.begin.line, range.begin.column, range.end.line, range.end.column, - access.getValue(), (isImplicit ? 1 : 0) + access.getValue(), definitionKind.getValue() ); } static public void recordSymbolWithLocationAndScope( - int address, String symbolName, SymbolType symbolType, + int address, String symbolName, SymbolKind symbolType, Optional range, Optional scopeRange, - AccessKind access, boolean isImplicit + AccessKind access, DefinitionKind definitionKind ) { recordSymbolWithLocationAndScope( address, symbolName, symbolType, range.orElse(Range.range(0, 0, 0, 0)), scopeRange.orElse(Range.range(0, 0, 0, 0)), - access, isImplicit + access, definitionKind ); } static public void recordSymbolWithLocationAndScope( - int address, String symbolName, SymbolType symbolType, + int address, String symbolName, SymbolKind symbolType, Range range, Range scopeRange, - AccessKind access, boolean isImplicit + AccessKind access, DefinitionKind definitionKind ) { recordSymbolWithLocationAndScope( address, symbolName, symbolType.getValue(), range.begin.line, range.begin.column, range.end.line, range.end.column, scopeRange.begin.line, scopeRange.begin.column, scopeRange.end.line, scopeRange.end.column, - access.getValue(), (isImplicit ? 1 : 0) + access.getValue(), definitionKind.getValue() ); } @@ -284,20 +284,20 @@ public class JavaIndexer static private native void recordSymbol( int address, String symbolName, int symbolType, - int access, int isImplicit + int access, int definitionKind ); static private native void recordSymbolWithLocation( int address, String symbolName, int symbolType, int beginLine, int beginColumn, int endLine, int endColumn, - int access, int isImplicit + int access, int definitionKind ); static private native void recordSymbolWithLocationAndScope( int address, String symbolName, int symbolType, int beginLine, int beginColumn, int endLine, int endColumn, int scopeBeginLine, int scopeBeginColumn, int scopeEndLine, int scopeEndColumn, - int access, int isImplicit + int access, int definitionKind ); static private native void recordReference( diff --git a/java_indexer/src/io/coati/ReferenceKind.java b/java_indexer/src/io/coati/ReferenceKind.java index f0272eaa..dd455674 100644 --- a/java_indexer/src/io/coati/ReferenceKind.java +++ b/java_indexer/src/io/coati/ReferenceKind.java @@ -1,7 +1,7 @@ package io.coati; public enum ReferenceKind -{ +{ // these values need to be the same as ReferenceKind in C++ code UNDEFINED(0), TYPE_USAGE(1), USAGE(2), diff --git a/java_indexer/src/io/coati/SymbolType.java b/java_indexer/src/io/coati/SymbolKind.java similarity index 79% rename from java_indexer/src/io/coati/SymbolType.java rename to java_indexer/src/io/coati/SymbolKind.java index 8bd7eb7f..c26c6442 100644 --- a/java_indexer/src/io/coati/SymbolType.java +++ b/java_indexer/src/io/coati/SymbolKind.java @@ -1,7 +1,7 @@ package io.coati; -public enum SymbolType -{ // these values need to be the same as SymbolType in C++ code +public enum SymbolKind +{ // these values need to be the same as SymbolKind in C++ code BUILTIN_TYPE(1), CLASS(2), ENUM(3), @@ -25,7 +25,7 @@ public enum SymbolType private final int m_value; - private SymbolType(int value) + private SymbolKind(int value) { this.m_value = value; } diff --git a/src/lib/data/DefinitionKind.cpp b/src/lib/data/DefinitionKind.cpp new file mode 100644 index 00000000..4189b7c1 --- /dev/null +++ b/src/lib/data/DefinitionKind.cpp @@ -0,0 +1,20 @@ +#include "data/DefinitionKind.h" + +int definitionKindToInt(DefinitionKind definitionKind) +{ + return definitionKind; +} + +DefinitionKind intToDefinitionKind(int definitionKind) +{ + switch (definitionKind) + { + case 0: + return DEFINITION_NONE; + case 1: + return DEFINITION_IMPLICIT; + case 2: + return DEFINITION_EXPLICIT; + } + return DEFINITION_NONE; +} diff --git a/src/lib/data/DefinitionKind.h b/src/lib/data/DefinitionKind.h new file mode 100644 index 00000000..8dcee3ee --- /dev/null +++ b/src/lib/data/DefinitionKind.h @@ -0,0 +1,14 @@ +#ifndef DEFINITION_KIND_H +#define DEFINITION_KIND_H + +enum DefinitionKind +{ // these values need to be the same as DefinitionKind in Java code + DEFINITION_NONE = 0, + DEFINITION_IMPLICIT = 1, + DEFINITION_EXPLICIT = 2 +}; + +int definitionKindToInt(DefinitionKind definitionKind); +DefinitionKind intToDefinitionKind(int definitionKind); + +#endif // DEFINITION_TYPE_H diff --git a/src/lib/data/DefinitionType.cpp b/src/lib/data/DefinitionType.cpp deleted file mode 100644 index 34ef88f7..00000000 --- a/src/lib/data/DefinitionType.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "data/DefinitionType.h" - -int definitionTypeToInt(DefinitionType definitionType) -{ - return definitionType; -} - -DefinitionType intToDefinitionType(int definitionType) -{ - switch (definitionType) - { - case 0: - return DEFINITION_NONE; - case 1: - return DEFINITION_IMPLICIT; - case 2: - return DEFINITION_EXPLICIT; - } - return DEFINITION_NONE; -} diff --git a/src/lib/data/DefinitionType.h b/src/lib/data/DefinitionType.h deleted file mode 100644 index 49284e86..00000000 --- a/src/lib/data/DefinitionType.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef DEFINITION_TYPE_H -#define DEFINITION_TYPE_H - -enum DefinitionType -{ - DEFINITION_NONE = 0, - DEFINITION_IMPLICIT = 1, - DEFINITION_EXPLICIT = 2 -}; - -int definitionTypeToInt(DefinitionType definitionType); -DefinitionType intToDefinitionType(int definitionType); - -#endif // DEFINITION_TYPE_H diff --git a/src/lib/data/IntermediateStorage.cpp b/src/lib/data/IntermediateStorage.cpp index 19b2c32a..b57e6738 100644 --- a/src/lib/data/IntermediateStorage.cpp +++ b/src/lib/data/IntermediateStorage.cpp @@ -65,9 +65,9 @@ void IntermediateStorage::addFile(const Id id, const std::string& filePath, cons m_files.push_back(StorageFile(id, filePath, modificationTime)); } -void IntermediateStorage::addSymbol(const Id id, int definitionType) +void IntermediateStorage::addSymbol(const Id id, int definitionKind) { - m_symbols.push_back(StorageSymbol(id, definitionType)); + m_symbols.push_back(StorageSymbol(id, definitionKind)); } Id IntermediateStorage::addEdge(int type, Id sourceId, Id targetId) diff --git a/src/lib/data/IntermediateStorage.h b/src/lib/data/IntermediateStorage.h index e634b581..8f3db55d 100644 --- a/src/lib/data/IntermediateStorage.h +++ b/src/lib/data/IntermediateStorage.h @@ -19,7 +19,7 @@ public: virtual Id addNode(int type, const std::string& serializedName); virtual void addFile(const Id id, const std::string& filePath, const std::string& modificationTime); - virtual void addSymbol(const Id id, int definitionType); + virtual void addSymbol(const Id id, int definitionKind); virtual Id addEdge(int type, Id sourceId, Id targetId); virtual Id addLocalSymbol(const std::string& name); virtual Id addSourceLocation(Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol, int type); diff --git a/src/lib/data/PersistentStorage.cpp b/src/lib/data/PersistentStorage.cpp index cb7f1328..b4d1d608 100644 --- a/src/lib/data/PersistentStorage.cpp +++ b/src/lib/data/PersistentStorage.cpp @@ -65,11 +65,11 @@ void PersistentStorage::addFile(const Id id, const std::string& filePath, const } } -void PersistentStorage::addSymbol(const Id id, int definitionType) +void PersistentStorage::addSymbol(const Id id, int definitionKind) { if (m_sqliteStorage.getFirstById(id).id == 0) { - m_sqliteStorage.addSymbol(id, definitionType); + m_sqliteStorage.addSymbol(id, definitionKind); } } @@ -607,8 +607,8 @@ std::set PersistentStorage::getAutocompletionSymbolMatches(const st match.typeName = Node::getTypeString(match.nodeType); match.searchType = SearchMatch::SEARCH_TOKEN; - if (storageSymbolMap.find(firstNode->id) == storageSymbolMap.end() - && match.nodeType != Node::NODE_UNDEFINED) + if (storageSymbolMap.find(firstNode->id) == storageSymbolMap.end() && + match.nodeType != Node::NODE_UNDEFINED) { match.typeName = "undefined " + match.typeName; } @@ -722,7 +722,7 @@ std::shared_ptr PersistentStorage::getGraphForAll() const std::unordered_set explicitlyDefinedSymbolIds; for (StorageSymbol symbol: m_sqliteStorage.getAll()) { - if (intToDefinitionType(symbol.definitionType) == DEFINITION_EXPLICIT) + if (intToDefinitionKind(symbol.definitionKind) == DEFINITION_EXPLICIT) { explicitlyDefinedSymbolIds.insert(symbol.id); } @@ -822,7 +822,7 @@ std::shared_ptr PersistentStorage::getGraphForActiveTokenIds(const std::v { for (const StorageSymbol& symbol : m_sqliteStorage.getAllByIds(ids)) { - if (symbol.id > 0 && (!isNamespace || intToDefinitionType(symbol.definitionType) != DEFINITION_IMPLICIT)) + if (symbol.id > 0 && (!isNamespace || intToDefinitionKind(symbol.definitionKind) != DEFINITION_IMPLICIT)) { nodeIds.push_back(symbol.id); } @@ -912,7 +912,7 @@ std::vector PersistentStorage::getNodeIdsForLocationIds(const std::vector(elementId); if (symbol.id != 0) // here we test if location is a symbol { - if (intToDefinitionType(symbol.definitionType) == DEFINITION_IMPLICIT) + if (intToDefinitionKind(symbol.definitionKind) == DEFINITION_IMPLICIT) { implicitNodeIds.insert(elementId); } @@ -1472,25 +1472,25 @@ void PersistentStorage::addNodesToGraph(const std::vector& nodeIds, Graph* g { const NameHierarchy nameHierarchy = NameHierarchy::deserialize(storageNode.serializedName); - DefinitionType defType = DEFINITION_NONE; + DefinitionKind defKind = DEFINITION_NONE; auto it = symbolMap.find(storageNode.id); if (it != symbolMap.end()) { - defType = intToDefinitionType(it->second.definitionType); + defKind = intToDefinitionKind(it->second.definitionKind); } Node* node = graph->createNode( storageNode.id, type, nameHierarchy, - defType != DEFINITION_NONE + defKind != DEFINITION_NONE ); - if (defType == DEFINITION_IMPLICIT) + if (defKind == DEFINITION_IMPLICIT) { node->setImplicit(true); } - else if (defType == DEFINITION_EXPLICIT) + else if (defKind == DEFINITION_EXPLICIT) { node->setExplicit(true); } @@ -1733,7 +1733,7 @@ void PersistentStorage::buildSearchIndex() else { auto it = symbolMap.find(node.id); - if (it == symbolMap.end() || intToDefinitionType(it->second.definitionType) != DEFINITION_IMPLICIT) + if (it == symbolMap.end() || intToDefinitionKind(it->second.definitionKind) != DEFINITION_IMPLICIT) { // we don't use the signature here, so elements with the same signature share the same node. m_symbolIndex.addNode(node.id, NameHierarchy::deserialize(node.serializedName).getQualifiedName()); diff --git a/src/lib/data/PersistentStorage.h b/src/lib/data/PersistentStorage.h index 7befaaa2..43db7157 100644 --- a/src/lib/data/PersistentStorage.h +++ b/src/lib/data/PersistentStorage.h @@ -29,7 +29,7 @@ public: virtual Id addNode(int type, const std::string& serializedName); virtual void addFile(const Id id, const std::string& filePath, const std::string& modificationTime); - virtual void addSymbol(const Id id, int definitionType); + virtual void addSymbol(const Id id, int definitionKind); virtual Id addEdge(int type, Id sourceId, Id targetId); virtual Id addLocalSymbol(const std::string& name); virtual Id addSourceLocation(Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol, int type); diff --git a/src/lib/data/SqliteStorage.cpp b/src/lib/data/SqliteStorage.cpp index 926dfec0..c58d241c 100644 --- a/src/lib/data/SqliteStorage.cpp +++ b/src/lib/data/SqliteStorage.cpp @@ -4,13 +4,12 @@ #include "data/graph/Node.h" #include "data/location/TokenLocation.h" -#include "data/DefinitionType.h" #include "data/parser/ParseLocation.h" #include "utility/logging/logging.h" #include "utility/text/TextAccess.h" #include "utility/Version.h" -const size_t SqliteStorage::STORAGE_VERSION = 7; +const size_t SqliteStorage::STORAGE_VERSION = 8; SqliteStorage::SqliteStorage(const FilePath& dbFilePath) : m_dbFilePath(dbFilePath) @@ -198,11 +197,11 @@ Id SqliteStorage::addNode(const int type, const std::string& serializedName) return id; } -void SqliteStorage::addSymbol(const int id, const int definitionType) +void SqliteStorage::addSymbol(const int id, const int definitionKind) { executeStatement( - "INSERT INTO symbol(id, definition_type) VALUES(" - + std::to_string(id) + ", " + std::to_string(definitionType) + ");" + "INSERT INTO symbol(id, definition_kind) VALUES(" + + std::to_string(id) + ", " + std::to_string(definitionKind) + ");" ); } @@ -587,13 +586,6 @@ void SqliteStorage::setNodeType(int type, Id nodeId) ); } -void SqliteStorage::setSymbolDefinitionType(int definitionType, Id symbolId) -{ - executeStatement( - "UPDATE symbol SET definition_type = " + std::to_string(definitionType) + " WHERE id == " + std::to_string(symbolId) + ";" - ); -} - StorageSourceLocation SqliteStorage::getSourceLocationByAll(const Id fileNodeId, const uint startLine, const uint startCol, const uint endLine, const uint endCol, const int type) const { return doGetFirst( @@ -769,7 +761,7 @@ void SqliteStorage::setupTables() m_database.execDML( "CREATE TABLE IF NOT EXISTS symbol(" "id INTEGER NOT NULL, " - "definition_type INTEGER NOT NULL, " + "definition_kind INTEGER NOT NULL, " "PRIMARY KEY(id), " "FOREIGN KEY(id) REFERENCES node(id) ON DELETE CASCADE);" ); @@ -1057,18 +1049,18 @@ template <> std::vector SqliteStorage::doGetAll(const std::string& query) const { CppSQLite3Query q = executeQuery( - "SELECT id, definition_type FROM symbol " + query + ";" + "SELECT id, definition_kind FROM symbol " + query + ";" ); std::vector symbols; while (!q.eof()) { const Id id = q.getIntField(0, 0); - const int definitionType = q.getIntField(1, 0); + const int definitionKind = q.getIntField(1, 0); if (id != 0) { - symbols.push_back(StorageSymbol(id, definitionType)); + symbols.push_back(StorageSymbol(id, definitionKind)); } q.nextRow(); diff --git a/src/lib/data/SqliteStorage.h b/src/lib/data/SqliteStorage.h index 48182bc2..d7519410 100644 --- a/src/lib/data/SqliteStorage.h +++ b/src/lib/data/SqliteStorage.h @@ -58,7 +58,7 @@ public: Id addEdge(int type, Id sourceNodeId, Id targetNodeId); Id addNode(const int type, const std::string& serializedName); - void addSymbol(const int id, int definitionType); + void addSymbol(const int id, int definitionKind); void addFile(const int id, const std::string& filePath, const std::string& modificationTime); Id addLocalSymbol(const std::string& name); Id addSourceLocation(Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol, int type); @@ -102,7 +102,6 @@ public: std::shared_ptr getFileContentById(Id fileId) const; void setNodeType(int type, Id nodeId); - void setSymbolDefinitionType(int definitionType, Id symbolId); StorageSourceLocation getSourceLocationByAll(const Id fileNodeId, const uint startLine, const uint startCol, const uint endLine, const uint endCol, const int type) const; std::shared_ptr getTokenLocationsForFile(const FilePath& filePath) const; diff --git a/src/lib/data/Storage.cpp b/src/lib/data/Storage.cpp index c513c78c..8583399c 100644 --- a/src/lib/data/Storage.cpp +++ b/src/lib/data/Storage.cpp @@ -61,7 +61,7 @@ void Storage::inject(Storage* injected) } const Id ownId = it->second; - addSymbol(ownId, injectedData.definitionType); + addSymbol(ownId, injectedData.definitionKind); } ); diff --git a/src/lib/data/Storage.h b/src/lib/data/Storage.h index 5fdf13a2..517ecad6 100644 --- a/src/lib/data/Storage.h +++ b/src/lib/data/Storage.h @@ -17,7 +17,7 @@ public: virtual Id addNode(int type, const std::string& serializedName) = 0; virtual void addFile(const Id id, const std::string& filePath, const std::string& modificationTime) = 0; - virtual void addSymbol(const Id id, int definitionType) = 0; + virtual void addSymbol(const Id id, int definitionKind) = 0; virtual Id addEdge(int type, Id sourceId, Id targetId) = 0; virtual Id addLocalSymbol(const std::string& name) = 0; virtual Id addSourceLocation(Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol, int type) = 0; diff --git a/src/lib/data/StorageTypes.h b/src/lib/data/StorageTypes.h index ed007599..bd68d6ee 100644 --- a/src/lib/data/StorageTypes.h +++ b/src/lib/data/StorageTypes.h @@ -6,7 +6,7 @@ #include "utility/file/FilePath.h" #include "utility/types.h" -#include "data/DefinitionType.h" +#include "data/DefinitionKind.h" struct StorageEdge { @@ -53,16 +53,16 @@ struct StorageSymbol { StorageSymbol() : id(0) - , definitionType(definitionTypeToInt(DEFINITION_NONE)) + , definitionKind(definitionKindToInt(DEFINITION_NONE)) {} - StorageSymbol(Id id, int definitionType) + StorageSymbol(Id id, int definitionKind) : id(id) - , definitionType(definitionType) + , definitionKind(definitionKind) {} Id id; - int definitionType; + int definitionKind; }; struct StorageFile diff --git a/src/lib/data/parser/AccessKind.h b/src/lib/data/parser/AccessKind.h index e29be3d9..1689b9cd 100644 --- a/src/lib/data/parser/AccessKind.h +++ b/src/lib/data/parser/AccessKind.h @@ -2,7 +2,7 @@ #define ACCESS_KIND_H enum AccessKind -{ // these values need to be the same as AccessType in Java code +{ // these values need to be the same as AccessKind in Java code ACCESS_NONE = 0, ACCESS_PUBLIC = 1, ACCESS_PROTECTED = 2, diff --git a/src/lib/data/parser/ParserClient.h b/src/lib/data/parser/ParserClient.h index fb884a98..a9f28b3a 100644 --- a/src/lib/data/parser/ParserClient.h +++ b/src/lib/data/parser/ParserClient.h @@ -8,7 +8,7 @@ #include "data/parser/AccessKind.h" #include "data/parser/ReferenceKind.h" #include "data/parser/SymbolKind.h" -#include "data/DefinitionType.h" +#include "data/DefinitionKind.h" #include "utility/file/FileInfo.h" #include "utility/types.h" @@ -33,17 +33,17 @@ public: virtual Id recordSymbol( const NameHierarchy& symbolName, SymbolKind symbolType, - AccessKind access, DefinitionType definitionType) = 0; + AccessKind access, DefinitionKind definitionKind) = 0; virtual Id recordSymbol( const NameHierarchy& symbolName, SymbolKind symbolType, const ParseLocation& location, - AccessKind access, DefinitionType definitionType) = 0; + AccessKind access, DefinitionKind definitionKind) = 0; virtual Id recordSymbol( const NameHierarchy& symbolName, SymbolKind symbolType, const ParseLocation& location, const ParseLocation& scopeLocation, - AccessKind access, DefinitionType definitionType) = 0; + AccessKind access, DefinitionKind definitionKind) = 0; virtual void recordReference( ReferenceKind referenceKind, const NameHierarchy& referencedName, const NameHierarchy& contextName, diff --git a/src/lib/data/parser/ParserClientImpl.cpp b/src/lib/data/parser/ParserClientImpl.cpp index 720b5597..78626359 100644 --- a/src/lib/data/parser/ParserClientImpl.cpp +++ b/src/lib/data/parser/ParserClientImpl.cpp @@ -35,11 +35,11 @@ void ParserClientImpl::finishParsingFile() Id ParserClientImpl::recordSymbol( const NameHierarchy& symbolName, SymbolKind symbolType, - AccessKind access, DefinitionType definitionType + AccessKind access, DefinitionKind definitionKind ) { Id nodeId = addNodeHierarchy(symbolName, symbolKindToNodeType(symbolType)); - addSymbol(nodeId, definitionType); + addSymbol(nodeId, definitionKind); addAccess(nodeId, access); return nodeId; } @@ -47,10 +47,10 @@ Id ParserClientImpl::recordSymbol( Id ParserClientImpl::recordSymbol( const NameHierarchy& symbolName, SymbolKind symbolType, const ParseLocation& location, - AccessKind access, DefinitionType definitionType + AccessKind access, DefinitionKind definitionKind ) { - Id nodeId = recordSymbol(symbolName, symbolType, access, definitionType); + Id nodeId = recordSymbol(symbolName, symbolType, access, definitionKind); addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN)); return nodeId; } @@ -58,10 +58,10 @@ Id ParserClientImpl::recordSymbol( Id ParserClientImpl::recordSymbol( const NameHierarchy& symbolName, SymbolKind symbolType, const ParseLocation& location, const ParseLocation& scopeLocation, - AccessKind access, DefinitionType definitionType + AccessKind access, DefinitionKind definitionKind ) { - Id nodeId = recordSymbol(symbolName, symbolType, location, access, definitionType); + Id nodeId = recordSymbol(symbolName, symbolType, location, access, definitionKind); addSourceLocation(nodeId, scopeLocation, locationTypeToInt(LOCATION_SCOPE)); return nodeId; } @@ -236,17 +236,20 @@ void ParserClientImpl::addFile(Id id, const FilePath& filePath, const std::strin return; } - return m_storage->addFile(id, filePath.str(), modificationTime); + m_storage->addFile(id, filePath.str(), modificationTime); } -void ParserClientImpl::addSymbol(Id id, DefinitionType definitionType) +void ParserClientImpl::addSymbol(Id id, DefinitionKind definitionKind) { if (!m_storage) { return; } - return m_storage->addSymbol(id, definitionTypeToInt(definitionType)); + if (definitionKind != DEFINITION_NONE) + { + m_storage->addSymbol(id, definitionKindToInt(definitionKind)); + } } Id ParserClientImpl::addEdge(int type, Id sourceId, Id targetId) diff --git a/src/lib/data/parser/ParserClientImpl.h b/src/lib/data/parser/ParserClientImpl.h index 0bf2c54b..e3d4ba7d 100644 --- a/src/lib/data/parser/ParserClientImpl.h +++ b/src/lib/data/parser/ParserClientImpl.h @@ -8,7 +8,7 @@ #include "data/IntermediateStorage.h" #include "data/graph/token_component/TokenComponentAccess.h" -#include "data/DefinitionType.h" +#include "data/DefinitionKind.h" class ParserClientImpl: public ParserClient { @@ -24,17 +24,17 @@ public: virtual Id recordSymbol( const NameHierarchy& symbolName, SymbolKind symbolType, - AccessKind access, DefinitionType definitionType); + AccessKind access, DefinitionKind definitionKind); virtual Id recordSymbol( const NameHierarchy& symbolName, SymbolKind symbolType, const ParseLocation& location, - AccessKind access, DefinitionType definitionType); + AccessKind access, DefinitionKind definitionKind); virtual Id recordSymbol( const NameHierarchy& symbolName, SymbolKind symbolType, const ParseLocation& location, const ParseLocation& scopeLocation, - AccessKind access, DefinitionType definitionType); + AccessKind access, DefinitionKind definitionKind); virtual void recordReference( ReferenceKind referenceKind, const NameHierarchy& referencedName, const NameHierarchy& contextName, @@ -53,7 +53,7 @@ private: Id addNode(Node::NodeType nodeType, NameHierarchy nameHierarchy); void addFile(Id id, const FilePath& filePath, const std::string& modificationTime); - void addSymbol(Id id, DefinitionType definitionType); + void addSymbol(Id id, DefinitionKind definitionKind); Id addEdge(int type, Id sourceId, Id targetId); Id addLocalSymbol(const std::string& name); void addSourceLocation(Id elementId, const ParseLocation& location, int type); diff --git a/src/lib/data/parser/SymbolKind.h b/src/lib/data/parser/SymbolKind.h index d475e2eb..0c105073 100644 --- a/src/lib/data/parser/SymbolKind.h +++ b/src/lib/data/parser/SymbolKind.h @@ -2,7 +2,7 @@ #define SYMBOL_KIND_H enum SymbolKind -{ // these values need to be the same as SymbolType in Java code +{ // these values need to be the same as SymbolKind in Java code SYMBOL_BUILTIN_TYPE = 1, SYMBOL_CLASS = 2, SYMBOL_ENUM = 3, diff --git a/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp b/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp index 3c095630..a22861d5 100644 --- a/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp +++ b/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp @@ -67,10 +67,10 @@ void CxxAstVisitorComponentIndexer::visitTagDecl(clang::TagDecl* d) { if (shouldVisitDecl(d)) { - DefinitionType definitionType = DEFINITION_NONE; + DefinitionKind definitionKind = DEFINITION_NONE; if (d->isThisDeclarationADefinition()) { - definitionType = utility::isImplicit(d) ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT; + definitionKind = utility::isImplicit(d) ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT; } m_client->recordSymbol( @@ -79,7 +79,7 @@ void CxxAstVisitorComponentIndexer::visitTagDecl(clang::TagDecl* d) getParseLocation(d->getLocation()), getParseLocationOfTagDeclBody(d), utility::convertAccessSpecifier(d->getAccess()), - definitionType + definitionKind ); } } @@ -377,6 +377,11 @@ void CxxAstVisitorComponentIndexer::visitTypeLoc(clang::TypeLoc tl) if ((shouldVisitReference(tl.getBeginLoc(), getAstVisitor()->getComponent()->getTopmostContextDecl())) && (!getAstVisitor()->checkIgnoresTypeLoc(tl))) { + if (const clang::BuiltinType* builtinType = clang::dyn_cast_or_null(tl.getTypePtr())) + { + m_client->recordSymbol(getAstVisitor()->getTypeNameCache()->getValue(tl.getTypePtr()), SYMBOL_BUILTIN_TYPE, ACCESS_NONE, DEFINITION_EXPLICIT); + } + clang::SourceLocation loc; if (!tl.getAs().isNull()) { diff --git a/src/lib_java/JavaProject.cpp b/src/lib_java/JavaProject.cpp index 8358a475..6d24a10a 100644 --- a/src/lib_java/JavaProject.cpp +++ b/src/lib_java/JavaProject.cpp @@ -139,8 +139,10 @@ void JavaProject::fetchRootDirectories() m_projectSettings->getAbsoluteExcludePaths(), m_projectSettings->getSourceExtensions() ); + FileManager::FileSets fileSets = fileManager.fetchFilePaths(std::vector()); std::shared_ptr javaEnvironment = JavaEnvironmentFactory::getInstance()->createEnvironment(); + for (FilePath filePath: fileSets.addedFiles) { std::shared_ptr textAccess = TextAccess::createFromFile(filePath.str()); diff --git a/src/lib_java/data/parser/java/JavaParser.cpp b/src/lib_java/data/parser/java/JavaParser.cpp index f8b5761c..63fab988 100644 --- a/src/lib_java/data/parser/java/JavaParser.cpp +++ b/src/lib_java/data/parser/java/JavaParser.cpp @@ -133,35 +133,35 @@ void JavaParser::doLogError(jstring jError) void JavaParser::doRecordSymbol( jstring jSymbolName, jint jSymbolType, - jint jAccess, jint jIsImplicit + jint jAccess, jint jDefinitionKind ) { AccessKind access = intToAccessKind(jAccess); - bool isImplicit = jIsImplicit; + DefinitionKind definitionKind = intToDefinitionKind(jDefinitionKind); m_client->recordSymbol( NameHierarchy::deserialize(m_javaEnvironment->toStdString(jSymbolName)), intToSymbolKind(jSymbolType), access, - isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT + definitionKind ); } void JavaParser::doRecordSymbolWithLocation( jstring jSymbolName, jint jSymbolType, jint beginLine, jint beginColumn, jint endLine, jint endColumn, - jint jAccess, jint jIsImplicit + jint jAccess, jint jDefinitionKind ) { AccessKind access = intToAccessKind(jAccess); - bool isImplicit = jIsImplicit; + DefinitionKind definitionKind = intToDefinitionKind(jDefinitionKind); m_client->recordSymbol( NameHierarchy::deserialize(m_javaEnvironment->toStdString(jSymbolName)), intToSymbolKind(jSymbolType), ParseLocation(m_currentFilePath, beginLine, beginColumn, endLine, endColumn), access, - isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT + definitionKind ); } @@ -169,11 +169,11 @@ void JavaParser::doRecordSymbolWithLocationAndScope( jstring jSymbolName, jint jSymbolType, jint beginLine, jint beginColumn, jint endLine, jint endColumn, jint scopeBeginLine, jint scopeBeginColumn, jint scopeEndLine, jint scopeEndColumn, - jint jAccess, jint jIsImplicit + jint jAccess, jint jDefinitionKind ) { AccessKind access = intToAccessKind(jAccess); - bool isImplicit = jIsImplicit; + DefinitionKind definitionKind = intToDefinitionKind(jDefinitionKind); m_client->recordSymbol( NameHierarchy::deserialize(m_javaEnvironment->toStdString(jSymbolName)), @@ -181,7 +181,7 @@ void JavaParser::doRecordSymbolWithLocationAndScope( ParseLocation(m_currentFilePath, beginLine, beginColumn, endLine, endColumn), ParseLocation(m_currentFilePath, scopeBeginLine, scopeBeginColumn, scopeEndLine, scopeEndColumn), access, - isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT + definitionKind ); } diff --git a/src/lib_java/data/parser/java/JavaParser.h b/src/lib_java/data/parser/java/JavaParser.h index 380b7d31..9b50ef09 100644 --- a/src/lib_java/data/parser/java/JavaParser.h +++ b/src/lib_java/data/parser/java/JavaParser.h @@ -147,20 +147,20 @@ private: void doRecordSymbol( jstring jSymbolName, jint jSymbolType, - jint jAccess, jint jIsImplicit + jint jAccess, jint jDefinitionKind ); void doRecordSymbolWithLocation( jstring jSymbolName, jint jSymbolType, jint beginLine, jint beginColumn, jint endLine, jint endColumn, - jint jAccess, jint jIsImplicit + jint jAccess, jint jDefinitionKind ); void doRecordSymbolWithLocationAndScope( jstring jSymbolName, jint jSymbolType, jint beginLine, jint beginColumn, jint endLine, jint endColumn, jint scopeBeginLine, jint scopeBeginColumn, jint scopeEndLine, jint scopeEndColumn, - jint jAccess, jint jIsImplicit + jint jAccess, jint jDefinitionKind ); void doRecordReference(jint jRefType, jstring jReferencedName, jstring jContextName, jint beginLine, jint beginColumn, jint endLine, jint endColumn); diff --git a/src/test/CxxParserTestSuite.h b/src/test/CxxParserTestSuite.h index e04d4450..b43e3193 100644 --- a/src/test/CxxParserTestSuite.h +++ b/src/test/CxxParserTestSuite.h @@ -1252,7 +1252,24 @@ public: )); } +/////////////////////////////////////////////////////////////////////////////// +// test implicit symbols + void test_cxx_parser_finds_builtin_types() + { + std::shared_ptr client = parseCode( + "void t1(int v) {}\n" + "void t2(float v) {}\n" + "void t3(double v) {}\n" + "void t4(bool v) {}\n" + ); + + TS_ASSERT(utility::containsElement(client->builtinTypes, "void")); + TS_ASSERT(utility::containsElement(client->builtinTypes, "int")); + TS_ASSERT(utility::containsElement(client->builtinTypes, "float")); + TS_ASSERT(utility::containsElement(client->builtinTypes, "double")); + TS_ASSERT(utility::containsElement(client->builtinTypes, "bool")); + } /////////////////////////////////////////////////////////////////////////////// // test finding usages of symbols diff --git a/src/test/helper/TestParserClient.h b/src/test/helper/TestParserClient.h index 2d89cb13..65e645d1 100644 --- a/src/test/helper/TestParserClient.h +++ b/src/test/helper/TestParserClient.h @@ -17,7 +17,7 @@ public: virtual Id recordSymbol( const NameHierarchy& symbolName, SymbolKind symbolKind, - AccessKind access, DefinitionType definitionType) + AccessKind access, DefinitionKind definitionKind) { std::vector* bin = getBinForSymbolKind(symbolKind); if (bin != nullptr) @@ -30,7 +30,7 @@ public: virtual Id recordSymbol( const NameHierarchy& symbolName, SymbolKind symbolKind, const ParseLocation& location, - AccessKind access, DefinitionType definitionType) + AccessKind access, DefinitionKind definitionKind) { std::vector* bin = getBinForSymbolKind(symbolKind); if (bin != nullptr) @@ -43,7 +43,7 @@ public: virtual Id recordSymbol( const NameHierarchy& symbolName, SymbolKind symbolKind, const ParseLocation& location, const ParseLocation& scopeLocation, - AccessKind access, DefinitionType definitionType) + AccessKind access, DefinitionKind definitionKind) { std::vector* bin = getBinForSymbolKind(symbolKind); if (bin != nullptr) @@ -134,6 +134,7 @@ public: std::vector packages; std::vector typedefs; + std::vector builtinTypes; std::vector classes; std::vector interfaces; std::vector enums; @@ -174,6 +175,8 @@ private: return &packages; case SYMBOL_TYPEDEF: return &typedefs; + case SYMBOL_BUILTIN_TYPE: + return &builtinTypes; case SYMBOL_CLASS: return &classes; case SYMBOL_INTERFACE: