@Override public boolean accepts(No no) { if (no instanceof NoDeclaracao) { NoDeclaracao noDeclaracao = (NoDeclaracao) no; return isAccepting(noDeclaracao.getTipoDado()); } return false; }
@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; }