public VisitorGeracaoCodigo geraAtributosParaAsVariaveisPassadasPorReferencia( Map<TipoDado, List<NoDeclaracaoVariavel>> variaveis) { if (variaveis.isEmpty()) { return this; } String identacao = Utils.geraIdentacao(nivelEscopo); // declara os arrays (separados por tipo) que armazenam todas as referências // gera os arrays nessa sequência de tipos TipoDado tipos[] = { TipoDado.INTEIRO, TipoDado.REAL, TipoDado.LOGICO, TipoDado.CARACTER, TipoDado.CADEIA }; for (TipoDado tipo : tipos) { if (variaveis.containsKey(tipo)) { String nomeTipo = Utils.getNomeTipoJava(tipo); int numeroVariaveis = variaveis.get(tipo).size(); saida .append(identacao) .format( "private final %s[] REFS_%s = new %s[%d];", nomeTipo, nomeTipo.toUpperCase(), nomeTipo, numeroVariaveis) .println(); } } saida.println(); // pula uma linha antes de declarar as variáveis de cada tipo for (TipoDado tipo : tipos) { if (variaveis.containsKey(tipo)) { for (NoDeclaracaoVariavel variavel : variaveis.get(tipo)) { saida .append(identacao) .append("private final int ") .append(Utils.geraStringIndice(variavel)) .append(" = ") .append(String.valueOf(variavel.getIndiceReferencia())) .append(";") .println(); } saida.println(); // separa as declarações para cada tipo } } return this; }