java.lang.VerifyError IllformedLocaleException

Eu tenho o seguinte método pai, usado em todos os casos por vários níveis de API:

public int setVoice (@NonNull final String language, @NonNull final String region){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        return setVoice21(language, region);
    } else {
        return setVoiceDeprecated(language, region);
    }
}

esetVoice21 faz algo parecido com isto:

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public int setVoice21 ( @NonNull final String language, @NonNull final String region){

    try {
        // try some API 21 stuff
    } catch (final IllformedLocaleException e) {
        e.printStackTrace();
        return setVoiceDeprecated(language, region);
    }

setVoice21 contém outro código que requer a API 21+ especificamenteTextToSpeech.Voice eLocale.Builder

Quando executo esse código em um dispositivo <API 21, estou recebendo o seguinte erro:

W / dalvikvm: VFY: não é possível resolver a classe de exceção 6232 (Ljava / util / IllformedLocaleException;) W / dalvikvm: VFY: rejeitando o opcode 0x0d em 0x0168 W / dalvikvm: VFY: Lcom / myapp / android / speech / MyTextToSetech; (Ljava / lang / String; Ljava / lang / String;) IW / dalvikvm: Verificador rejeitado classe Lcom / myapp / android / speech / MyTextToSpeech;

E / AndroidRuntime: EXCEÇÃO FATAL: java.lang.VerifyError principal: com / myapp / android / speech / MyTextToSpeech

Se eu remover oIllformedLocaleException&nbsp;e substitua-o por uma exceção padrão, o aplicativo funciona bem, apesar das muitas outras referências aos métodos> API21 dentrosetVoice21

Para me confundir ainda mais,setVoice21&nbsp;chama a seguinte classe

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private class TTSVoice {

    public void buildVoice() {

        try {
            // Do some API 21 stuff
        } catch (final IllformedLocaleException e) {
        }

    }
}

Esta classe é apenas referenciada emsetVoice21, mas não preciso remover a referência a IllformedLocaleException aqui - posso deixá-lo e o aplicativo funciona bem .... Desconcertado.

Alguém pode me ajudar por que o IllformedLocaleException está causando essa falha? As exceções de alguma forma são tratadas de maneira diferente?

Eu agradeço antecipadamente.

Nota - Não tenho certeza de que seja relevante, mas estou subclassificandoTextToSpeech&nbsp;de uma maneira padrão. Temo que isso possa complicar a pergunta, mas por via das dúvidas ...

public class MyTextToSpeech extends TextToSpeech {

    public MyTextToSpeech(final Context context, final OnInitListener listener) {
        super(context, listener);
    }
}

EDITAR&nbsp;- A solução alternativafornecida por razzledazzle abaixo, permite que o aplicativo seja executado sem travar, mas continuo sem saber por que essa etapa é necessária. Eu nunca tive que tomar essas medidas antes ao lidar com o versionamento da API.