Review Request 123963: First bits of refactorings. Skeleton of interface for KDevelop. Build system. CompilationDatabase for CMake projects and ClangTool.

Maciej Poleski d82ks8djf82msd83hf8sc02lqb5gh5 at gmail.com
Thu Jul 2 21:42:55 UTC 2015



> On Lip 2, 2015, 3:39 po południu, Milian Wolff wrote:
> > refactoring/kdevrefactorings_disabled.h, line 36
> > <https://git.reviewboard.kde.org/r/123963/diff/8/?file=382154#file382154line36>
> >
> >     this is wrong, remove it, *and* remove the QObject as base class above.

It is QObject because this way ClangSupport will delete this object as necessary (as a child object). How to get this behavior not being QOjbect?


> On Lip 2, 2015, 3:39 po południu, Milian Wolff wrote:
> > refactoring/documentcache.h, line 61
> > <https://git.reviewboard.kde.org/r/123963/diff/8/?file=382148#file382148line61>
> >
> >     make the function const

RefactoringTool is cached. This function may regenerate it depending on needs (RefactoringTool API has one big issue: it cannot remove data from its cache - when we add one (opened in KDevelop) file to this cache, then we have to update content of cache for this file forever. What is more these updates does not remove "old data" - we stack new content on the old and keep all data forever).


> On Lip 2, 2015, 3:39 po południu, Milian Wolff wrote:
> > refactoring/documentcache.cpp, line 61
> > <https://git.reviewboard.kde.org/r/123963/diff/8/?file=382149#file382149line61>
> >
> >     I'd prefer you return a ptr instead of a reference, this style is more common in the Qt world

I return reference here to suggest that location (memory address) of this RefactoringTool *should* not be stored.


> On Lip 2, 2015, 3:39 po południu, Milian Wolff wrote:
> > refactoring/interface.h, line 132
> > <https://git.reviewboard.kde.org/r/123963/diff/8/?file=382150#file382150line132>
> >
> >     don't pass the controller
> >     
> >     in general, this just shows again how overdesigned this code is. you couple against KTextEditor, Qt and KDevelop API, but write it in a C API... I hope you'll clean this up in the future (in a separate patch review).

Yes. Old (dlopen) design changed passing more and more Qt-style objects. Cache already binds directly to KDevelop eluding this interface at all. Next objects are coming and as we *do* link this into kdev-clang I don't find this interface usefull.


> On Lip 2, 2015, 3:39 po południu, Milian Wolff wrote:
> > refactoring/interface.cpp, line 92
> > <https://git.reviewboard.kde.org/r/123963/diff/8/?file=382151#file382151line92>
> >
> >     here and below: const before typename

I have strange felling that i fixed this and it came back again...


- Maciej


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/123963/#review81990
-----------------------------------------------------------


On Lip 1, 2015, 11:42 po południu, Maciej Poleski wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/123963/
> -----------------------------------------------------------
> 
> (Updated Lip 1, 2015, 11:42 po południu)
> 
> 
> Review request for KDevelop.
> 
> 
> Repository: kdev-clang
> 
> 
> Description
> -------
> 
> First bits of refactorings.
> Skeleton of interface for KDevelop.
> Build system (really nasty, linked DSO has 18MiB).
> CompilationDatabase for CMake projects and ClangTool (with cache, but without cache updates).
> Interface is not frozen for now.
> 
> Currently building of refactorings is enabled only if Clang 3.6.x is found. In other case build system behaves exactly as current master.
> 
> Refactorings require some contextual informations about projects. I made draft of interface with should feature:
>  - Stable ABI - dlopen (or equivalent) a DSO and if succeed (binary is still compatible with Clang libraries ABI), dlsym (or equivalent) some functions which are to provide all refactorings features
>  - Prototypes (with some implementation) of functions constituting API between KDevelop and refactorings backend
>  - It may be considered to use Qt plugin system to provide implementation of this (or equivalent) interface. This would be more expensive, but also more portable
>  - In worst case this library (static version) can be used with additional driver to make stand-alone executable providing all refactorings features (but it would require additional marshaling and hamper cooperation with user (how to provide UI in such a case?))
> 
> Handling dependencies between Clang/LLVM libraries is a nightmare. I extended FindClang.cmake to find much more libraries and used them to link with first pieces of my code. This is huge, requires additional libraries like zlib and even ordering of dependencies can cause linker errors.
> 
> Interface is not finished
> 
> 
> Diffs
> -----
> 
>   CMakeLists.txt 875172a8407f4bd9faf330f032a280fa66c2b16f 
>   clangsupport.h 8ed1ec90bbbc41d7c7a94d926e0951c729a6194c 
>   clangsupport.cpp e22c55426a2e839ec11cbe0b2fe1e13721b0583a 
>   cmake/FindClang.cmake 6c9bd6ef0242319122dcc7e6fd6cea8d9f0cbfbb 
>   refactoring/CMakeLists.txt PRE-CREATION 
>   refactoring/documentcache.h PRE-CREATION 
>   refactoring/documentcache.cpp PRE-CREATION 
>   refactoring/interface.h PRE-CREATION 
>   refactoring/interface.cpp PRE-CREATION 
>   refactoring/kdevrefactorings.h PRE-CREATION 
>   refactoring/kdevrefactorings.cpp PRE-CREATION 
>   refactoring/kdevrefactorings_disabled.h PRE-CREATION 
>   refactoring/nooprefactoring.h PRE-CREATION 
>   refactoring/nooprefactoring.cpp PRE-CREATION 
>   refactoring/refactoring.h PRE-CREATION 
>   refactoring/refactoring.cpp PRE-CREATION 
>   refactoring/refactoringcontext.h PRE-CREATION 
>   refactoring/refactoringcontext.cpp PRE-CREATION 
>   refactoring/refactoringinfo.h PRE-CREATION 
>   refactoring/refactoringinfo.cpp PRE-CREATION 
>   refactoring/renamevardeclrefactoring.h PRE-CREATION 
>   refactoring/renamevardeclrefactoring.cpp PRE-CREATION 
>   refactoring/utils.h PRE-CREATION 
>   refactoring/utils.cpp PRE-CREATION 
> 
> Diff: https://git.reviewboard.kde.org/r/123963/diff/
> 
> 
> Testing
> -------
> 
> Compiles on my Gentoo system. It makes sense to build this only on system with Clang 3.6.
> 
> 
> Thanks,
> 
> Maciej Poleski
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kdevelop-devel/attachments/20150702/2bf99d5d/attachment-0001.html>


More information about the KDevelop-devel mailing list