package com.jetbrains.lang.dart.ide.runner.server.vmService; import gnu.trove.THashMap; import org.dartlang.vm.service.element.IsolateRef; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Map; public class IsolatesInfo { public static class IsolateInfo { private final String myIsolateId; private final String myIsolateName; private boolean breakpointsSet = false; private boolean shouldInitialResume = false; public IsolateInfo(@NotNull final String isolateId, @NotNull final String isolateName) { myIsolateId = isolateId; myIsolateName = isolateName; } public String getIsolateId() { return myIsolateId; } public String getIsolateName() { return myIsolateName; } } private final Map<String, IsolateInfo> myIsolateIdToInfoMap = Collections.synchronizedMap(new THashMap<String, IsolateInfo>()); public boolean addIsolate(@NotNull final IsolateRef isolateRef) { return myIsolateIdToInfoMap.put(isolateRef.getId(), new IsolateInfo(isolateRef.getId(), isolateRef.getName())) == null; } public void setBreakpointsSet(@NotNull final IsolateRef isolateRef) { IsolateInfo info = myIsolateIdToInfoMap.get(isolateRef.getId()); if (info != null) { info.breakpointsSet = true; } } public void setShouldInitialResume(@NotNull final IsolateRef isolateRef) { IsolateInfo info = myIsolateIdToInfoMap.get(isolateRef.getId()); if (info != null) { info.shouldInitialResume = true; } } public boolean getShouldInitialResume(@NotNull final IsolateRef isolateRef) { IsolateInfo info = myIsolateIdToInfoMap.get(isolateRef.getId()); if (info != null) { return info.breakpointsSet && info.shouldInitialResume; } else { return false; } } public void deleteIsolate(@NotNull final IsolateRef isolateRef) { myIsolateIdToInfoMap.remove(isolateRef.getId()); } public Collection<IsolateInfo> getIsolateInfos() { return new ArrayList<>(myIsolateIdToInfoMap.values()); } }