00001 package plp.orientadaObjetos1.declaracao.variavel; 00002 00003 import plp.expressions2.memory.VariavelJaDeclaradaException; 00004 import plp.expressions2.memory.VariavelNaoDeclaradaException; 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.expressao.leftExpression.Id; 00010 import plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1; 00011 import plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1; 00012 import plp.orientadaObjetos1.util.Tipo; 00013 00017 public class CompostaDecVariavel implements DecVariavel{ 00021 private DecVariavel declaracao1; 00025 private DecVariavel declaracao2; 00026 00032 public CompostaDecVariavel(DecVariavel declaracao1, DecVariavel declaracao2){ 00033 this.declaracao1 = declaracao1; 00034 this.declaracao2 = declaracao2; 00035 } 00043 public Tipo getTipo(Id id) throws VariavelNaoDeclaradaException { 00044 Tipo tipo; 00045 try { 00046 tipo = declaracao1.getTipo(id); 00047 } 00048 catch(VariavelNaoDeclaradaException e) { 00049 tipo = declaracao2.getTipo(id); 00050 } 00051 return tipo; 00052 00053 } 00054 00062 public AmbienteExecucaoOO1 elabora(AmbienteExecucaoOO1 ambiente) 00063 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00064 ObjetoNaoDeclaradoException, ObjetoJaDeclaradoException, 00065 ClasseJaDeclaradaException, ClasseNaoDeclaradaException{ 00066 return declaracao2.elabora(declaracao1.elabora(ambiente)); 00067 } 00068 00077 public boolean checaTipo(AmbienteCompilacaoOO1 ambiente) 00078 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, 00079 ClasseNaoDeclaradaException, ClasseJaDeclaradaException { 00080 return declaracao1.checaTipo(ambiente) && declaracao2.checaTipo(ambiente); 00081 } 00082 }