RemoteInterpreter extends Interpreter { public RemoteInterpreterProcess getInterpreterProcess() { InterpreterGroup intpGroup = getInterpreterGroup(); if (intpGroup == null) { return null; } synchronized (intpGroup) { if (intpGroup.getRemoteInterpreterProcess() == null) { RemoteInterpreterProcess remoteProcess = new RemoteInterpreterProcess( interpreterRunner, interpreterPath, localRepoPath, env, connectTimeout, remoteInterpreterProcessListener); intpGroup.setRemoteInterpreterProcess(remoteProcess); } return intpGroup.getRemoteInterpreterProcess(); } } RemoteInterpreter(Properties property,
      String noteId,
      String className,
      String interpreterRunner,
      String interpreterPath,
      String localRepoPath,
      int connectTimeout,
      int maxPoolSize,
      RemoteInterpreterProcessListener remoteInterpreterProcessListener);  RemoteInterpreter(Properties property,
      String noteId,
      String className,
      String interpreterRunner,
      String interpreterPath,
      String localRepoPath,
      Map<String, String> env,
      int connectTimeout,
      RemoteInterpreterProcessListener remoteInterpreterProcessListener); @Override String getClassName(); RemoteInterpreterProcess getInterpreterProcess(); synchronized void init(); @Override void open(); @Override void close(); @Override InterpreterResult interpret(String st, InterpreterContext context); @Override void cancel(InterpreterContext context); @Override FormType getFormType(); @Override int getProgress(InterpreterContext context); @Override List<InterpreterCompletion> completion(String buf, int cursor); @Override Scheduler getScheduler();  }
@Test public void testInterpreterGroupResetBeforeProcessStarts() { Properties p = new Properties(); RemoteInterpreter intpA = createMockInterpreterA(p); intpA.setInterpreterGroup(intpGroup); RemoteInterpreterProcess processA = intpA.getInterpreterProcess(); intpA.setInterpreterGroup(new InterpreterGroup(intpA.getInterpreterGroup().getId())); RemoteInterpreterProcess processB = intpA.getInterpreterProcess(); assertNotSame(processA.hashCode(), processB.hashCode()); }