[umbrello] [Bug 397666] C++ importer does not recognize 'final' keyword

Oliver Kellogg bugzilla_noreply at kde.org
Tue Feb 15 21:41:04 GMT 2022


https://bugs.kde.org/show_bug.cgi?id=397666

Oliver Kellogg <okellogg at users.sourceforge.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
      Latest Commit|                            |https://invent.kde.org/sdk/
                   |                            |umbrello/commit/6c8c82400ae
                   |                            |92fbb307a298e4231b607dfa8b3
                   |                            |69
         Resolution|---                         |FIXED
   Version Fixed In|                            |2.33.80 (KDE releases
                   |                            |22.03.80)

--- Comment #1 from Oliver Kellogg <okellogg at users.sourceforge.net> ---
Git commit 6c8c82400ae92fbb307a298e4231b607dfa8b369 by Oliver Kellogg.
Committed on 15/02/2022 at 21:38.
Pushed by okellogg into branch 'master'.

Fix "C++ importer does not recognize 'final' keyword"

Apply final-keyword.patch by Thomas Jansen with modifications:

lib/cppparser/lexer.h
- In enum Type add Token_final.

lib/cppparser/keywords.h
- Add INSERT("final", Token_final).

lib/cppparser/ast.{h,cpp}
- In class ClassSpecifierAST,
  - add getter final_() returning m_final.get();
  - add function setFinal(AST::Node& final_);
  - add private member m_final of type AST::Node.
- In class DeclaratorAST,
  - rename getter override() to override_() for avoiding incorrect
    colorization in syntax highlighting editors;
  - add getter final_() returning m_final.get();
  - add function setFinal(AST::Node& final_);
  - add private member m_final of type AST::Node.

lib/cppparser/ast_utils.cpp
- In function declaratorToString,
  - adjust call of declarator->override() to function renaming;
  - add handling of (declarator->final_() != 0).

lib/cppparser/parser.cpp
- Remove #include "optionstate.h" and testing of
  Settings::optionState().codeImportState.supportCPP11.
  Reason: In the year 2022 there is little use for switching off C++11,
  in particular in our usecase within a UML tool not compiler frontend.
- In functions parseDeclarator and parseAbstractDeclarator, after
  skipping ')' of parameter declaration clause add loop for handling
  Token_const, Token_override, Token_final.  These are handled in a
  loop because they may appear in arbitrary order.
- In function parseClassSpecifier,
  - after parsing name set AST::Node final_ if Token_final is present;
  - call ast->setFinal(final_).

umbrello/umlmodel/operation.{h,cpp}
- Add public functions setFinal(bool) and bool getFinal().
- Rename private member m_Override to m_bOverride, m_virtual to
  m_bVirtual, m_inline to m_bInline for symmetry with m_bConst.
- Add private member m_bFinal of type bool.

umbrello/umlmodel/operation.cpp
- In UMLOperation constructor initialize m_bFinal.
- In function saveToXMI :
  - Only write XML attibutes "isQuery", "isOverride", "isVirtual",
    "isInline" if the corresponding data member is true.
    This saves space and avoids the non standard attributes when
    possible.
  - Write XML attribute "isFinal" if m_bFinal is true.
- In function load1 add retrieving of m_bFinal from XML attribute
  "isFinal".

umbrello/codeimport/kdevcppparser/cpptree2uml.cpp
- In functions parseFunctionDefinition and parseFunctionDeclaration
  call m->setFinal(true) if d->final_() returns true.

umbrello/version.h
- Increase XMI1_FILE_VERSION to "1.7.5" and increase XMI2_FILE_VERSION
  to "2.0.2" to reflect the added UML Operation attribute "isFinal".

These changes were tested by importing the file
test/import/cxx/cxx11-explicit-overrides-and-final.h
FIXED-IN:2.33.80 (KDE releases 22.03.80)

M  +15   -2    lib/cppparser/ast.cpp
M  +18   -2    lib/cppparser/ast.h
M  +4    -1    lib/cppparser/ast_utils.cpp
M  +1    -0    lib/cppparser/keywords.h
M  +1    -0    lib/cppparser/lexer.h
M  +33   -33   lib/cppparser/parser.cpp
M  +6    -2    umbrello/codeimport/kdevcppparser/cpptree2uml.cpp
M  +45   -19   umbrello/umlmodel/operation.cpp
M  +7    -4    umbrello/umlmodel/operation.h
M  +2    -2    umbrello/version.h

https://invent.kde.org/sdk/umbrello/commit/6c8c82400ae92fbb307a298e4231b607dfa8b369

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the umbrello-devel mailing list