diff --git a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/NonVirtualDestructor.java b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/NonVirtualDestructor.java index 68f44b1513b..1425e730c40 100644 --- a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/NonVirtualDestructor.java +++ b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/NonVirtualDestructor.java @@ -99,7 +99,7 @@ public class NonVirtualDestructor extends AbstractIndexAstChecker { boolean hasVirtualDestructor = hasVirtualDestructor(classType); checkedClassTypes.clear(); if (hasVirtualDestructor) { - return PROCESS_SKIP; + return PROCESS_CONTINUE; } ICPPMethod virtualMethod = null; for (ICPPMethod method : ClassTypeHelper.getAllDeclaredMethods(classType)) { @@ -108,13 +108,13 @@ public class NonVirtualDestructor extends AbstractIndexAstChecker { } } if (virtualMethod == null) { - return PROCESS_SKIP; + return PROCESS_CONTINUE; } ICPPMethod destructor = getDestructor(classType); if (destructor != null && destructor.getVisibility() != ICPPASTVisibilityLabel.v_public && classType.getFriends().length == 0) { // No error if the destructor is protected or private and there are no friends. - return PROCESS_SKIP; + return PROCESS_CONTINUE; } IASTNode node = decl; @@ -125,7 +125,6 @@ public class NonVirtualDestructor extends AbstractIndexAstChecker { } } reportProblem(PROBLEM_ID, node, new String(className.getSimpleID()), virtualMethod.getName()); - return PROCESS_SKIP; } finally { CPPSemantics.popLookupPoint(); } diff --git a/codan/org.eclipse.cdt.codan.core.tests/src/org/eclipse/cdt/codan/core/internal/checkers/NonVirtualDestructorCheckerTest.java b/codan/org.eclipse.cdt.codan.core.tests/src/org/eclipse/cdt/codan/core/internal/checkers/NonVirtualDestructorCheckerTest.java index 7f11b65bbcc..7012c38c500 100644 --- a/codan/org.eclipse.cdt.codan.core.tests/src/org/eclipse/cdt/codan/core/internal/checkers/NonVirtualDestructorCheckerTest.java +++ b/codan/org.eclipse.cdt.codan.core.tests/src/org/eclipse/cdt/codan/core/internal/checkers/NonVirtualDestructorCheckerTest.java @@ -221,4 +221,16 @@ public class NonVirtualDestructorCheckerTest extends CheckerTestCase { assertTrue((start == -1 && end == -1) || // ok, not multi-line !code.substring(start, end).contains("\n")); } + + //class A { + //public: + // class B { + // public: + // virtual void test(); + // }; + //} + public void testNestedClasses_Bug468749() throws Exception { + loadCodeAndRun(getAboveComment()); + checkErrorLine(3, NonVirtualDestructor.PROBLEM_ID); + } }