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

AcessoAtributoId.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.valor.Valor;
00009 import plp.orientadaObjetos1.expressao.valor.ValorRef;
00010 import plp.orientadaObjetos1.memoria.AmbienteCompilacao;
00011 import plp.orientadaObjetos1.memoria.AmbienteExecucao;
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(AmbienteExecucao ambiente)
00044         throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException,
00045                ObjetoNaoDeclaradoException{
00046         return obterValorDeIdNoAmbiente(ambiente);
00047     }
00052     public Expressao getExpressaoObjeto(){
00053         return av;
00054     }
00065     public boolean checaTipo(AmbienteCompilacao 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(AmbienteCompilacao 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 
00117     private Valor obterValorDeIdNoAmbiente(AmbienteExecucao ambiente)
00118             throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException,
00119                ObjetoNaoDeclaradoException {
00120         // Pegando o objeto no ambiente
00121         ValorRef referencia = (ValorRef) av.avaliar(ambiente);
00122         Objeto objeto = ambiente.getObjeto(referencia);
00123         // Recuperando o mapeamento de valores do objeto (atributos do objeto)
00124         AmbienteExecucao aux = objeto.getEstado();
00125         // Recuperando o valor do atributo "id" do objeto
00126         return aux.getValor(super.getId());
00127     }
00128 }

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