From 52d99fabefb27c056cf8852b87930f52d26c022c Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Fri, 9 Jun 2006 17:50:30 +0000 Subject: [PATCH] Bug 145245 - Added check in CPPASTTemplateId to detect that we're recursing and return null if we are. I also had to change CPPClassScope a little which wasn't expecting the null. --- .../internal/core/dom/parser/cpp/CPPASTTemplateId.java | 9 +++++++-- .../cdt/internal/core/dom/parser/cpp/CPPClassScope.java | 5 ++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java index 6be6f35ccd3..5cee2cbb004 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java @@ -65,13 +65,18 @@ public class CPPASTTemplateId extends CPPASTNode implements ICPPASTTemplateId, I private IASTNode [] templateArguments = null; private IBinding binding = null; + private boolean resolving = false; /* (non-Javadoc) * @see org.eclipse.cdt.core.dom.ast.IASTName#resolveBinding() */ public IBinding resolveBinding() { - if( binding == null ) - binding = CPPTemplates.createBinding( this ); + if (binding == null && !resolving) { + // protect for infinite recursion + resolving = true; + binding = CPPTemplates.createBinding( this ); + resolving = false; + } return binding; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java index 54eddf1aa53..f5b40b5c255 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java @@ -255,9 +255,8 @@ public class CPPClassScope extends CPPScope implements ICPPClassScope { Object obj = set.keyAt( i ); if( obj instanceof IASTName ){ IASTName n = (IASTName) obj; - binding = n.getBinding(); - if( binding != null || forceResolve ){ - binding = n.resolveBinding(); + binding = forceResolve ? n.resolveBinding() : n.getBinding(); + if( binding != null ) { set.remove( n ); set.put( binding ); i--;