Modificadores de clase ilegales de Java Código de excepción 0x209

Tengo un problema con una base de código heredado. Quiero comenzar a compilarlo con el formato de clase 1.6, pero hay un problema que se revela solo cuando intento ejecutar el código compilado. Me sale la siguiente excepción:

java.lang.ClassFormatError: modificadores de clase ilegales en la clase FooBar 0x209

Googlear esto no revela muchos detalles. De acuerdo aesta el problema podría estar relacionado con la falta de coincidencia entre la interfaz y los modificadores de la implementación. Y, por supuesto, debe haber alguna nueva restricción que no estaba en 1.5.

La problemática es la clase enorme y tiene muchas clases internas y clases internas internas, por lo que es difícil de rastrear (es una de las clases internas, estoy seguro). No hace falta decir que la clase no tiene ninguna prueba, por lo que cambiarla requiere extrema precaución y es laborioso.

Entonces, ¿alguien tiene alguna información exacta sobre 0x209? ¿Qué significa el código específicamente?

EDITAR:

Gracias a que Arne nos golpeó en la dirección correcta, pudimos rastrear el problema y hacer una solución. La causa raíz no está del todo clara pero ahora podemos evitarla.

Estamos usando la antigua de Doug Lea.paquete util.concurrent en ciertas áreas porque algunos componentes se ejecutan en entornos que solo proporcionan Java 1.1 (sí, está bien reírse, no me importa).

Este mismo código (que utiliza las utilidades concurrentes) también se utiliza como un pequeño componente de otro software relacionado. Dado que el código de Doug usaba algunas características 1.2, también nos vimos obligados a modificar ciertas partes de util.concurrent para hacerlo compatible con el paquete de colecciones de Sunport 1.1 (no puedo encontrar el enlace a esas más). De alguna manera, ha causado este peculiar comportamiento de compilación de Eclipse que ocurre cuando cambiamos el formato de clase a Java 1.6. Este es el código mínimo que causa el problema:

EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap;
import com.sun.java.util.collections.Map;

public class FooBar
{
    public static void main(String[] args) {
        Map.Entry e = (Map.Entry)(new ConcurrentHashMap().entrySet().iterator().next());
    }
}

Después de compilar esto con Eclipse (con la compilación establecida en 1.6, 1.5 funciona bien) e intentar cargar la clase desde el 1.6 JRE de Sun, se produce el problema. La solución: en lugar de recorrer en bucle las entradas, hacemos un bucle a través de las claves y obtenemos valores dentro de los bucles con las claves.

Nuestra configuración aquí es tan exótica que no es de extrañar que nadie más se haya topado con esto. Finalmente verifiqué nuestros scripts de compilación y he aquí que, el ant-script tiene 1.6 configuraciones de origen y destino. Así que aparentemente esto es específico de Eclipse.

EDIT2:

Miré más de cerca el informe de errores de Sun que he vinculado aquí. El problema allí también está relacionado con com.sun.java.util.collections.Map.Entry. Y eso ocurrió con el Javac de Sun. Interesante.

Respuestas a la pregunta(1)

Su respuesta a la pregunta