From fe014751c857b0d2651125d15d3226928df2a404 Mon Sep 17 00:00:00 2001 From: Alain Magloire Date: Thu, 17 Feb 2005 03:23:37 +0000 Subject: [PATCH] 2005-02-16 Alain Magloire Fix for PR 85633, The IBinary info were not remove in the cache. * model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java --- core/org.eclipse.cdt.core/ChangeLog | 4 +++ .../internal/core/model/DeltaProcessor.java | 29 +++++++++++++++---- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog index b8e3253c0bd..dcd7df9f85f 100644 --- a/core/org.eclipse.cdt.core/ChangeLog +++ b/core/org.eclipse.cdt.core/ChangeLog @@ -1,3 +1,7 @@ +2005-02-16 Alain Magloire + Fix for PR 85633, The IBinary info were not remove in the cache. + * model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java + 2004-03-04 Peter Faltaous Add e_machine values for X86_64. getAttributes(): Add cases for X86_64. diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java index cefdc56a604..461c9e22eaa 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java @@ -5,6 +5,8 @@ package org.eclipse.cdt.internal.core.model; * All Rights Reserved. */ +import java.util.ArrayList; + import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.IArchive; @@ -306,6 +308,25 @@ public class DeltaProcessor { } } + /** + * This is use to remove the cache info for IArchive and IBinary + * We can use IBinary.close() doing this will remove the binary + * for the virtual binary/archive containers. + * @param celement + */ + private void closeBinary(ICElement celement) { + CModelManager factory = CModelManager.getDefault(); + CElementInfo pinfo = (CElementInfo)factory.peekAtInfo(celement); + if (pinfo != null) { + ArrayList list = new ArrayList(); + ICElement[] celems = pinfo.getChildren(); + for (int i = 0; i < celems.length; ++i) { + closeBinary(celems[i]); + } + factory.removeInfo(celement); + } + } + /** * Generic processing for elements with changed contents: */ protected void elementChanged(ICElement element, IResourceDelta delta) { - // For Binary/Archive We can not call close() to the work + // For Binary/Archive We can not call close() to do the work // closing will remove the element from the {Binary,Archive}Container // We nee to clear the cache explicitely if (element instanceof IBinary || element instanceof IArchive) { - CModelManager factory = CModelManager.getDefault(); - CElementInfo pinfo = (CElementInfo)factory.peekAtInfo(element); - if (pinfo != null) { - factory.removeInfo(element); - } + closeBinary(element); } else if (element instanceof Openable) { close((Openable)element); }