package org.erlide.debug.ui.views; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jface.viewers.Viewer; import org.erlide.backend.api.ErlRuntimeAttributes; import org.erlide.debug.ui.utils.ModuleListContentProvider; import org.erlide.engine.ErlangEngine; import org.erlide.engine.model.ErlModelException; import org.erlide.engine.model.root.IErlModel; import org.erlide.engine.model.root.IErlModule; import org.erlide.engine.model.root.IErlProject; import org.erlide.engine.util.CommonUtils; import org.erlide.util.ErlLogger; public class InterpretedModuleListContentProvider extends ModuleListContentProvider { @Override public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) { modules = EMPTY; if (newInput instanceof ILaunchConfiguration) { final ILaunchConfiguration launchConfiguration = (ILaunchConfiguration) newInput; try { @SuppressWarnings("unchecked") final List<String> interpret = launchConfiguration.getAttribute( ErlRuntimeAttributes.DEBUG_INTERPRET_MODULES, new ArrayList<String>()); addModules(interpret); } catch (final CoreException e) { ErlLogger.warn(e); } } } public void setModules(final Collection<String> interpret) { modules = EMPTY; addModules(interpret); } /** * Find modules from string list add to IFile-list * * @param interpret * the list of strings from prefs (projectName:fileName;... or * moduleName;...) */ public void addModules(final Collection<String> interpret) { final IErlModel model = ErlangEngine.getInstance().getModel(); for (final String projectColonModule : interpret) { // project:module | module final String[] projectModule = projectColonModule.split(":"); IErlModule module = null; if (projectModule.length > 1) { final IErlProject project = (IErlProject) model .getChildNamed(projectModule[0]); if (project != null) { final String mName = projectModule[1]; try { final boolean isErlangFile = CommonUtils .isErlangFileContentFileName(mName); final String s = isErlangFile ? mName : mName + ".erl"; module = project.getModule(s); } catch (final ErlModelException e) { ErlLogger.warn(e); } } } else { try { module = model.findModule(projectColonModule); } catch (final ErlModelException e) { } } addModule(module); } } public void addModules(final List<IErlModule> newModules) { for (final IErlModule module : newModules) { addModule(module); } } }