private void geraCodigoInspecao(NoPara noPara) throws ExcecaoVisitaASA { NoExpressao incremento = noPara.getIncremento(); if (incremento != null) { NoOperacaoAtribuicao atribuicao = (NoOperacaoAtribuicao) incremento; if (atribuicao.getOperandoEsquerdo() instanceof NoReferenciaVariavel) { NoReferenciaVariavel referencia = (NoReferenciaVariavel) atribuicao.getOperandoEsquerdo(); NoDeclaracao origem = referencia.getOrigemDaReferencia(); if (origem instanceof NoDeclaracaoVariavel) { Utils.geraCodigoParaInspecao((NoDeclaracaoVariavel) origem, saida, nivelEscopo, false); } else if (origem instanceof NoDeclaracaoParametro) { Utils.geraCodigoParaInspecao((NoDeclaracaoParametro) origem, saida, nivelEscopo); } } } }
@Override public Void visitar(NoReferenciaVariavel no) throws ExcecaoVisitaASA { String nome = no.getNome(); if (no.getEscopo() != null) { saida.append(no.getEscopo()).append("."); } NoDeclaracao declaracao = no.getOrigemDaReferencia(); boolean ehParametroPorReferencia = declaracao instanceof NoDeclaracaoParametro && (((NoDeclaracaoParametro) declaracao).getModoAcesso() == ModoAcesso.POR_REFERENCIA); if (ehParametroPorReferencia || no.ehPassadoPorReferencia()) { String stringIndice = ehParametroPorReferencia ? no.getNome() : Utils.geraStringIndice(no); String nomeTipo = Utils.getNomeTipoJava(declaracao.getTipoDado()).toUpperCase(); saida.format("REFS_%s[%s]", nomeTipo, stringIndice); } else { saida.append(nome); } return null; }
public ErroVariavelNaoInicializada(NoReferenciaVariavel referencia) { this.referencia = referencia; this.setLinha(referencia.getTrechoCodigoFonteNome().getLinha()); this.setColuna(referencia.getTrechoCodigoFonteNome().getColuna()); }
@Override protected String construirMensagem() { return String.format("A variável '%s' não foi inicializada", referencia.getNome()); }