All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.microsoft.java.debug.plugin.internal.AdvancedVirtualMachineManager Maven / Gradle / Ivy

/*******************************************************************************
 * Copyright (c) 2017-2020 Microsoft Corporation 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:
 *     Microsoft Corporation - initial API and implementation
*******************************************************************************/

package com.microsoft.java.debug.plugin.internal;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import com.microsoft.java.debug.core.DebugSettings;
import com.microsoft.java.debug.core.DebugSettings.IDebugSettingChangeListener;
import com.microsoft.java.debug.core.adapter.IVirtualMachineManager;
import com.sun.jdi.VirtualMachine;
import com.sun.jdi.VirtualMachineManager;
import com.sun.jdi.connect.LaunchingConnector;

import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jdi.internal.VirtualMachineManagerImpl;
import org.eclipse.jdt.debug.core.JDIDebugModel;
import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin;

public class AdvancedVirtualMachineManager extends VirtualMachineManagerImpl
        implements VirtualMachineManager, IDebugSettingChangeListener, IVirtualMachineManager {
    List connectedVMs = Collections.synchronizedList(new ArrayList());

    public AdvancedVirtualMachineManager() {
        super();
        update(DebugSettings.getCurrent(), DebugSettings.getCurrent());
        DebugSettings.addDebugSettingChangeListener(this);
    }

    @Override
    public List launchingConnectors() {
        List connectors = new ArrayList<>();
        connectors.add(new AdvancedLaunchingConnector(this));
        connectors.addAll(super.launchingConnectors());
        return connectors;
    }

    @Override
    public void update(DebugSettings oldSettings, DebugSettings newSettings) {
        int currentTimeout = getGlobalRequestTimeout();
        int newTimeout = newSettings.jdwpRequestTimeout;
        if (newTimeout != currentTimeout) {
            setRequestTimeout(newTimeout);
        }
    }

    private void setRequestTimeout(int timeout) {
        IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(JDIDebugPlugin.getUniqueIdentifier());
        if (prefs != null) {
            prefs.putInt(JDIDebugModel.PREF_REQUEST_TIMEOUT, timeout);
        }

        if (!connectedVMs.isEmpty()) {
            connectedVMs.forEach(vm -> {
                if (vm instanceof org.eclipse.jdi.VirtualMachine) {
                    try {
                        ((org.eclipse.jdi.VirtualMachine) vm).setRequestTimeout(timeout);
                    } catch (Exception e) {
                        // do nothing.
                    }
                }
            });
        }
    }

    @Override
    public boolean connectVirtualMachine(VirtualMachine vm) {
        return connectedVMs.add(vm);
    }

    @Override
    public boolean disconnectVirtualMachine(VirtualMachine vm) {
        return connectedVMs.remove(vm);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy