LaunchConfigTypeSerializer.java
package com.codeaffine.extras.launch.internal.cleanup;
import static java.util.stream.Collectors.joining;
import java.util.Objects;
import java.util.stream.Stream;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchManager;
public class LaunchConfigTypeSerializer {
  private static final String DELIMITER = ",";
  private static final String ESCAPED_DELIMITER = "\\" + DELIMITER;
  private final ILaunchManager launchManager;
  public LaunchConfigTypeSerializer( ILaunchManager launchManager ) {
    this.launchManager = launchManager;
  }
  public String serialize( ILaunchConfigurationType... types ) {
    return Stream.of( types ).map( type -> type.getIdentifier() ).collect( joining( DELIMITER ) );
  }
  public ILaunchConfigurationType[] deserialize( String string ) {
    return Stream.of( string.split( ESCAPED_DELIMITER ) )
      .map( typeId -> findType( typeId ) )
      .filter( type -> type != null )
      .toArray( ILaunchConfigurationType[]::new );
  }
  private ILaunchConfigurationType findType( String typeId ) {
    return Stream.of( launchManager.getLaunchConfigurationTypes() )
      .filter( type -> Objects.equals( type.getIdentifier(), typeId ) )
      .findFirst()
      .orElse( null );
  }
}