AcessoAtributoId.java

Go to the documentation of this file.
00001 package plp.orientadaObjetos1.expressao.leftExpression;
00002 
00003 import plp.expressions2.memory.VariavelJaDeclaradaException;
00004 import plp.expressions2.memory.VariavelNaoDeclaradaException;
00005 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
00006 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException;
00007 import plp.orientadaObjetos1.expressao.Expressao;
00008 import plp.orientadaObjetos1.expressao.valor.Valor;
00009 import plp.orientadaObjetos1.expressao.valor.ValorRef;
00010 import plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1;
00011 import plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1;
00012 import plp.orientadaObjetos1.memoria.DefClasse;
00013 import plp.orientadaObjetos1.memoria.Objeto;
00014 import plp.orientadaObjetos1.util.Tipo;
00015 import plp.orientadaObjetos1.util.TipoClasse;
00016 
00020 public class AcessoAtributoId extends AcessoAtributo{
00024     private LeftExpression av;
00030     public AcessoAtributoId(LeftExpression av, Id id){
00031         super(id);
00032         this.av = av;
00033     }
00043     public Valor avaliar(AmbienteExecucaoOO1 ambiente)
00044         throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException,
00045                ObjetoNaoDeclaradoException, ClasseNaoDeclaradaException{
00046         return obterValorDeIdNoAmbiente(ambiente);
00047     }
00052     public Expressao getExpressaoObjeto(){
00053         return av;
00054     }
00065     public boolean checaTipo(AmbienteCompilacaoOO1 ambiente)
00066         throws VariavelNaoDeclaradaException, ClasseNaoDeclaradaException{
00067         boolean resposta = false;
00068         if(av.checaTipo(ambiente)) {
00069             try{
00070                 Tipo t = av.getTipo(ambiente);
00071                 DefClasse defClasse = ambiente.getDefClasse(((TipoClasse)t).getTipo());
00072                 defClasse.getTipoAtributo(super.getId());
00073                 resposta = true;
00074             }
00075             catch(VariavelNaoDeclaradaException atrib){
00076                 resposta = false;
00077             }
00078             catch(ClasseNaoDeclaradaException clas){
00079                 resposta = false;
00080             }
00081 
00082         }
00083         return resposta;
00084     }
00092     public Tipo getTipo(AmbienteCompilacaoOO1 ambiente)
00093         throws VariavelNaoDeclaradaException, ClasseNaoDeclaradaException{
00094           //Logo abaixo obtenho a definicao da Classe (seus métodos e atributos).
00095           //av.getTipo devera retornar uma instancia de TipoClasse e assim, TipoClasse.getTipo()
00096           //retorna o id (contendo o nome da classe) associado ao tipo dela
00097         Id nomeClasse = ((TipoClasse)av.getTipo(ambiente)).getTipo();
00098         DefClasse defClasse = ambiente.getDefClasse(nomeClasse);
00099         Tipo tipoAtr = defClasse.getTipoAtributo(super.getId());
00100         //Em seguida retorno o tipo do atributo, caso ele esteja definido na classe.
00101         //caso não esteja, uma exceção será lançada
00102         return tipoAtr;
00103     }
00108     public LeftExpression getAv() {
00109         return av;
00110     }
00111 
00118     private Valor obterValorDeIdNoAmbiente(AmbienteExecucaoOO1 ambiente)
00119             throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException,
00120                ObjetoNaoDeclaradoException, ClasseNaoDeclaradaException {
00121         // Pegando o objeto no ambiente
00122         ValorRef referencia = (ValorRef) av.avaliar(ambiente);
00123         Objeto objeto = ambiente.getObjeto(referencia);
00124         // Recuperando o mapeamento de valores do objeto (atributos do objeto)
00125         AmbienteExecucaoOO1 aux = objeto.getEstado();
00126         // Recuperando o valor do atributo "id" do objeto
00127         return aux.get(super.getId());
00128     }
00129 }

Generated on Tue Sep 12 21:52:08 2006 for PLP by  doxygen 1.4.7