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

DecVariavelObjeto.java

Go to the documentation of this file.
00001 package plp.orientadaObjetos1.declaracao.variavel;
00002 
00003 import plp.orientadaObjetos1.comando.New;
00004 import plp.orientadaObjetos1.excecao.comando.TryCatchException;
00005 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException;
00006 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
00007 import plp.orientadaObjetos1.excecao.declaracao.ObjetoJaDeclaradoException;
00008 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException;
00009 import plp.orientadaObjetos1.excecao.declaracao.VariavelJaDeclaradaException;
00010 import plp.orientadaObjetos1.excecao.declaracao.VariavelNaoDeclaradaException;
00011 import plp.orientadaObjetos1.expressao.leftExpression.Id;
00012 import plp.orientadaObjetos1.expressao.valor.ValorNull;
00013 import plp.orientadaObjetos1.memoria.AmbienteCompilacao;
00014 import plp.orientadaObjetos1.memoria.AmbienteExecucao;
00015 import plp.orientadaObjetos1.util.Tipo;
00016 import plp.orientadaObjetos1.util.TipoClasse;
00017 import plp.orientadaObjetos1.util.TipoGeneric;
00018 
00022 public class DecVariavelObjeto implements DecVariavel{
00026     private Tipo tipoVariavel;
00030     private Id nomeVariavel;
00034     private Tipo tipoInstancia;
00041     public DecVariavelObjeto(Tipo tipoVariavel, Id nomeVariavel, Tipo tipoInstancia){
00042         this.tipoVariavel = tipoVariavel;
00043         this.nomeVariavel = nomeVariavel;
00044         this.tipoInstancia = tipoInstancia;
00045     }
00046 
00052     public Tipo getTipo(Id id) throws VariavelNaoDeclaradaException{
00053         if(this.nomeVariavel.equals(id)){
00054             return tipoVariavel;
00055         }
00056         else {
00057             throw new VariavelNaoDeclaradaException(id);
00058         }
00059     }
00060 
00066     public AmbienteExecucao executar(AmbienteExecucao ambiente)
00067         throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException,
00068                ClasseJaDeclaradaException, ClasseNaoDeclaradaException,
00069                ObjetoJaDeclaradoException, ObjetoNaoDeclaradoException, TryCatchException{
00070         Tipo tipoVariavelReal = tipoVariavel;
00071         Tipo tipoInstanciaReal = tipoInstancia;
00072         if (tipoVariavel instanceof TipoGeneric && tipoInstancia instanceof TipoGeneric) {
00073             tipoVariavelReal = ambiente.getTipoReal( tipoVariavel);
00074             tipoInstanciaReal = ambiente.getTipoReal( tipoInstancia);
00075         }    
00076         
00077         AmbienteExecucao aux =  new DecVariavelSimples(tipoVariavelReal, nomeVariavel, new ValorNull()).executar(ambiente);
00078         if ( !this.tipoInstancia.equals( TipoClasse.TIPO_NULL)) {
00079             aux = new New(nomeVariavel, tipoInstanciaReal).executar(aux);            
00080         }
00081         return aux;
00082     }
00083 
00093     public boolean checaTipo(AmbienteCompilacao ambiente)
00094         throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException,
00095                ClasseJaDeclaradaException, ClasseNaoDeclaradaException{
00096         boolean resposta = false;
00097         if ( tipoInstancia.eValido(ambiente) && tipoVariavel.eValido(ambiente) ) {
00098             resposta = true;
00099             if ( !tipoInstancia.equals(TipoClasse.TIPO_NULL)) {
00100                 resposta = resposta && tipoInstancia.equals(tipoVariavel);                
00101             }
00102             ambiente.mapTipo(nomeVariavel, tipoInstancia);
00103         }
00104         return resposta;
00105     }
00106     
00107     public String toString() {
00108         return this.tipoVariavel + " " + this.nomeVariavel + " := new " + this.tipoInstancia;
00109     }
00110 }

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