From 9255d45b94f6d7f21234da98ba468ab46bd05a93 Mon Sep 17 00:00:00 2001 From: malte_langkabel Date: Thu, 18 Aug 2016 15:22:25 +0200 Subject: [PATCH] ui: language dependent symbol name delimiter * implemented symbol delimiter as static field of NameHierarchy which is set when a project is created. --- src/lib/Application.cpp | 26 +++++++------- src/lib/Project.cpp | 1 + src/lib/data/name/NameHierarchy.cpp | 15 +++++--- src/lib/data/name/NameHierarchy.h | 7 ++-- src/lib/settings/LanguageType.cpp | 13 +++++++ src/lib/settings/LanguageType.h | 2 ++ src/test/CxxParserTestSuite.h | 2 ++ src/test/JavaParserTestSuite.h | 56 +++++++++++++++-------------- 8 files changed, 76 insertions(+), 46 deletions(-) diff --git a/src/lib/Application.cpp b/src/lib/Application.cpp index 988c993d..34813de8 100644 --- a/src/lib/Application.cpp +++ b/src/lib/Application.cpp @@ -136,14 +136,22 @@ void Application::createAndLoadProject(const FilePath& projectSettingsFilePath) m_storageCache->clear(); m_project = Project::create(projectSettingsFilePath, m_storageCache.get()); - loadProject(projectSettingsFilePath); - if (m_hasGUI) + if (m_project) { - setTitle("Coati - " + projectSettingsFilePath.fileName()); - m_mainView->hideStartScreen(); + if (m_hasGUI) + { + setTitle("Coati - " + projectSettingsFilePath.fileName()); + m_mainView->hideStartScreen(); - m_componentManager->refreshViews(); + m_componentManager->clearComponents(); + m_componentManager->refreshViews(); + } + } + else + { + LOG_ERROR_STREAM(<< "Failed to load project."); + MessageStatus("Failed to load project.", true).dispatch(); } } catch (...) @@ -153,14 +161,6 @@ void Application::createAndLoadProject(const FilePath& projectSettingsFilePath) } } -void Application::loadProject(const FilePath& projectSettingsFilePath) -{ - if (m_hasGUI) - { - m_componentManager->clearComponents(); - } -} - void Application::refreshProject(bool force) { MessageStatus("Refreshing Project").dispatch(); diff --git a/src/lib/Project.cpp b/src/lib/Project.cpp index f7b4e7a5..9bbb1159 100644 --- a/src/lib/Project.cpp +++ b/src/lib/Project.cpp @@ -115,6 +115,7 @@ void Project::load() bool loadedSettings = projectSettings->reload(); if (loadedSettings) { + NameHierarchy::setDelimiter(getSymbolNameDelimiterForLanguage(projectSettings->getLanguage())); const FilePath projectSettingsPath = projectSettings->getFilePath(); const FilePath dbPath = FilePath(projectSettingsPath).replaceExtension("coatidb"); m_storage = std::make_shared(dbPath); diff --git a/src/lib/data/name/NameHierarchy.cpp b/src/lib/data/name/NameHierarchy.cpp index 14b944d4..a29428b1 100644 --- a/src/lib/data/name/NameHierarchy.cpp +++ b/src/lib/data/name/NameHierarchy.cpp @@ -37,6 +37,11 @@ NameHierarchy NameHierarchy::deserialize(const std::string& serializedName) return nameHierarchy; } +void NameHierarchy::setDelimiter(const std::string& delimiter) +{ + s_delimiter = delimiter; +} + NameHierarchy::NameHierarchy() { } @@ -87,23 +92,23 @@ size_t NameHierarchy::size() const return m_elements.size(); } -std::string NameHierarchy::getQualifiedName(const std::string& delimiter) const +std::string NameHierarchy::getQualifiedName() const { std::string name; for (size_t i = 0; i < m_elements.size(); i++) { if (i > 0) { - name += delimiter; + name += s_delimiter; } name += m_elements[i]->getName(); } return name; } -std::string NameHierarchy::getQualifiedNameWithSignature(const std::string& delimiter) const +std::string NameHierarchy::getQualifiedNameWithSignature() const { - std::string name = getQualifiedName(delimiter); + std::string name = getQualifiedName(); if (m_elements.size()) { name = m_elements.back()->getSignature().qualifyName(name); // todo: use separator for signature! @@ -128,3 +133,5 @@ std::string NameHierarchy::getRawNameWithSignature() const } return ""; } + +std::string NameHierarchy::s_delimiter = "@"; diff --git a/src/lib/data/name/NameHierarchy.h b/src/lib/data/name/NameHierarchy.h index 78d7da95..11d41ad4 100644 --- a/src/lib/data/name/NameHierarchy.h +++ b/src/lib/data/name/NameHierarchy.h @@ -12,6 +12,7 @@ class NameHierarchy public: static std::string serialize(NameHierarchy nameHierarchy); static NameHierarchy deserialize(const std::string& serializedName); + static void setDelimiter(const std::string& delimiter); NameHierarchy(); NameHierarchy(const std::string& name); @@ -24,12 +25,14 @@ public: std::shared_ptr operator[](size_t pos) const; size_t size() const; - std::string getQualifiedName(const std::string& delimiter = "::") const; - std::string getQualifiedNameWithSignature(const std::string& delimiter = "::") const; + std::string getQualifiedName() const; + std::string getQualifiedNameWithSignature() const; std::string getRawName() const; std::string getRawNameWithSignature() const; private: + static std::string s_delimiter; + std::vector> m_elements; }; diff --git a/src/lib/settings/LanguageType.cpp b/src/lib/settings/LanguageType.cpp index bc365a87..4f6bcf4b 100644 --- a/src/lib/settings/LanguageType.cpp +++ b/src/lib/settings/LanguageType.cpp @@ -30,3 +30,16 @@ LanguageType stringToLanguageType(std::string s) } return LANGUAGE_UNKNOWN; } + +std::string getSymbolNameDelimiterForLanguage(LanguageType t) +{ + switch (t) + { + case LANGUAGE_C: + case LANGUAGE_CPP: + return "::"; + case LANGUAGE_JAVA: + return "."; + } + return "@"; +} diff --git a/src/lib/settings/LanguageType.h b/src/lib/settings/LanguageType.h index 3847c93a..2644fe44 100644 --- a/src/lib/settings/LanguageType.h +++ b/src/lib/settings/LanguageType.h @@ -14,4 +14,6 @@ enum LanguageType std::string languageTypeToString(LanguageType t); LanguageType stringToLanguageType(std::string s); +std::string getSymbolNameDelimiterForLanguage(LanguageType t); + #endif // LANGUAGE_TYPE_H diff --git a/src/test/CxxParserTestSuite.h b/src/test/CxxParserTestSuite.h index 26d0c1cf..2a4e972b 100644 --- a/src/test/CxxParserTestSuite.h +++ b/src/test/CxxParserTestSuite.h @@ -3218,6 +3218,8 @@ private: std::shared_ptr parseCode(std::string code, bool logErrors = true) { + NameHierarchy::setDelimiter("::"); + m_args.logErrors = logErrors; m_args.language = "c++"; m_args.languageStandard = "1z"; diff --git a/src/test/JavaParserTestSuite.h b/src/test/JavaParserTestSuite.h index 4e5f990f..c0e06af1 100644 --- a/src/test/JavaParserTestSuite.h +++ b/src/test/JavaParserTestSuite.h @@ -14,7 +14,7 @@ -class JavaParserTestSuite//: public CxxTest::TestSuite +class JavaParserTestSuite: public CxxTest::TestSuite { public: /////////////////////////////////////////////////////////////////////////////// @@ -854,7 +854,7 @@ private: std::vector* bin = getBinForSymbolKind(symbolKind); if (bin != nullptr) { - bin->push_back(addAccessPrefix(symbolName.getQualifiedNameWithSignature("."), access)); + bin->push_back(addAccessPrefix(symbolName.getQualifiedNameWithSignature(), access)); } return 0; } @@ -867,7 +867,7 @@ private: std::vector* bin = getBinForSymbolKind(symbolKind); if (bin != nullptr) { - bin->push_back(addLocationSuffix(addAccessPrefix(symbolName.getQualifiedNameWithSignature("."), access), location)); + bin->push_back(addLocationSuffix(addAccessPrefix(symbolName.getQualifiedNameWithSignature(), access), location)); } return 0; } @@ -880,7 +880,7 @@ private: std::vector* bin = getBinForSymbolKind(symbolKind); if (bin != nullptr) { - bin->push_back(addLocationSuffix(addAccessPrefix(symbolName.getQualifiedNameWithSignature("."), access), location, scopeLocation)); + bin->push_back(addLocationSuffix(addAccessPrefix(symbolName.getQualifiedNameWithSignature(), access), location, scopeLocation)); } return 0; } @@ -935,7 +935,7 @@ private: if (referenceContainer != nullptr) { referenceContainer->push_back(addLocationSuffix( - contextName.getQualifiedNameWithSignature(".") + " -> " + referencedName.getQualifiedNameWithSignature("."), location) + contextName.getQualifiedNameWithSignature() + " -> " + referencedName.getQualifiedNameWithSignature(), location) ); } } @@ -966,7 +966,7 @@ private: const ParseLocation& location, const NameHierarchy& typedefName, AccessKind access, bool isImplicit ) { - std::string str = addAccessPrefix(typedefName.getQualifiedName("."), access); + std::string str = addAccessPrefix(typedefName.getQualifiedName(), access); typedefs.push_back(addLocationSuffix(str, location)); } @@ -974,37 +974,37 @@ private: const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessKind access, const ParseLocation& scopeLocation, bool isImplicit) { - classes.push_back(addLocationSuffix(addAccessPrefix(nameHierarchy.getQualifiedName("."), access), location, scopeLocation)); + classes.push_back(addLocationSuffix(addAccessPrefix(nameHierarchy.getQualifiedName(), access), location, scopeLocation)); } virtual void onStructParsed( const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessKind access, const ParseLocation& scopeLocation, bool isImplicit) { - structs.push_back(addLocationSuffix(addAccessPrefix(nameHierarchy.getQualifiedName("."), access), location, scopeLocation)); + structs.push_back(addLocationSuffix(addAccessPrefix(nameHierarchy.getQualifiedName(), access), location, scopeLocation)); } virtual void onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable, bool isImplicit) { - globalVariables.push_back(addLocationSuffix(variable.getQualifiedName("."), location)); + globalVariables.push_back(addLocationSuffix(variable.getQualifiedName(), location)); } virtual void onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessKind access, bool isImplicit) { - fields.push_back(addLocationSuffix(addAccessPrefix(field.getQualifiedName("."), access), location)); + fields.push_back(addLocationSuffix(addAccessPrefix(field.getQualifiedName(), access), location)); } virtual void onFunctionParsed( const ParseLocation& location, const NameHierarchy& function, const ParseLocation& scopeLocation, bool isImplicit) { - functions.push_back(addLocationSuffix(function.getQualifiedNameWithSignature("."), location, scopeLocation)); + functions.push_back(addLocationSuffix(function.getQualifiedNameWithSignature(), location, scopeLocation)); } virtual void onMethodParsed( const ParseLocation& location, const NameHierarchy& method, AccessKind access, AbstractionType abstraction, const ParseLocation& scopeLocation, bool isImplicit) { - std::string str = method.getQualifiedNameWithSignature("."); + std::string str = method.getQualifiedNameWithSignature(); str = addAbstractionPrefix(str, abstraction); str = addAccessPrefix(str, access); str = addLocationSuffix(str, location, scopeLocation); @@ -1014,26 +1014,26 @@ private: virtual void onNamespaceParsed( const ParseLocation& location, const NameHierarchy& nameHierarchy, const ParseLocation& scopeLocation, bool isImplicit) { - namespaces.push_back(addLocationSuffix(nameHierarchy.getQualifiedName("."), location, scopeLocation)); + namespaces.push_back(addLocationSuffix(nameHierarchy.getQualifiedName(), location, scopeLocation)); } virtual void onEnumParsed( const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessKind access, const ParseLocation& scopeLocation, bool isImplicit) { - enums.push_back(addLocationSuffix(addAccessPrefix(nameHierarchy.getQualifiedName("."), access), location, scopeLocation)); + enums.push_back(addLocationSuffix(addAccessPrefix(nameHierarchy.getQualifiedName(), access), location, scopeLocation)); } virtual void onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy, bool isImplicit) { - enumConstants.push_back(addLocationSuffix(nameHierarchy.getQualifiedName("."), location)); + enumConstants.push_back(addLocationSuffix(nameHierarchy.getQualifiedName(), location)); } virtual void onTemplateParameterTypeParsed( const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, bool isImplicit) { templateParameterTypes.push_back( - addLocationSuffix(templateParameterTypeNameHierarchy.getQualifiedName("."), location) + addLocationSuffix(templateParameterTypeNameHierarchy.getQualifiedName(), location) ); } @@ -1049,7 +1049,7 @@ private: virtual void onMacroExpandParsed(const ParseLocation& location, const NameHierarchy& macroNameHierarchy) { - macroUses.push_back(addLocationSuffix(macroNameHierarchy.getQualifiedName(".") ,location)); + macroUses.push_back(addLocationSuffix(macroNameHierarchy.getQualifiedName() ,location)); } virtual void onCommentParsed(const ParseLocation& location) @@ -1062,31 +1062,31 @@ private: const ParseLocation& location, const NameHierarchy& childNameHierarchy, const NameHierarchy& parentNameHierarchy) { - std::string str = childNameHierarchy.getQualifiedName(".") + " : " + parentNameHierarchy.getQualifiedName("."); + std::string str = childNameHierarchy.getQualifiedName() + " : " + parentNameHierarchy.getQualifiedName(); inheritances.push_back(addLocationSuffix(str, location)); } virtual void onMethodOverrideParsed( const ParseLocation& location, const NameHierarchy& overridden, const NameHierarchy& overrider) { - overrides.push_back(addLocationSuffix(overridden.getQualifiedNameWithSignature(".") + " -> " + overrider.getQualifiedNameWithSignature("."), location)); + overrides.push_back(addLocationSuffix(overridden.getQualifiedNameWithSignature() + " -> " + overrider.getQualifiedNameWithSignature(), location)); } virtual void onCallParsed( const ParseLocation& location, const NameHierarchy& caller, const NameHierarchy& callee) { - calls.push_back(addLocationSuffix(caller.getQualifiedNameWithSignature(".") + " -> " + callee.getQualifiedNameWithSignature("."), location)); + calls.push_back(addLocationSuffix(caller.getQualifiedNameWithSignature() + " -> " + callee.getQualifiedNameWithSignature(), location)); } virtual void onUsageParsed( const ParseLocation& location, const NameHierarchy& userName, SymbolKind usedType, const NameHierarchy& usedName) { - usages.push_back(addLocationSuffix(userName.getQualifiedNameWithSignature(".") + " -> " + usedName.getQualifiedName("."), location)); + usages.push_back(addLocationSuffix(userName.getQualifiedNameWithSignature() + " -> " + usedName.getQualifiedName(), location)); } virtual void onTypeUsageParsed(const ParseLocation& location, const NameHierarchy& user, const NameHierarchy& used) { - typeUses.push_back(addLocationSuffix(user.getQualifiedNameWithSignature(".") + " -> " + used.getQualifiedNameWithSignature("."), location)); + typeUses.push_back(addLocationSuffix(user.getQualifiedNameWithSignature() + " -> " + used.getQualifiedNameWithSignature(), location)); } virtual void onTemplateArgumentTypeParsed( @@ -1094,7 +1094,7 @@ private: const NameHierarchy& templateNameHierarchy) { templateArgumentTypes.push_back( - addLocationSuffix(templateNameHierarchy.getQualifiedNameWithSignature(".") + "->" + argumentTypeNameHierarchy.getQualifiedName("."), location) + addLocationSuffix(templateNameHierarchy.getQualifiedNameWithSignature() + "->" + argumentTypeNameHierarchy.getQualifiedName(), location) ); } @@ -1103,7 +1103,7 @@ private: const NameHierarchy& templateParameterNameHierarchy) { templateDefaultArgumentTypes.push_back( - addLocationSuffix(defaultArgumentTypeNameHierarchy.getQualifiedNameWithSignature(".") + " -> " + templateParameterNameHierarchy.getQualifiedName("."), location) + addLocationSuffix(defaultArgumentTypeNameHierarchy.getQualifiedNameWithSignature() + " -> " + templateParameterNameHierarchy.getQualifiedName(), location) ); } @@ -1112,7 +1112,7 @@ private: const NameHierarchy& specializedFromNameHierarchy) { templateSpecializations.push_back(addLocationSuffix( - specializedNameHierarchy.getQualifiedNameWithSignature(".") + " -> " + specializedFromNameHierarchy.getQualifiedNameWithSignature("."), location + specializedNameHierarchy.getQualifiedNameWithSignature() + " -> " + specializedFromNameHierarchy.getQualifiedNameWithSignature(), location )); } @@ -1120,7 +1120,7 @@ private: const ParseLocation& location, const NameHierarchy& instantiatedFunction, const NameHierarchy& specializedFunction) { templateMemberSpecializations.push_back(addLocationSuffix( - instantiatedFunction.getQualifiedNameWithSignature(".") + " -> " + specializedFunction.getQualifiedNameWithSignature("."), location + instantiatedFunction.getQualifiedNameWithSignature() + " -> " + specializedFunction.getQualifiedNameWithSignature(), location )); } @@ -1133,7 +1133,7 @@ private: virtual void onMacroDefineParsed( const ParseLocation& location, const NameHierarchy& macroNameHierarchy, const ParseLocation& scopeLocation) { - macros.push_back(addLocationSuffix(macroNameHierarchy.getQualifiedName("."), location, scopeLocation)); + macros.push_back(addLocationSuffix(macroNameHierarchy.getQualifiedName(), location, scopeLocation)); } std::vector errors; @@ -1175,6 +1175,8 @@ private: std::shared_ptr parseCode(std::string code, bool logErrors = true) { + NameHierarchy::setDelimiter("."); + m_args.logErrors = logErrors; m_args.language = "Java"; m_args.languageStandard = "1.8";