Main Page | Packages | Class Hierarchy | Class List | Directories | File List | Class Members | Related Pages

AcessoAtributoThis.java

Go to the documentation of this file.
00001 package plp.orientadaObjetos1.expressao.leftExpression;
00002 
00003 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
00004 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException;
00005 import plp.orientadaObjetos1.excecao.declaracao.VariavelJaDeclaradaException;
00006 import plp.orientadaObjetos1.excecao.declaracao.VariavelNaoDeclaradaException;
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.AmbienteCompilacao;
00012 import plp.orientadaObjetos1.memoria.AmbienteExecucao;
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(AmbienteExecucao ambiente)
00044         throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException,
00045         ObjetoNaoDeclaradoException{
00046         return obterValorDeIdNoAmbiente(ambiente);
00047     }
00052     public Expressao getExpressaoObjeto(){
00053         return varThis;
00054     }
00061     public boolean checaTipo(AmbienteCompilacao ambiente) {
00062         boolean resposta = false;
00063         try {
00064               resposta = varThis.checaTipo(ambiente);
00065               if(resposta) {
00066                   Tipo tipo = varThis.getTipo(ambiente);
00067                   Id idTipo = tipo.getTipo();
00068                   DefClasse defClasse = ambiente.getDefClasse(idTipo);
00069                   defClasse.getTipoAtributo(super.getId());
00070                   resposta = true;
00071               }
00072         }
00073         catch(VariavelNaoDeclaradaException atrib){
00074               resposta = false;
00075         }
00076         catch(ClasseNaoDeclaradaException clas){
00077               resposta = false;
00078         }
00079         return resposta;
00080     }
00089     public Tipo getTipo(AmbienteCompilacao ambiente)
00090         throws VariavelNaoDeclaradaException,ClasseNaoDeclaradaException{
00091         //Logo abaixo obtenho a definicao da Classe (seus métodos e atributos).
00092         //this.getTipo() devera retornar uma instancia de TipoClasse e assim, TipoClasse.getTipo()
00093         //retorna o id (contendo o nome da classe) associado ao tipo dela
00094         DefClasse defClasse = ambiente.getDefClasse(varThis.getTipo(ambiente).getTipo());
00095         //Em seguida retorno o tipo do atributo, caso ele esteja definido na classe.
00096         //caso não esteja, uma exceção será lançada
00097         return defClasse.getTipoAtributo(super.getId());
00098     }
00099 
00105     private Valor obterValorDeIdNoAmbiente(AmbienteExecucao ambiente)
00106             throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException,
00107                ObjetoNaoDeclaradoException {
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         AmbienteExecucao aux = objeto.getEstado();
00113         // Recuperando o valor do atributo "id" do objeto
00114         return aux.getValor(super.getId());
00115         //return ambiente.getObjeto((ValorRef)varThis.avaliar(ambiente)).getEstado().getValor(super.getId());
00116     }
00117 }

Generated on Mon Aug 8 20:20:46 2005 for Linguagem OO1 - Generics by  doxygen 1.4.4