fix, unhanlded declarations caused wrong results

This commit is contained in:
Basile Burg 2017-01-16 20:46:01 +01:00
parent d9b6828205
commit fb2b2182e2
No known key found for this signature in database
GPG Key ID: 1868039F415CB8CF
1 changed files with 34 additions and 1 deletions

View File

@ -116,7 +116,6 @@ public:
{
const Parent savedParent = _parent;
bool privatePushed;
_parent = Parent.function_;
scope(exit)
{
@ -124,6 +123,14 @@ public:
_parent = savedParent;
}
if (!d.attributeDeclaration &&
!d.classDeclaration &&
!d.structDeclaration &&
!d.unionDeclaration &&
!d.interfaceDeclaration &&
!d.functionDeclaration)
return;
import std.algorithm.searching : find;
import std.algorithm.iteration: filter;
import std.range.primitives : empty;
@ -172,6 +179,7 @@ public:
return;
// check final functions
_parent = Parent.function_;
const(FunctionDeclaration) fd = d.functionDeclaration;
if (isFinal) final switch(savedParent)
@ -248,6 +256,21 @@ public:
class Foo{private: public: final void foo(){}}
}, sac);
assertAnalyzerWarnings(q{
class Foo{private: public: final void foo(){}}
}, sac);
assertAnalyzerWarnings(q{
class Impl
{
private:
static if (true)
{
protected final void _wrap_getSource() {}
}
}
}, sac);
// fail
assertAnalyzerWarnings(q{
@ -262,6 +285,16 @@ public:
FinalAttributeChecker.MSGB.format(FinalAttributeChecker.MESSAGE.func_n)
), sac);
assertAnalyzerWarnings(q{
void foo()
{
static if (true)
final class A{ private: final protected void foo(){}} // [warn]: %s
}
}c.format(
FinalAttributeChecker.MSGB.format(FinalAttributeChecker.MESSAGE.class_f)
), sac);
assertAnalyzerWarnings(q{
final struct Foo{} // [warn]: %s
}c.format(