From 05d86fc1d150b343dceb35c4eb3ec45a714c3d4a Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Sun, 17 Aug 2014 03:30:57 -0400 Subject: Bug 439896 - Handle problem bindings in CPPCompositesFactory.getCompositeEvaluation() Change-Id: I96a9961f39b6bf8d9109ebe0daa30194b8f3fed4 Signed-off-by: Nathan Ridge Reviewed-on: https://git.eclipse.org/r/31801 Reviewed-by: Sergey Prigogin Tested-by: Sergey Prigogin --- .../index/composite/cpp/CPPCompositesFactory.java | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java index 50b8f046ce1..f9c4632182d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java @@ -281,7 +281,10 @@ public class CPPCompositesFactory extends AbstractCompositeFactory { ICPPFunction parameterOwner = e.getParameterOwner(); if (parameterOwner != null) { IType b = e.getFixedType(); - IBinding a2 = getCompositeBinding((IIndexFragmentBinding) parameterOwner); + IBinding a2 = parameterOwner; + if (parameterOwner instanceof IIndexFragmentBinding) { + a2 = getCompositeBinding((IIndexFragmentBinding) parameterOwner); + } IType b2 = getCompositeType(b); if (parameterOwner != a2 || b != b2 || templateDefinition != compositeTemplateDefinition) { int parameterPosition = e.getFunctionParameterPosition(); @@ -291,7 +294,10 @@ public class CPPCompositesFactory extends AbstractCompositeFactory { IBinding a = e.getBinding(); IType b = e.getFixedType(); - IBinding a2 = getCompositeBinding((IIndexFragmentBinding) a); + IBinding a2 = a; + if (a instanceof IIndexFragmentBinding) { + a2 = getCompositeBinding((IIndexFragmentBinding) a); + } IType b2 = getCompositeType(b); if (a != a2 || b != b2 || templateDefinition != compositeTemplateDefinition) e= new EvalBinding(a2, b2, compositeTemplateDefinition); @@ -395,7 +401,10 @@ public class CPPCompositesFactory extends AbstractCompositeFactory { IType a = e.getOwnerType(); IBinding b = e.getMember(); IType a2= getCompositeType(a); - IBinding b2= getCompositeBinding((IIndexFragmentBinding) b); + IBinding b2= b; + if (b instanceof IIndexFragmentBinding) { + b2= getCompositeBinding((IIndexFragmentBinding) b); + } if (a != a2 || b != b2 || templateDefinition != compositeTemplateDefinition) e= new EvalMemberAccess(a2, e.getOwnerValueCategory(), b2, e.isPointerDeref(), compositeTemplateDefinition); return e; @@ -423,7 +432,10 @@ public class CPPCompositesFactory extends AbstractCompositeFactory { ICPPEvaluation a = e.getArgument(); ICPPEvaluation a2 = getCompositeEvaluation(a); IBinding b= e.getAddressOfQualifiedNameBinding(); - IBinding b2= getCompositeBinding((IIndexFragmentBinding) b); + IBinding b2= b; + if (b instanceof IIndexFragmentBinding) { + b2= getCompositeBinding((IIndexFragmentBinding) b); + } if (a != a2 || b != b2 || templateDefinition != compositeTemplateDefinition) e= new EvalUnary(e.getOperator(), a2, b2, compositeTemplateDefinition); return e; -- cgit v1.2.3