void (Instruction instruction, int offset, int nextOffset) { final int safeNextOffset = Math.min(nextOffset, myFlow.getSize()); CopyOnWriteList writeVars = writtenVariables[safeNextOffset]; CopyOnWriteList writeTwiceVars = writtenTwiceVariables[safeNextOffset]; if (instruction instanceof WriteVariableInstruction) { final PsiVariable variable = ((WriteVariableInstruction)instruction).variable; final PsiElement latestWriteVarExpression = getLatestWriteVarExpression(writeVars, variable); if (latestWriteVarExpression == null) { final PsiElement expression = getExpression(myFlow.getElement(offset)); writeVars = CopyOnWriteList.add(writeVars, new VariableInfo(variable, expression)); } else { writeTwiceVars = CopyOnWriteList.add(writeTwiceVars, new VariableInfo(variable, latestWriteVarExpression)); } } merge(offset, writeVars, writtenVariables); merge(offset, writeTwiceVars, writtenTwiceVariables); }