__has_include_next (extension)
__has_include evaluates whether of the header name passed as parameter
exists. This can only be evaluated as part of a #if directive.
Interestingly, it also has to be reported as defined, i.e. #if
defined(__has_include) or #ifdef. In order to report this as defined,
this implementation adds it as a macro but during macro expansion, it's
actually converted as a dedicated token type. Then this token gets
evaluated during normal preprocessor expression evaluation.
In order to parse header names, there were several options. The main
problem is that header tokens (tQUOTE_HEADER_NAME, tSYSTEM_HEADER_NAME)
are actually produced by the Lexer as part of a special mode
(setInsideIncludeDirective) set during the handling of #include. For
expression evaluation, the tokens are already generated without
setInsideIncludeDirective therefore we only have plain string
and < > tokens.
One approach would be to generate header tokens "earlier" than executing
we need to track a new state while fetching token to configure the Lexer
(setInsideIncludeDirective) when in the context of an __has_include.
There are also complications due to macro expansion within the
__has_include where after one expansion, we don't have a lexer in the
context anymore, introducing more changes.
Another approach would be to remove the Header token creation from the
Lexer itself and let the preprocessor assemble the tokens into an header
string, in both cases of #include and __has_include. This mostly works
and is the approach used in Clang, but the problem is that whereas Clang
keeps track of leading spaces of tokens, CDT doesn't. This means with
such change that CDT would now allow #include < iostream > (notice the
white space). I think this is too big of a downside and also too big of
a change to introduce this handling of whitespace at the token level.
The approach used here is more conservative and isolated but also shares
less common logic with #include processing. The non-header token
(string, <, etc) are assembled into a header string only in the case of
a __has_include. So a downside will be that #include and __has_include
will be inconsistent in regards of leading/trailing space parsing but I
feel like this is better than making #include more permissive.
Change-Id: I5b9f5c616c8d999e0c916a85b41f96e20037b651
Signed-off-by: Marc-Andre Laperle <malaperle@gmail.com>
Some CDT preferences use \0 as a separator in preferences. Somewhere
in the Oomph preference synchronizer stack there is, or was, a place
that failed to escape/unescape preferences with encoded \0 properly.
CDT would then fail to parse the preference and an exception would
be raised, causing code completions and the editor to be broken.
This patch hardens the CDT code to:
(1) Allow an escaped \0 to be used as a separator on
read (Oomph uses ${0x0})
(2) Handle NumberFormatExceptions gracefully. In this case that means
showing user a pop-up that their completion preferences
are empty and offering to reset them, or edit them in preference
page. This UI logic already existed, so all the new code
has to do on failed parse is return a list of all disabled
completions.
Change-Id: Ibf3b05c0855bb96c195ca43139a50c27a2a90c7e
Sets the pattern to the default of upcoming tycho 2.0 in advance.
Signed-off-by: Martin Weber <fifteenknots505@gmail.com>
Change-Id: I31b3fc733d0cb888fbf6f566995ce2043f6cd621
Switched from "org.eclipse.cdt.core.options" to
"org.eclipse.core.runtime.preferences"
Change-Id: Ie01d955079a7a54875270bb2d259c9232d30e7ea
Signed-off-by: Alexander Fedorov <alexander.fedorov@arsysop.ru>
The position of namespaces didn't take into account because the
declaration doesn't exist yet when we use this kind of refactoring,
so the find method of MethodDefinitionInsertLocationFinder didn't
look for namespaces.
Change-Id: I839194879c41f86653c837ca83a306ea1840c1d0
Some heuristics in skipToStatementStart require knowledge of previous
token. It is initialized with value from a fToken, but it current value
may be invalid because looksLikeMethodDecl changes fPossition value
without adjusting a fToken. Using invalid value may lead to false
triggering of heuristics. Restore fToken value when change fPossition in
looksLikeMethodDecl to prevent this.
Change-Id: If0c2c0577c89a983e1479587409f293c3d0db7be
Signed-off-by: Andrey Mozzhuhin <amozzhuhin@yandex.ru>
A function call may be mistakenly interpreted in looksLikeMethodDecl()
as a method declaration. This was due to simplified processing of
functions with a scope qualifiers in the name.
Now methods with a scope qualifier are handled similarly to methods
without them.
Change-Id: Id3075d3387fdf9c4ae2d0dffa6cdf923fd1ef9d5
Signed-off-by: Andrey Mozzhuhin <amozzhuhin@yandex.ru>
Scanning of double char tokens (::, >>, >=, <<, <=, ->) is broken in
nextToken(). In each case, peekNextChar() was used to get second
character, but scanner position was already on second char and
peekPreviousChar() need to be used.
Change-Id: Ibd447c7cde8783e8ffe547d5f9bc09d11c1c60a7
Signed-off-by: Andrey Mozzhuhin <amozzhuhin@yandex.ru>
Straightforward conversion. Still usages left that need deeper
investigation how to be done proper.
Some long time commented code removed as java formatter breaks trailing
whitespaces on save.
Change-Id: If74259bed5735b0d4cc98fc2cfa609c9c53c80c9
Signed-off-by: Alexander Kurtakov <akurtako@redhat.com>
If the correct namespace existed before the refactoring in the
translation unit, refactoring process just ignored it.
Change-Id: I9d6bd301807bb2d3f83f74ef772395d3470cf8bd
Signed-off-by: Marco Stornelli <marco.stornelli@gmail.com>
If an enum, a struct or a class is defined inside a class, the
implementation must qualify the declaration specifier.
Change-Id: I1e9450c7b165a25c4a745c50fe2e0c06e28775d0
Signed-off-by: Marco Stornelli <marco.stornelli@gmail.com>
Part 2 (please refer to the Bug 559193 regarding the reasons to rework):
- Doxygen option read-only API for clients
- Doxygen option storage API for configuration UI
- OSGi component for Doxygen API implementation
Change-Id: Ia97ade397f1040087898aeb3b50872473d3c0631
Signed-off-by: Alexander Fedorov <alexander.fedorov@arsysop.ru>
The implementation of methods with parameter declaration or with
template template parameters didn't work.
Change-Id: I783dedc5ffecd6721293d52f13548fd9e73999bc
Signed-off-by: Marco Stornelli <marco.stornelli@gmail.com>
Reworked UI code to its natural contract.
Switched java 8 to compact the code
Encapsulated scope inside the DoxygenPreferences
Change-Id: I534b8d4f7c2d6e7674b132a10ef3514e61f2c1ed
Signed-off-by: Alexander Fedorov <alexander.fedorov@arsysop.ru>
Choice is one of:
Kichwa Coders Ltd
Kichwa Coders Canada Inc.
depending if contributed by UK or Canadian company
Change-Id: I5c9fb96ea6abf97858a6896911a71fa68b8400b1
Support optional template type specification of return type in method
declaration deduction.
Change-Id: Ibaa5d5128faefb0b95534918ba9980bd8449b851
Signed-off-by: Andrey Mozzhuhin <amozzhuhin@yandex.ru>
Instead of dropping single character prefixes in getter/setter name
generation,
we just drop the class field prefix as defined in the coding style.
Change-Id: I3c3853b1b0f675ad1802b1ebbddd68dc8c0c5b33
Signed-off-by: Hannes Vogt <hannes@havogt.de>
Signed-off-by: Marco Stornelli <marco.stornelli@gmail.com>
When at the same time never join wrapped lines and next line
for opening function brace were selected, two tabs were added.
Change-Id: I90f606bf7f8b7bb7e83f3ae85d7cbb9cd0146b97
Signed-off-by: Marco Stornelli <marco.stornelli@gmail.com>