From 6aa4c6f4d746d69f223c2163d7ba22ef2e915c70 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Mon, 16 Sep 2013 14:13:59 -0700 Subject: [PATCH] Bug 412766 - Allow indexing to continue after encountering an invalid class member. --- .../index/tests/IndexCPPBindingResolutionBugs.java | 9 +++++++++ .../internal/core/pdom/dom/cpp/PDOMCPPLinkage.java | 11 ++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java index 57f2c350297..b57ac7e4338 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java @@ -1334,4 +1334,13 @@ public class IndexCPPBindingResolutionBugs extends IndexBindingResolutionTestBas assertTrue(name instanceof IASTImplicitName); assertEquals("base", name.resolveBinding().getOwner().getName()); } + + // class A { + // class B; + // }; + // class D : public A {}; + // class D::B {}; + public void _testInvalidOwner_412766() throws Exception { + checkBindings(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java index d5bdbb357c8..63fc781e11c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java @@ -541,9 +541,14 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { if (parent instanceof IPDOMCPPClassType) { if (originalBinding instanceof IEnumerator) originalBinding = originalBinding.getOwner(); - int visibility = getVisibility(originalBinding); - if (visibility >= 0) { - ((IPDOMCPPClassType) parent).addMember(binding, visibility); + try { + int visibility = getVisibility(originalBinding); + if (visibility >= 0) { + ((IPDOMCPPClassType) parent).addMember(binding, visibility); + return; + } + } catch (IllegalArgumentException e) { + CCorePlugin.log(e); return; } }