Ajuda para resolver um problema na finalização de um código

O código abaixo funciona perfeitamente como está, mas quando tento colocar o if do ano após o if do dia, não funciona mais corretamente. O que acontece é que o programa não testa mais o ano. Alguém pode me ajudar, por favor. Preciso com urgência.
Vou enviar abaixo as duas classes que fazem o programa funcionar:

A primeira classe:

package programa;

/**
 *
 * @author User
 */
public class Programa {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
        Data data = new Data(30,4,2020);
	data.calculoIdade();
   
    }
    
}

A segunda classe:

package programa;

import java.time.LocalDate;
import java.time.Period;

public class Data {
   
private Integer dia, mes, ano;

public Data(Integer dia, Integer mes, Integer ano) {
        
    this.dia = dia;
    this.mes = mes;
    this.ano = ano;
    
	}

public boolean validarData() {
            
    boolean diaCerto=false;
            
    if(mes<1 || mes >12 ){
                
        System.out.println("Informe um mes valido.");

    }
            
    if(ano > 2020){

        System.out.println("Ano invalido");

    }
        
    if(dia<1 || dia>31){

        System.out.println("Tem que ser de 1 a 31!!!");
          
    } else{         
            
        switch (mes) {
                
            case 4:
            case 6:
            case 9:
            case 11:
                    
        return diaCerto = dia <= 30;
                                      
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                    
        return diaCerto = dia <= 31;

            default:
                    
                   if(ano %4 ==0){
                        
                      return diaCerto = dia<=29;

            }else{

            return dia<=28;

                   }

        }
        
    }

        
return true;

}
        
public void calculoIdade() {
		
    if(validarData()){
        
        LocalDate l = LocalDate.of(ano, mes, dia); 
        LocalDate now = LocalDate.now();
        
        if(ano<=2020){
            
            Period diff = Period.between(l, now) ;
            System.out.println("Idade: " + diff.getYears() + " anos, " + diff.getMonths() + " meses, " + diff.getDays() + " dias");
            
        }
    } else {
                    
            System.out.println("Quantidade de dias excede o total de dias do mês");
	
	}

    }
}

Não quero modificar nada no funcionamento no programa, apenas inverter posições dos ifs.

Isso acontece porque dentro else do if do dia tem um switch que chama a instrução return, aí ele encerra a execução do método.

E porque você quer testar o ano depois do dia?
Eu testaria primeiro o ano, depois o mês e por último o dia.
Ou seja, começando pelo valor de maior magnitude até o de menor.

Outra coisa:
Sua verificação de ano bissexto está errada.
A fórmula correta é assim:

if ((ano % 400 == 0) || ((ano % 4 == 0) && (ano % 100 != 0))) {
    // é bissexto
} else {
    // não é bissexto
}

De qualquer forma, sua classe está estranha, você tem um método validarData que é público, ou seja, pra validar uma data preciso instanciar um objeto Data e me lembrar de chamar o método validarData(), senão corro o risco de estar com uma data inválida.
E mesmo chamando o validarData(), não mudaria nada, pois ele só faz println com algumas mensagens, ele não impede o objeto Data de existir com valores inválidos.

O certo seria nem conseguir instanciar a Data com valores inválidos, eu deixaria o validarData como privado e o chamaria dentro do construtor e lançaria exceção se a data for inválida.

Dessa forma também não precisaria chamar ele dentro do método calculoIdade(), pois eu teria a certeza de que meu objeto Data possui ano, mes e dia válidos.