Bug 330778

Summary: c++ parser upgrade
Product: [Applications] umbrello Reporter: Ralf Habacker <ralf.habacker>
Component: generalAssignee: Ralf Habacker <ralf.habacker>
Status: RESOLVED FIXED    
Severity: wishlist    
Priority: NOR    
Version: unspecified   
Target Milestone: 2.13 (KDE 4.13)   
Platform: unspecified   
OS: Linux   
Latest Commit: Version Fixed In: 4.13.0
Sentry Crash Report:

Description Ralf Habacker 2014-02-04 23:53:30 UTC
umbrello's recent c++ parser has been taken from the kdevelop 3.0 release. 
While fixing bugs in this parser, there has been several issues found: 
- wrong code position reporting 
- hard to find errors and to extend
- slow import
- external dependency to an outdated boost version

With the c++ parser of kdevelop 3.5 there is an updated parser available. The advantages of upgrading to this parser are:
- get rid of the boost dependency
- easier bug fixing
- easier to extend
- Correct error reporting to the user with a log window or similar to find missing include dirs. 

Drawbacks: 
- need to be ported to Qt4 (several qt3 classes are used)
- need some migration from KSharedPtr to std::auto_ptr  

Reproducible: Always




Notes: 
1. in general there would be an option to take recent kdevelop 4 parser. The drawback is that it uses a different ast implementation, which needs refactoring of the ast to umbrello model feeder. KDE 3.5 c++ parsers ast is mostly compatible to the recently used 3.0 ast.
2. kdevelop developers has been asked to share there c++ parser implementation with umbrello (to place it into kdevplatform), which has been rejected. They do not want to make their ast model public.
Comment 1 Ralf Habacker 2014-02-05 16:51:31 UTC
Git commit c8b1625de69873819dcaae6ea5700d851f98662d by Ralf Habacker.
Committed on 03/02/2014 at 16:06.
Pushed by habacker into branch 'master'.

Separate kdevelop 3.0 cpp parser from application code.

This makes upgrade to more recent version easier.

R  +0    -0    lib/cppparser/README [from: umbrello/codeimport/kdevcppparser/README - 100% similarity]
R  +0    -0    lib/cppparser/assignFunctor.hpp [from: umbrello/codeimport/kdevcppparser/assignFunctor.hpp - 100% similarity]
R  +0    -0    lib/cppparser/ast.cpp [from: umbrello/codeimport/kdevcppparser/ast.cpp - 100% similarity]
R  +0    -0    lib/cppparser/ast.h [from: umbrello/codeimport/kdevcppparser/ast.h - 100% similarity]
R  +0    -0    lib/cppparser/ast_utils.cpp [from: umbrello/codeimport/kdevcppparser/ast_utils.cpp - 100% similarity]
R  +0    -0    lib/cppparser/ast_utils.h [from: umbrello/codeimport/kdevcppparser/ast_utils.h - 100% similarity]
R  +0    -0    lib/cppparser/driver.cpp [from: umbrello/codeimport/kdevcppparser/driver.cpp - 100% similarity]
R  +0    -0    lib/cppparser/driver.h [from: umbrello/codeimport/kdevcppparser/driver.h - 100% similarity]
R  +0    -0    lib/cppparser/errors.cpp [from: umbrello/codeimport/kdevcppparser/errors.cpp - 100% similarity]
R  +0    -0    lib/cppparser/errors.h [from: umbrello/codeimport/kdevcppparser/errors.h - 100% similarity]
R  +0    -0    lib/cppparser/keywords.lut.h [from: umbrello/codeimport/kdevcppparser/keywords.lut.h - 100% similarity]
R  +0    -0    lib/cppparser/lexer.cpp [from: umbrello/codeimport/kdevcppparser/lexer.cpp - 100% similarity]
R  +0    -0    lib/cppparser/lexer.h [from: umbrello/codeimport/kdevcppparser/lexer.h - 100% similarity]
R  +0    -0    lib/cppparser/lookup.cpp [from: umbrello/codeimport/kdevcppparser/lookup.cpp - 100% similarity]
R  +0    -0    lib/cppparser/lookup.h [from: umbrello/codeimport/kdevcppparser/lookup.h - 100% similarity]
R  +0    -0    lib/cppparser/parser.cpp [from: umbrello/codeimport/kdevcppparser/parser.cpp - 100% similarity]
R  +0    -0    lib/cppparser/parser.h [from: umbrello/codeimport/kdevcppparser/parser.h - 100% similarity]
R  +0    -0    lib/cppparser/position.h [from: umbrello/codeimport/kdevcppparser/position.h - 100% similarity]
R  +0    -0    lib/cppparser/preprocesslexer.cpp [from: umbrello/codeimport/kdevcppparser/preprocesslexer.cpp - 100% similarity]
R  +0    -0    lib/cppparser/preprocesslexer.h [from: umbrello/codeimport/kdevcppparser/preprocesslexer.h - 100% similarity]
R  +0    -0    lib/cppparser/skip_rule.hpp [from: umbrello/codeimport/kdevcppparser/skip_rule.hpp - 100% similarity]
R  +0    -0    lib/cppparser/tree_parser.cpp [from: umbrello/codeimport/kdevcppparser/tree_parser.cpp - 100% similarity]
R  +0    -0    lib/cppparser/tree_parser.h [from: umbrello/codeimport/kdevcppparser/tree_parser.h - 100% similarity]
M  +11   -10   umbrello/CMakeLists.txt
M  +2    -3    umbrello/codeimport/cppimport.cpp

http://commits.kde.org/umbrello/c8b1625de69873819dcaae6ea5700d851f98662d
Comment 2 Ralf Habacker 2014-02-06 21:41:35 UTC
Git commit 47b06e6643920af6b20294ebfefd3d3595bf0629 by Ralf Habacker.
Committed on 20/01/2014 at 20:27.
Pushed by habacker into branch '330788-3.5-cpp-parser'.

Add log dock widget.

M  +31   -0    umbrello/uml.cpp
M  +7    -0    umbrello/uml.h

http://commits.kde.org/umbrello/47b06e6643920af6b20294ebfefd3d3595bf0629
Comment 3 Ralf Habacker 2014-02-06 21:56:54 UTC
Git commit 7cac0f60bec6fa6574d0ef4aa9f689d8e327653f by Ralf Habacker.
Committed on 30/01/2014 at 20:54.
Pushed by habacker into branch '330788-3.5-cpp-parser'.

Add debug window as dock window.

M  +0    -1    umbrello/debug/debug_utils.cpp
M  +16   -0    umbrello/uml.cpp
M  +3    -0    umbrello/uml.h

http://commits.kde.org/umbrello/7cac0f60bec6fa6574d0ef4aa9f689d8e327653f
Comment 4 Ralf Habacker 2014-02-06 21:57:06 UTC
Git commit 9041fd6ff711a114c42f40274d83ad10d3c12fe2 by Ralf Habacker.
Committed on 20/01/2014 at 21:33.
Pushed by habacker into branch '330788-3.5-cpp-parser'.

Add parser errors to log window.

M  +2    -0    umbrello/codeimport/cppimport.cpp

http://commits.kde.org/umbrello/9041fd6ff711a114c42f40274d83ad10d3c12fe2
Comment 5 Ralf Habacker 2014-02-11 23:42:05 UTC
Git commit b6d34603e537c484b88ab3cfff18619c621fcf14 by Ralf Habacker.
Committed on 20/01/2014 at 20:27.
Pushed by habacker into branch 'master'.

Add log dock widget, which is currently used by the cpp code import.
GUI

M  +31   -0    umbrello/uml.cpp
M  +7    -0    umbrello/uml.h

http://commits.kde.org/umbrello/b6d34603e537c484b88ab3cfff18619c621fcf14
Comment 6 Ralf Habacker 2014-02-11 23:57:25 UTC
Git commit 6eb2ccecd41200ee32c288c1370bf81325586b41 by Ralf Habacker.
Committed on 20/01/2014 at 21:33.
Pushed by habacker into branch 'master'.

Add parser errors to log window.
BUG

M  +2    -0    umbrello/codeimport/cppimport.cpp

http://commits.kde.org/umbrello/6eb2ccecd41200ee32c288c1370bf81325586b41
Comment 7 Ralf Habacker 2014-02-11 23:57:38 UTC
Git commit 9ef1c977e97d16656e47e2df30201b9075e761cb by Ralf Habacker.
Committed on 30/01/2014 at 20:54.
Pushed by habacker into branch 'master'.

Add debug window as dock window, which makes developers live easier.
GUI

M  +0    -1    umbrello/debug/debug_utils.cpp
M  +16   -0    umbrello/uml.cpp
M  +3    -0    umbrello/uml.h

http://commits.kde.org/umbrello/9ef1c977e97d16656e47e2df30201b9075e761cb
Comment 8 Ralf Habacker 2014-02-12 06:41:20 UTC
Git commit 0d6abffe9ed4c7532ee14d90c9155eb9eb4195f1 by Ralf Habacker.
Committed on 12/02/2014 at 06:39.
Pushed by habacker into branch 'master'.

Get rid of obsolate class FileAST.

M  +0    -5    lib/cppparser/ast.cpp
M  +0    -35   lib/cppparser/ast.h
M  +0    -6    lib/cppparser/tree_parser.cpp
M  +0    -1    lib/cppparser/tree_parser.h
M  +4    -7    umbrello/codeimport/kdevcppparser/cpptree2uml.cpp
M  +0    -1    umbrello/codeimport/kdevcppparser/cpptree2uml.h

http://commits.kde.org/umbrello/0d6abffe9ed4c7532ee14d90c9155eb9eb4195f1