AcessoAtributoThis.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.This;
00009 import plp.orientadaObjetos1.expressao.valor.Valor;
00010 import plp.orientadaObjetos1.expressao.valor.ValorRef;
00011 import plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1;
00012 import plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1;
00013 import plp.orientadaObjetos1.memoria.DefClasse;
00014 import plp.orientadaObjetos1.memoria.Objeto;
00015 import plp.orientadaObjetos1.util.Tipo;
00016 
00020 public class AcessoAtributoThis extends AcessoAtributo{
00024     private This varThis;
00030     public AcessoAtributoThis(This varThis, Id id){
00031         super(id);
00032         this.varThis = varThis;
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 varThis;
00054     }
00061     public boolean checaTipo(AmbienteCompilacaoOO1 ambiente) {
00062         boolean resposta = false;
00063         try {
00064               resposta = varThis.checaTipo(ambiente);
00065               if(resposta) {
00066                   Tipo tipo = varThis.getTipo(ambiente);
00067                   DefClasse defClasse = ambiente.getDefClasse(tipo.getTipo());
00068                   defClasse.getTipoAtributo(super.getId());
00069                   resposta = true;
00070               }
00071         }
00072         catch(VariavelNaoDeclaradaException atrib){
00073               resposta = false;
00074         }
00075         catch(ClasseNaoDeclaradaException clas){
00076               resposta = false;
00077         }
00078         return resposta;
00079     }
00088     public Tipo getTipo(AmbienteCompilacaoOO1 ambiente)
00089         throws VariavelNaoDeclaradaException,ClasseNaoDeclaradaException{
00090         //Logo abaixo obtenho a definicao da Classe (seus métodos e atributos).
00091         //this.getTipo() devera retornar uma instancia de TipoClasse e assim, TipoClasse.getTipo()
00092         //retorna o id (contendo o nome da classe) associado ao tipo dela
00093         DefClasse defClasse = ambiente.getDefClasse(varThis.getTipo(ambiente).getTipo());
00094         //Em seguida retorno o tipo do atributo, caso ele esteja definido na classe.
00095         //caso não esteja, uma exceção será lançada
00096         return defClasse.getTipoAtributo(super.getId());
00097     }
00098 
00105     private Valor obterValorDeIdNoAmbiente(AmbienteExecucaoOO1 ambiente)
00106             throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException,
00107                ObjetoNaoDeclaradoException, ClasseNaoDeclaradaException {
00108         // Pegando o objeto no ambiente
00109         ValorRef referencia = (ValorRef)varThis.avaliar(ambiente);
00110         Objeto objeto = ambiente.getObjeto(referencia);
00111         // Recuperando o mapeamento de valores do objeto (atributos do objeto)
00112         AmbienteExecucaoOO1 aux = objeto.getEstado();
00113         // Recuperando o valor do atributo "id" do objeto
00114         return aux.get(super.getId());
00115         //return ambiente.getObjeto((ValorRef)varThis.avaliar(ambiente)).getEstado().getValor(super.getId());
00116     }
00117 }

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