From 1a4e509e0d83f1ad2675e88c8542a2d1be1e646a Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Fri, 6 Dec 2013 11:38:43 -0800 Subject: [PATCH] Bug 423471 - ClassCastException in CPPASTTemplateIDAmbiguity --- .../dom/parser/cpp/CPPASTDecltypeSpecifier.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDecltypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDecltypeSpecifier.java index 500c1c2d3e5..ed2ef66fb3e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDecltypeSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTDecltypeSpecifier.java @@ -7,21 +7,25 @@ * * Contributors: * Nathan Ridge - Initial API and implementation + * Sergey Prigogin (Google) *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.ASTVisitor; +import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDecltypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression; import org.eclipse.cdt.core.parser.Keywords; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; +import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; /** * Implementation of ICPPASTDecltypeSpecifier. */ -public class CPPASTDecltypeSpecifier extends ASTNode implements ICPPASTDecltypeSpecifier { +public class CPPASTDecltypeSpecifier extends ASTNode + implements ICPPASTDecltypeSpecifier, IASTAmbiguityParent { private ICPPASTExpression fDecltypeExpression; private char[] fSignature; @@ -78,4 +82,14 @@ public class CPPASTDecltypeSpecifier extends ASTNode implements ICPPASTDecltypeS public IBinding resolvePreBinding() { return resolveBinding(); } + + @Override + public void replace(IASTNode child, IASTNode other) { + if (child == fDecltypeExpression) { + other.setPropertyInParent(child.getPropertyInParent()); + other.setParent(child.getParent()); + fDecltypeExpression = (ICPPASTExpression) other; + fSignature = null; + } + } }