Buggy code:
public class MainPlugin implements MMPlugin { public static String menuName = "Start<seq2seq4repair_space>MicroRemote" ; public static String tooltipDescription = "Click<seq2seq4repair_space>here<seq2seq4repair_space>to<seq2seq4repair_space>start<seq2seq4repair_space>controlling<seq2seq4repair_space>" + "MicroManager<seq2seq4repair_space>with<seq2seq4repair_space>your<seq2seq4repair_space>controller<seq2seq4repair_space>device." ; private CMMCore core_ ; private ScriptInterface gui_ ; private AcquisitionEngine acq_ ; private ArdWindow logWindow ; private MainWindow window ; private Connector serialReciever ; private Driver driver ; private Interpreter interpreter = new Interpreter ( ) ; private HashMap < String , String > lastConfiguration = new HashMap < String , String > ( ) ; public void setApp ( ScriptInterface app ) { } private void initDriver ( ) { } public void setProperty ( String label , String propName , String propValue ) { } public void setConfig ( String label , String value ) { } public void goUpConfig ( String label ) { } public void goDownConfig ( String label ) { } public void stepProperty ( String label , String propName , double amount ) { } public void snapImage ( ) { } public void live ( ) { } public boolean isLiveModeOn ( ) { } public void executeBsh ( String script ) { } public void toggleShutter ( ) { } public void toggleAutoShutter ( ) { } public void dispose ( ) { } public void show ( ) { } public void configurationChanged ( ) { } public String getInfo ( ) { } public String getDescription ( ) { } public String getVersion ( ) { } public String getCopyright ( ) { } public boolean validateMap ( HashMap < Integer , String [ ] > map ) { boolean ret = true ; String [ ] configGroups = core_ . getAvailableConfigGroups ( ) . toArray ( ) ; String [ ] devices = new String [ ] { } ; try { <START_BUG> devices = core_ . getDeviceAdapterNames ( ) . toArray ( ) ; <END_BUG> } catch ( Exception e1 ) { e1 . printStackTrace ( ) ; } for ( Integer key : map . keySet ( ) ) { if ( ! ret ) { return ret ; } String [ ] mapString = map . get ( key ) ; boolean contains = false ; int swInt ; try { swInt = Integer . parseInt ( mapString [ 0 ] ) ; } catch ( Exception e ) { swInt = - 1 ; } switch ( swInt ) { case Constants . CERTAINCHANNEL : for ( int i = 0 ; i < ( configGroups . length ) ; i ++ ) { String [ ] presets = core_ . getAvailableConfigs ( configGroups [ i ] ) . toArray ( ) ; for ( int j = 0 ; j < ( presets . length ) ; j ++ ) { if ( contains ) { break ; } contains = presets [ i ] . equals ( mapString [ 2 ] ) ; } } case Constants . CHANNELMINUS : case Constants . CHANNELPLUS : for ( int i = 0 ; i < ( configGroups . length ) ; i ++ ) { if ( contains ) { break ; } contains = configGroups [ i ] . equals ( mapString [ 1 ] ) ; } ret = contains ; break ; case Constants . CERTAINPROP : case Constants . PROPSTEP : for ( int i = 0 ; i < ( devices . length ) ; i ++ ) { if ( contains ) { break ; } contains = devices [ i ] . equals ( mapString [ 1 ] ) ; } ret = contains ; for ( int i = 0 ; i < ( devices . length ) ; i ++ ) { if ( contains ) { break ; } try { contains = core_ . hasProperty ( mapString [ 1 ] , mapString [ 2 ] ) ; } catch ( Exception e ) { e . printStackTrace ( ) ; } } break ; } } return ret ; } }

Fix:
devices = ScriptInterfaceWrapper . getDeviceNames ( ) ;