data: indexing java

* expanded appsettings to include java specific stuff
* added java indexer as separate project that can be build via its build script
* added dependencies for java indexer to the setup folder
* added license files for these dependencies.
* added sample project for java. this is just to test java on other machines and can be removed again in the future.
* the java parser test suite is currently uncommented because java is not running on every machine.
* added some more node types
* removed TokenComponentAccess::AccessType and replaced all its usages by using AccessKind
* moved access components from edges to nodes
* using recordReference of ParserClient for java
* removed recording access specifier of inheritance edges.
* added styles for new node types
This commit is contained in:
malte_langkabel
2016-08-04 09:20:13 +02:00
parent 05c06a6102
commit b072972b50
122 changed files with 7291 additions and 696 deletions
+28 -63
View File
@@ -17,45 +17,39 @@ Edge::EdgeType Edge::intToType(int value)
{
switch (value)
{
case 0x1:
case EDGE_MEMBER:
return EDGE_MEMBER;
case 0x2:
return EDGE_TYPE_OF;
case 0x4:
return EDGE_RETURN_TYPE_OF;
case 0x8:
return EDGE_PARAMETER_TYPE_OF;
case 0x10:
case EDGE_TYPE_USAGE:
return EDGE_TYPE_USAGE;
case 0x20:
case EDGE_USAGE:
return EDGE_USAGE;
case 0x40:
case EDGE_CALL:
return EDGE_CALL;
case 0x80:
case EDGE_INHERITANCE:
return EDGE_INHERITANCE;
case 0x100:
case EDGE_OVERRIDE:
return EDGE_OVERRIDE;
case 0x200:
return EDGE_TYPEDEF_OF;
case 0x400:
return EDGE_TEMPLATE_PARAMETER;
case 0x800:
case EDGE_TEMPLATE_ARGUMENT:
return EDGE_TEMPLATE_ARGUMENT;
case 0x1000:
case EDGE_TYPE_ARGUMENT:
return EDGE_TYPE_ARGUMENT;
case EDGE_TEMPLATE_DEFAULT_ARGUMENT:
return EDGE_TEMPLATE_DEFAULT_ARGUMENT;
case 0x2000:
case EDGE_TEMPLATE_SPECIALIZATION_OF:
return EDGE_TEMPLATE_SPECIALIZATION_OF;
case 0x4000:
case EDGE_TEMPLATE_MEMBER_SPECIALIZATION_OF:
return EDGE_TEMPLATE_MEMBER_SPECIALIZATION_OF;
case 0x8000:
case EDGE_INCLUDE:
return EDGE_INCLUDE;
case 0x10000:
case EDGE_IMPORT:
return EDGE_IMPORT;
case EDGE_AGGREGATION:
return EDGE_AGGREGATION;
case 0x20000:
case EDGE_MACRO_USAGE:
return EDGE_MACRO_USAGE;
}
return EDGE_NONE;
return EDGE_UNDEFINED;
}
Edge::Edge(Id id, EdgeType type, Node* from, Node* to)
@@ -141,53 +135,28 @@ void Edge::addComponentAggregation(std::shared_ptr<TokenComponentAggregation> co
}
}
void Edge::addComponentAccess(std::shared_ptr<TokenComponentAccess> component)
{
if (getComponent<TokenComponentAccess>())
{
// LOG_ERROR("TokenComponentAccess has been set before!");
return;
}
else if (m_type != EDGE_MEMBER && m_type != EDGE_INHERITANCE)
{
LOG_ERROR("TokenComponentAccess can't be set on edge of type: " + getTypeString());
}
else
{
addComponent(component);
}
}
std::string Edge::getTypeString(EdgeType type)
{
switch (type)
{
case EDGE_NONE:
return "none";
case EDGE_UNDEFINED:
return "undefined";
case EDGE_MEMBER:
return "child";
case EDGE_TYPE_OF:
return "type_of";
case EDGE_RETURN_TYPE_OF:
return "return_type";
case EDGE_PARAMETER_TYPE_OF:
return "parameter_type";
case EDGE_TYPE_USAGE:
return "type_use";
case EDGE_USAGE:
return "use";
case EDGE_CALL:
return "call";
case EDGE_INHERITANCE:
return "inheritance";
case EDGE_OVERRIDE:
return "override";
case EDGE_CALL:
return "call";
case EDGE_USAGE:
return "use";
case EDGE_TYPEDEF_OF:
return "typedef";
case EDGE_TEMPLATE_PARAMETER:
return "template_parameter";
case EDGE_TEMPLATE_ARGUMENT:
return "template_argument";
case EDGE_TYPE_ARGUMENT:
return "type_argument";
case EDGE_TEMPLATE_DEFAULT_ARGUMENT:
return "template_default_argument";
case EDGE_TEMPLATE_SPECIALIZATION_OF:
@@ -196,6 +165,8 @@ std::string Edge::getTypeString(EdgeType type)
return "template_member_specialization";
case EDGE_INCLUDE:
return "include";
case EDGE_IMPORT:
return "import";
case EDGE_AGGREGATION:
return "aggregation";
case EDGE_MACRO_USAGE:
@@ -215,12 +186,6 @@ std::string Edge::getAsString() const
std::stringstream str;
str << "[" << getId() << "] " << getTypeString() << ": \"" << m_from->getName() << "\" -> \"" + m_to->getName() << "\"";
TokenComponentAccess* access = getComponent<TokenComponentAccess>();
if (access)
{
str << " " << access->getAccessString();
}
TokenComponentAggregation* aggregation = getComponent<TokenComponentAggregation>();
if (aggregation)
{
+15 -21
View File
@@ -18,27 +18,22 @@ public:
typedef int EdgeTypeMask;
enum EdgeType : EdgeTypeMask
{
EDGE_NONE = 0x0,
EDGE_UNDEFINED = 0x0,
EDGE_MEMBER = 0x1,
EDGE_TYPE_OF = 0x2,
EDGE_RETURN_TYPE_OF = 0x4, // unused: see Storage::addFunctionNode()
EDGE_PARAMETER_TYPE_OF = 0x8, // unused: see Storage::addFunctionNode()
EDGE_TYPE_USAGE = 0x10,
EDGE_USAGE = 0x20,
EDGE_CALL = 0x40,
EDGE_INHERITANCE = 0x80,
EDGE_OVERRIDE = 0x100,
EDGE_TYPEDEF_OF = 0x200,
EDGE_TEMPLATE_PARAMETER = 0x400, // unused since template parameters are children
EDGE_TEMPLATE_ARGUMENT = 0x800,
EDGE_TEMPLATE_DEFAULT_ARGUMENT = 0x1000,
EDGE_TEMPLATE_SPECIALIZATION_OF = 0x2000,
EDGE_TEMPLATE_MEMBER_SPECIALIZATION_OF = 0x4000,
EDGE_INCLUDE = 0x8000,
EDGE_AGGREGATION = 0x10000,
EDGE_MACRO_USAGE = 0x20000,
EDGE_TYPE_USAGE = 0x2,
EDGE_USAGE = 0x4,
EDGE_CALL = 0x8,
EDGE_INHERITANCE = 0x10,
EDGE_OVERRIDE = 0x20,
EDGE_TEMPLATE_ARGUMENT = 0x40,
EDGE_TYPE_ARGUMENT = 0x80,
EDGE_TEMPLATE_DEFAULT_ARGUMENT = 0x100,
EDGE_TEMPLATE_SPECIALIZATION_OF = 0x200,
EDGE_TEMPLATE_MEMBER_SPECIALIZATION_OF = 0x400,
EDGE_INCLUDE = 0x800,
EDGE_IMPORT = 0x1000,
EDGE_AGGREGATION = 0x2000,
EDGE_MACRO_USAGE = 0x4000
};
static int typeToInt(EdgeType type);
@@ -62,7 +57,6 @@ public:
// Component setters
void addComponentAggregation(std::shared_ptr<TokenComponentAggregation> component);
void addComponentAccess(std::shared_ptr<TokenComponentAccess> component);
// Logging.
static std::string getTypeString(EdgeType type);
-19
View File
@@ -164,25 +164,6 @@ void Graph::removeEdge(Edge* edge)
m_edges.erase(it);
}
bool Graph::removeNodeIfUnreferencedRecursive(Node* node)
{
if (!node->hasReferences())
{
Node* parent = node->getParentNode();
removeNode(node);
if (parent)
{
removeNodeIfUnreferencedRecursive(parent);
}
return true;
}
return false;
}
Node* Graph::findNode(std::function<bool(Node*)> func) const
{
std::map<Id, std::shared_ptr<Node>>::const_iterator it = find_if(m_nodes.begin(), m_nodes.end(),
-1
View File
@@ -34,7 +34,6 @@ public:
void removeNode(Node* node);
void removeEdge(Edge* edge);
bool removeNodeIfUnreferencedRecursive(Node* node);
Node* findNode(std::function<bool(Node*)> func) const;
Edge* findEdge(std::function<bool(Edge*)> func) const;
+53 -48
View File
@@ -5,12 +5,13 @@
#include "utility/logging/logging.h"
#include "data/graph/token_component/TokenComponentAbstraction.h"
#include "data/graph/token_component/TokenComponentAccess.h"
#include "data/graph/token_component/TokenComponentConst.h"
#include "data/graph/token_component/TokenComponentStatic.h"
#include "data/graph/token_component/TokenComponentFilePath.h"
#include "data/graph/token_component/TokenComponentSignature.h"
const Node::NodeTypeMask Node::NODE_NOT_VISIBLE = Node::NODE_UNDEFINED | Node::NODE_NAMESPACE;
const Node::NodeTypeMask Node::NODE_NOT_VISIBLE = Node::NODE_UNDEFINED | Node::NODE_NAMESPACE | Node::NODE_PACKAGE;
std::string Node::getTypeString(NodeType type)
{
@@ -18,14 +19,20 @@ std::string Node::getTypeString(NodeType type)
{
case NODE_UNDEFINED:
return "undefined";
case NODE_BUILTIN_TYPE:
return "builtin_type";
case NODE_TYPE:
return "type";
case NODE_NAMESPACE:
return "namespace";
case NODE_CLASS:
return "class";
case NODE_PACKAGE:
return "package";
case NODE_STRUCT:
return "struct";
case NODE_CLASS:
return "class";
case NODE_INTERFACE:
return "interface";
case NODE_GLOBAL_VARIABLE:
return "global_variable";
case NODE_FIELD:
@@ -42,6 +49,8 @@ std::string Node::getTypeString(NodeType type)
return "typedef";
case NODE_TEMPLATE_PARAMETER_TYPE:
return "template_parameter_type";
case NODE_TYPE_PARAMETER:
return "type_parameter";
case NODE_FILE:
return "file";
case NODE_MACRO:
@@ -60,33 +69,41 @@ Node::NodeType Node::intToType(int value)
{
switch (value)
{
case 0x2:
case NODE_TYPE:
return NODE_TYPE;
case 0x4:
case NODE_BUILTIN_TYPE:
return NODE_BUILTIN_TYPE;
case NODE_NAMESPACE:
return NODE_NAMESPACE;
case 0x8:
case NODE_PACKAGE:
return NODE_PACKAGE;
case NODE_STRUCT:
return NODE_STRUCT;
case 0x10:
case NODE_CLASS:
return NODE_CLASS;
case 0x20:
case NODE_INTERFACE:
return NODE_INTERFACE;
case NODE_GLOBAL_VARIABLE:
return NODE_GLOBAL_VARIABLE;
case 0x40:
case NODE_FIELD:
return NODE_FIELD;
case 0x80:
case NODE_FUNCTION:
return NODE_FUNCTION;
case 0x100:
case NODE_METHOD:
return NODE_METHOD;
case 0x200:
case NODE_ENUM:
return NODE_ENUM;
case 0x400:
case NODE_ENUM_CONSTANT:
return NODE_ENUM_CONSTANT;
case 0x800:
case NODE_TYPEDEF:
return NODE_TYPEDEF;
case 0x1000:
case NODE_TEMPLATE_PARAMETER_TYPE:
return NODE_TEMPLATE_PARAMETER_TYPE;
case 0x2000:
case NODE_TYPE_PARAMETER:
return NODE_TYPE_PARAMETER;
case NODE_FILE:
return NODE_FILE;
case 0x4000:
case NODE_MACRO:
return NODE_MACRO;
}
@@ -324,37 +341,6 @@ void Node::forEachNodeRecursive(std::function<void(const Node*)> func) const
);
}
bool Node::hasReferences() const
{
if (getLocationIds().size() > 0)
{
return true;
}
bool hasChildrenWithReferences = false;
size_t childNodeCount = 0;
forEachEdgeOfType(
Edge::EDGE_MEMBER,
[&](Edge* edge)
{
childNodeCount++;
if (!hasChildrenWithReferences && edge->getTo() != this && edge->getTo()->hasReferences())
{
hasChildrenWithReferences = true;
}
}
);
if (hasChildrenWithReferences || getEdges().size() > childNodeCount)
{
return true;
}
return false;
}
bool Node::isNode() const
{
return true;
@@ -450,6 +436,19 @@ void Node::addComponentSignature(std::shared_ptr<TokenComponentSignature> compon
}
}
void Node::addComponentAccess(std::shared_ptr<TokenComponentAccess> component)
{
if (getComponent<TokenComponentAccess>())
{
LOG_ERROR("TokenComponentAccess has been set before!");
return;
}
else
{
addComponent(component);
}
}
std::string Node::getTypeString() const
{
return getTypeString(m_type);
@@ -460,6 +459,12 @@ std::string Node::getAsString() const
std::stringstream str;
str << "[" << getId() << "] " << getTypeString() << ": " << "\"" << getName() << "\"";
TokenComponentAccess* access = getComponent<TokenComponentAccess>();
if (access)
{
str << " " << access->getAccessString();
}
if (getComponent<TokenComponentStatic>())
{
str << " static";
+20 -16
View File
@@ -11,6 +11,7 @@
#include "data/name/NameHierarchy.h"
class TokenComponentAbstraction;
class TokenComponentAccess;
class TokenComponentConst;
class TokenComponentStatic;
class TokenComponentFilePath;
@@ -22,25 +23,29 @@ class Node
public:
typedef int NodeTypeMask;
enum NodeType : NodeTypeMask
{
{ // make sure that the value of 0x0 is not used here because it doesn't work for bitmasking.
NODE_UNDEFINED = 0x1,
NODE_TYPE = 0x2,
NODE_BUILTIN_TYPE = 0x4,
NODE_NAMESPACE = 0x4,
NODE_STRUCT = 0x8,
NODE_CLASS = 0x10,
NODE_GLOBAL_VARIABLE = 0x20,
NODE_FIELD = 0x40,
NODE_FUNCTION = 0x80,
NODE_METHOD = 0x100,
NODE_NAMESPACE = 0x8,
NODE_PACKAGE = 0x10,
NODE_STRUCT = 0x20,
NODE_CLASS = 0x40,
NODE_INTERFACE = 0x80,
NODE_GLOBAL_VARIABLE = 0x100,
NODE_FIELD = 0x200,
NODE_FUNCTION = 0x400,
NODE_METHOD = 0x800,
NODE_ENUM = 0x200,
NODE_ENUM_CONSTANT = 0x400,
NODE_TYPEDEF = 0x800,
NODE_TEMPLATE_PARAMETER_TYPE = 0x1000,
NODE_ENUM = 0x1000,
NODE_ENUM_CONSTANT = 0x2000,
NODE_TYPEDEF = 0x4000,
NODE_TEMPLATE_PARAMETER_TYPE = 0x8000,
NODE_TYPE_PARAMETER = 0x10000,
NODE_FILE = 0x2000,
NODE_MACRO = 0x4000
NODE_FILE = 0x20000,
NODE_MACRO = 0x40000
};
static std::string getTypeString(NodeType type);
@@ -88,8 +93,6 @@ public:
void forEachChildNode(std::function<void(Node*)> func) const;
void forEachNodeRecursive(std::function<void(const Node*)> func) const;
bool hasReferences() const;
// Token implementation.
virtual bool isNode() const;
virtual bool isEdge() const;
@@ -100,6 +103,7 @@ public:
void addComponentStatic(std::shared_ptr<TokenComponentStatic> component);
void addComponentFilePath(std::shared_ptr<TokenComponentFilePath> component);
void addComponentSignature(std::shared_ptr<TokenComponentSignature> component);
void addComponentAccess(std::shared_ptr<TokenComponentAccess> component);
// Logging.
virtual std::string getTypeString() const;
@@ -1,6 +1,6 @@
#include "data/graph/token_component/TokenComponentAccess.h"
std::string TokenComponentAccess::getAccessString(AccessType access)
std::string TokenComponentAccess::getAccessString(AccessKind access)
{
switch (access)
{
@@ -10,38 +10,18 @@ std::string TokenComponentAccess::getAccessString(AccessType access)
return "protected";
case ACCESS_PRIVATE:
return "private";
case ACCESS_TEMPLATE:
case ACCESS_DEFAULT:
return "default";
case ACCESS_TEMPLATE_PARAMETER:
return "template parameter";
case ACCESS_NONE:
return "";
case ACCESS_TYPE_PARAMETER:
return "type parameter";
}
return "";
}
int TokenComponentAccess::typeToInt(AccessType type)
{
return type;
}
TokenComponentAccess::AccessType TokenComponentAccess::intToType(int value)
{
switch (value)
{
case 0x1:
return ACCESS_PUBLIC;
case 0x2:
return ACCESS_PROTECTED;
case 0x4:
return ACCESS_PRIVATE;
case 0x8:
return ACCESS_TEMPLATE;
default:
break;
}
return ACCESS_NONE;
}
TokenComponentAccess::TokenComponentAccess(AccessType access)
TokenComponentAccess::TokenComponentAccess(AccessKind access)
: m_access(access)
{
}
@@ -55,7 +35,7 @@ std::shared_ptr<TokenComponent> TokenComponentAccess::copy() const
return std::make_shared<TokenComponentAccess>(*this);
}
TokenComponentAccess::AccessType TokenComponentAccess::getAccess() const
AccessKind TokenComponentAccess::getAccess() const
{
return m_access;
}
@@ -4,35 +4,24 @@
#include <string>
#include "data/graph/token_component/TokenComponent.h"
#include "data/parser/AccessKind.h"
class TokenComponentAccess
: public TokenComponent
{
public:
enum AccessType : int // todo: use normal numbers here. not 2^x
{
ACCESS_PUBLIC = 0x1,
ACCESS_PROTECTED = 0x2,
ACCESS_PRIVATE = 0x4,
ACCESS_TEMPLATE = 0x8,
ACCESS_NONE = 0x0
};
static std::string getAccessString(AccessKind access);
static std::string getAccessString(AccessType access);
static int typeToInt(AccessType type);
static AccessType intToType(int value);
TokenComponentAccess(AccessType access);
TokenComponentAccess(AccessKind access);
virtual ~TokenComponentAccess();
virtual std::shared_ptr<TokenComponent> copy() const;
AccessType getAccess() const;
AccessKind getAccess() const;
std::string getAccessString() const;
private:
const AccessType m_access;
const AccessKind m_access;
};
#endif // TOKEN_COMPONENT_ACCESS_H