1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

New files.

This commit is contained in:
Alain Magloire 2003-01-16 16:19:26 +00:00
parent 31cf99ee38
commit 3e8053213c
4 changed files with 223 additions and 0 deletions

View file

@ -0,0 +1,135 @@
/*
*(c) Copyright QNX Software Systems Ltd. 2002.
* All Rights Reserved.
*
*/
package org.eclipse.cdt.debug.mi.core.cdi;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.ICDISharedLibraryManager;
import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary;
import org.eclipse.cdt.debug.mi.core.MIException;
import org.eclipse.cdt.debug.mi.core.MISession;
import org.eclipse.cdt.debug.mi.core.cdi.model.SharedLibrary;
import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
import org.eclipse.cdt.debug.mi.core.command.MIInfoSharedLibrary;
import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MISharedLibChangedEvent;
import org.eclipse.cdt.debug.mi.core.event.MISharedLibCreatedEvent;
import org.eclipse.cdt.debug.mi.core.event.MISharedLibUnloadedEvent;
import org.eclipse.cdt.debug.mi.core.output.MIInfoSharedLibraryInfo;
import org.eclipse.cdt.debug.mi.core.output.MIShared;
/**
* Manager of the CDI shared libraries.
*/
public class SharedLibraryManager extends SessionObject implements ICDISharedLibraryManager {
List sharedList;
List delList;
public SharedLibraryManager (CSession session) {
super(session);
sharedList = new ArrayList(1);
delList = new ArrayList(1);
}
public void loadSymbols(ICDISharedLibrary slib) throws CDIException {
throw new CDIException("not implemented");
}
public void update() throws CDIException {
MIShared[] miLibs = new MIShared[0];
CSession s = getCSession();
CommandFactory factory = s.getMISession().getCommandFactory();
MIInfoSharedLibrary infoShared = factory.createMIInfoSharedLibrary();
try {
s.getMISession().postCommand(infoShared);
MIInfoSharedLibraryInfo info = infoShared.getMIInfoSharedLibraryInfo();
if (info == null) {
throw new CDIException("No answer");
}
miLibs = info.getMIShared();
} catch (MIException e) {
throw new MI2CDIException(e);
}
List eventList = new ArrayList(miLibs.length);
for (int i = 0; i < miLibs.length; i++) {
if (containsSharedLib(miLibs[i])) {
if (hasSharedLibChanged(miLibs[i])) {
// Fire ChangedEvent
eventList.add(new MISharedLibChangedEvent(miLibs[i].getName()));
}
} else {
// add the new breakpoint and fire CreatedEvent
sharedList.add(new SharedLibrary(this, miLibs[i]));
eventList.add(new MISharedLibCreatedEvent(miLibs[i].getName()));
}
}
// Check if any libraries was unloaded.
ICDISharedLibrary[] oldlibs = (ICDISharedLibrary[])sharedList.toArray(new ICDISharedLibrary[0]);
for (int i = 0; i < oldlibs.length; i++) {
boolean found = false;
for (int j = 0; j < miLibs.length; j++) {
if (miLibs[j].getName().equals(oldlibs[i].getFileName())) {
found = true;
break;
}
}
if (!found) {
// Fire destroyed Events.
sharedList.remove(oldlibs[i]);
delList.add(oldlibs[i]);
eventList.add(new MISharedLibUnloadedEvent(oldlibs[i].getFileName()));
}
}
MISession mi = getCSession().getMISession();
MIEvent[] events = (MIEvent[])eventList.toArray(new MIEvent[0]);
mi.fireEvents(events);
}
public boolean containsSharedLib(MIShared miLib) {
ICDISharedLibrary[] libs = (ICDISharedLibrary[])sharedList.toArray(new ICDISharedLibrary[0]);
for (int i = 0; i < libs.length; i++) {
if (miLib.getName().equals(libs[i].getFileName())) {
return true;
}
}
return false;
}
public boolean hasSharedLibChanged(MIShared miLib) {
ICDISharedLibrary[] libs = (ICDISharedLibrary[])sharedList.toArray(new ICDISharedLibrary[0]);
for (int i = 0; i < libs.length; i++) {
if (miLib.getName().equals(libs[i].getFileName())) {
return miLib.getFrom() != libs[i].getStartAddress() ||
miLib.getTo() != libs[i].getEndAddress() ||
miLib.isRead() != libs[i].areSymbolsLoaded();
}
}
return false;
}
public ICDISharedLibrary getSharedLibrary(String name) {
ICDISharedLibrary[] libs = (ICDISharedLibrary[])sharedList.toArray(new ICDISharedLibrary[0]);
for (int i = 0; i < libs.length; i++) {
if (name.equals(libs[i].getFileName())) {
return libs[i];
}
}
return null;
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDISharedLibraryManager#getSharedLibraries()
*/
public ICDISharedLibrary[] getSharedLibraries() throws CDIException {
update();
return (ICDISharedLibrary[])sharedList.toArray(new ICDISharedLibrary[0]);
}
}

View file

@ -0,0 +1,30 @@
/*
* (c) Copyright QNX Software Systems Ltd. 2002.
* All Rights Reserved.
*
*/
package org.eclipse.cdt.debug.mi.core.event;
/**
*
*/
public class MISharedLibChangedEvent extends MIChangedEvent {
String filename;
public MISharedLibChangedEvent(String name) {
this(0, name);
}
public MISharedLibChangedEvent(int id, String name) {
super(id);
filename = name;
}
public String getName() {
return filename;
}
}

View file

@ -0,0 +1,30 @@
/*
* (c) Copyright QNX Software Systems Ltd. 2002.
* All Rights Reserved.
*
*/
package org.eclipse.cdt.debug.mi.core.event;
/**
*
*/
public class MISharedLibCreatedEvent extends MICreatedEvent {
String filename;
public MISharedLibCreatedEvent(String name) {
this(0, name);
}
public MISharedLibCreatedEvent(int id, String name) {
super(id);
filename = name;
}
public String getName() {
return filename;
}
}

View file

@ -0,0 +1,28 @@
/*
* (c) Copyright QNX Software Systems Ltd. 2002.
* All Rights Reserved.
*
*/
package org.eclipse.cdt.debug.mi.core.event;
/**
*
*/
public class MISharedLibUnloadedEvent extends MIDestroyedEvent {
String filename;
public MISharedLibUnloadedEvent(String name) {
this(0, name);
}
public MISharedLibUnloadedEvent(int id, String name) {
super(id);
filename = name;
}
public String getName() {
return filename;
}
}