mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Enhanced loops.
This commit is contained in:
parent
245f1c6da6
commit
0f1b5d2f72
1 changed files with 17 additions and 24 deletions
|
@ -11,9 +11,7 @@
|
||||||
package org.eclipse.cdt.internal.core.pdom;
|
package org.eclipse.cdt.internal.core.pdom;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
@ -38,7 +36,7 @@ public class CModelListener implements IElementChangedListener, IResourceChangeL
|
||||||
private static final int UPDATE_LR_CHANGED_FILES_COUNT = 5;
|
private static final int UPDATE_LR_CHANGED_FILES_COUNT = 5;
|
||||||
|
|
||||||
private PDOMManager fManager;
|
private PDOMManager fManager;
|
||||||
private LinkedHashMap<ITranslationUnit, ITranslationUnit> fLRUs= new LinkedHashMap<ITranslationUnit,ITranslationUnit>(UPDATE_LR_CHANGED_FILES_COUNT, 0.75f, true) {
|
private LinkedHashMap<ITranslationUnit, ITranslationUnit> fLRUs= new LinkedHashMap<ITranslationUnit, ITranslationUnit>(UPDATE_LR_CHANGED_FILES_COUNT, 0.75f, true) {
|
||||||
@Override
|
@Override
|
||||||
protected boolean removeEldestEntry(Map.Entry<ITranslationUnit, ITranslationUnit> eldest) {
|
protected boolean removeEldestEntry(Map.Entry<ITranslationUnit, ITranslationUnit> eldest) {
|
||||||
return size() > UPDATE_LR_CHANGED_FILES_COUNT;
|
return size() > UPDATE_LR_CHANGED_FILES_COUNT;
|
||||||
|
@ -48,27 +46,26 @@ public class CModelListener implements IElementChangedListener, IResourceChangeL
|
||||||
public CModelListener(PDOMManager manager) {
|
public CModelListener(PDOMManager manager) {
|
||||||
fManager= manager;
|
fManager= manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void elementChanged(ElementChangedEvent event) {
|
public void elementChanged(ElementChangedEvent event) {
|
||||||
// Only respond to post change events
|
// Only respond to post change events
|
||||||
if (event.getType() != ElementChangedEvent.POST_CHANGE)
|
if (event.getType() != ElementChangedEvent.POST_CHANGE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Walk the delta collecting tu's per project
|
// Walk the delta collecting tu's per project
|
||||||
HashMap<ICProject, DeltaAnalyzer> changeMap= new HashMap<ICProject, DeltaAnalyzer>();
|
HashMap<ICProject, DeltaAnalyzer> changeMap= new HashMap<ICProject, DeltaAnalyzer>();
|
||||||
processDelta(event.getDelta(), changeMap);
|
processDelta(event.getDelta(), changeMap);
|
||||||
|
|
||||||
// bug 171834 update last recently changed sources
|
// bug 171834 update last recently changed sources
|
||||||
addLastRecentlyUsed(changeMap);
|
addLastRecentlyUsed(changeMap);
|
||||||
|
|
||||||
for (Iterator<?> it = changeMap.entrySet().iterator(); it.hasNext();) {
|
for (Map.Entry<ICProject, DeltaAnalyzer> entry : changeMap.entrySet()) {
|
||||||
Map.Entry<?, ?> entry = (Map.Entry<?, ?>) it.next();
|
ICProject cproject = entry.getKey();
|
||||||
ICProject cproject = (ICProject) entry.getKey();
|
DeltaAnalyzer analyzer= entry.getValue();
|
||||||
DeltaAnalyzer analyzer= (DeltaAnalyzer) entry.getValue();
|
|
||||||
fManager.changeProject(cproject, analyzer.getForcedTUs(), analyzer.getChangedTUs(), analyzer.getRemovedTUs());
|
fManager.changeProject(cproject, analyzer.getForcedTUs(), analyzer.getChangedTUs(), analyzer.getRemovedTUs());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processDelta(ICElementDelta delta, HashMap<ICProject, DeltaAnalyzer> changeMap) {
|
private void processDelta(ICElementDelta delta, HashMap<ICProject, DeltaAnalyzer> changeMap) {
|
||||||
int type = delta.getElement().getElementType();
|
int type = delta.getElement().getElementType();
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
@ -86,11 +83,11 @@ public class CModelListener implements IElementChangedListener, IResourceChangeL
|
||||||
case ICElementDelta.ADDED:
|
case ICElementDelta.ADDED:
|
||||||
fManager.addProject(project);
|
fManager.addProject(project);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ICElementDelta.CHANGED:
|
case ICElementDelta.CHANGED:
|
||||||
processProjectDelta(project, delta, changeMap);
|
processProjectDelta(project, delta, changeMap);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ICElementDelta.REMOVED:
|
case ICElementDelta.REMOVED:
|
||||||
fManager.removeProject(project, delta);
|
fManager.removeProject(project, delta);
|
||||||
break;
|
break;
|
||||||
|
@ -103,7 +100,7 @@ public class CModelListener implements IElementChangedListener, IResourceChangeL
|
||||||
if (indexer != null && indexer.getID().equals(IPDOMManager.ID_NO_INDEXER)) {
|
if (indexer != null && indexer.getID().equals(IPDOMManager.ID_NO_INDEXER)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DeltaAnalyzer deltaAnalyzer = new DeltaAnalyzer();
|
DeltaAnalyzer deltaAnalyzer = new DeltaAnalyzer();
|
||||||
try {
|
try {
|
||||||
deltaAnalyzer.analyzeDelta(delta);
|
deltaAnalyzer.analyzeDelta(delta);
|
||||||
|
@ -117,23 +114,19 @@ public class CModelListener implements IElementChangedListener, IResourceChangeL
|
||||||
boolean addLRUs= false;
|
boolean addLRUs= false;
|
||||||
int count= 0;
|
int count= 0;
|
||||||
ITranslationUnit[] newLRUs= new ITranslationUnit[UPDATE_LR_CHANGED_FILES_COUNT];
|
ITranslationUnit[] newLRUs= new ITranslationUnit[UPDATE_LR_CHANGED_FILES_COUNT];
|
||||||
|
|
||||||
for (Iterator<DeltaAnalyzer> iterator = changeMap.values().iterator(); iterator.hasNext();) {
|
for (DeltaAnalyzer analyzer : changeMap.values()) {
|
||||||
DeltaAnalyzer analyzer = iterator.next();
|
for (ITranslationUnit tu : analyzer.getChangedList()) {
|
||||||
List<?> l= analyzer.getChangedList();
|
|
||||||
for (Iterator<?> it = l.iterator(); it.hasNext();) {
|
|
||||||
ITranslationUnit tu= (ITranslationUnit) it.next();
|
|
||||||
newLRUs[count++ % UPDATE_LR_CHANGED_FILES_COUNT]= tu;
|
newLRUs[count++ % UPDATE_LR_CHANGED_FILES_COUNT]= tu;
|
||||||
if (!addLRUs && tu.isHeaderUnit()) {
|
if (!addLRUs && tu.isHeaderUnit()) {
|
||||||
addLRUs= true;
|
addLRUs= true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
if (addLRUs) {
|
if (addLRUs) {
|
||||||
for (Iterator<ITranslationUnit> it = fLRUs.keySet().iterator(); it.hasNext();) {
|
for (final ITranslationUnit tu : fLRUs.keySet()) {
|
||||||
final ITranslationUnit tu = it.next();
|
|
||||||
if (tu.getResource().exists()) {
|
if (tu.getResource().exists()) {
|
||||||
final ICProject cproject= tu.getCProject();
|
final ICProject cproject= tu.getCProject();
|
||||||
DeltaAnalyzer analyzer= changeMap.get(cproject);
|
DeltaAnalyzer analyzer= changeMap.get(cproject);
|
||||||
|
|
Loading…
Add table
Reference in a new issue