From f1e935c1adbe94855ef4e3269a23afa46ea2a813 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Mon, 1 Feb 2016 15:06:10 -0800 Subject: [PATCH] Bug 486915 - Unmarshalling error during indexing Implemented clone() method for PDOMCPPAliasTemplateInstance and CompositeCPPAliasTemplateInstance. Change-Id: Id9d9a86ef154112cc7ee4e2f397fe8615461125c --- .../index/CPPAliasTemplateInstanceClone.java | 33 +++++++++++++++++++ .../internal/core/index/CPPTypedefClone.java | 3 ++ .../CompositeCPPAliasTemplateInstance.java | 11 ++++--- .../dom/cpp/PDOMCPPAliasTemplateInstance.java | 6 ++++ 4 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/CPPAliasTemplateInstanceClone.java diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/CPPAliasTemplateInstanceClone.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/CPPAliasTemplateInstanceClone.java new file mode 100644 index 00000000000..b9a9ae2782b --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/CPPAliasTemplateInstanceClone.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2016 Google, Inc and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Sergey Prigogin (Google) - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.internal.core.index; + +import org.eclipse.cdt.core.dom.ast.cpp.ICPPAliasTemplate; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPAliasTemplateInstance; + +/** + * Delegating clone implementation for index classes implementing {@link ICPPAliasTemplateInstance} interface. + */ +public class CPPAliasTemplateInstanceClone extends CPPTypedefClone implements ICPPAliasTemplateInstance { + public CPPAliasTemplateInstanceClone(ICPPAliasTemplateInstance original) { + super(original); + } + + @Override + public Object clone() { + return new CPPAliasTemplateInstanceClone(this); + } + + @Override + public ICPPAliasTemplate getTemplateDefinition() { + return ((ICPPAliasTemplateInstance) delegate).getTemplateDefinition(); + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/CPPTypedefClone.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/CPPTypedefClone.java index c69d8c3c2d9..a5227280f6b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/CPPTypedefClone.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/CPPTypedefClone.java @@ -19,6 +19,9 @@ import org.eclipse.cdt.core.dom.ast.ITypedef; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding; import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer; +/** + * Delegating clone implementation for index classes implementing {@link ITypedef} interface. + */ public class CPPTypedefClone implements ITypedef, ITypeContainer, IIndexType, ICPPBinding { protected final ITypedef delegate; private IType type; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPAliasTemplateInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPAliasTemplateInstance.java index a47e7a6e108..11920d5b7ed 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPAliasTemplateInstance.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CompositeCPPAliasTemplateInstance.java @@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.index.composite.cpp; import org.eclipse.cdt.core.dom.ast.cpp.ICPPAliasTemplate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPAliasTemplateInstance; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding; +import org.eclipse.cdt.internal.core.index.CPPAliasTemplateInstanceClone; import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding; import org.eclipse.cdt.internal.core.index.composite.ICompositesFactory; @@ -21,14 +22,14 @@ class CompositeCPPAliasTemplateInstance extends CompositeCPPTypedef implements I super(cf, delegate); } - @Override - public Object clone() { - fail(); return null; - } - @Override public ICPPAliasTemplate getTemplateDefinition() { ICPPAliasTemplate templateDefinition = ((ICPPAliasTemplateInstance) rbinding).getTemplateDefinition(); return (ICPPAliasTemplate) cf.getCompositeBinding((IIndexFragmentBinding) templateDefinition); } + + @Override + public Object clone() { + return new CPPAliasTemplateInstanceClone(this); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPAliasTemplateInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPAliasTemplateInstance.java index 68d65b382b5..48d79272516 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPAliasTemplateInstance.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPAliasTemplateInstance.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.cpp.ICPPAliasTemplate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPAliasTemplateInstance; +import org.eclipse.cdt.internal.core.index.CPPAliasTemplateInstanceClone; import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants; import org.eclipse.cdt.internal.core.pdom.db.Database; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; @@ -63,4 +64,9 @@ class PDOMCPPAliasTemplateInstance extends PDOMCPPTypedef implements ICPPAliasTe protected int getRecordSize() { return RECORD_SIZE; } + + @Override + public Object clone() { + return new CPPAliasTemplateInstanceClone(this); + } } \ No newline at end of file