Java Недопустимые модификаторы классов Код исключения 0x209

У меня проблема с устаревшей кодовой базой. Я хочу начать компиляцию в формате класса 1.6, но есть одна проблема, которая проявляется только тогда, когда я пытаюсь запустить скомпилированный код. Я получаю следующее исключение:

java.lang.ClassFormatError: Недопустимые модификаторы класса в классе FooBar 0x209

Погуглив это не раскрывает много деталей. Согласно сэто проблема может быть связана с несоответствием между интерфейсом и модификаторами реализации. И, конечно, должно быть какое-то новое ограничение, которого не было в 1.5.

Проблема огромного класса и имеет много внутренних классов и внутренних внутренних классов, поэтому проблему трудно отследить (я уверен, что это один из внутренних классов). Излишне говорить, что в классе также нет тестов, поэтому его изменение требует особой осторожности и является трудоемким.

Итак, есть ли у кого-нибудь точная информация о 0x209 - что конкретно означает код?

РЕДАКТИРОВАТЬ:

Благодаря тому, что Арне подтолкнул нас в правильном направлении, мы смогли отследить проблему и обойти ее. Причина не совсем ясна, но теперь мы можем ее избежать.

Мы используем древний Даг Липакет util.concurrent в некоторых областях, потому что некоторые компоненты работают в средах, которые предоставляют только Java 1.1 (да, смеяться вполне нормально, я не против).

Этот же код (с использованием одновременных утилит) также используется в качестве небольшого компонента другого связанного программного обеспечения. Поскольку в коде Дуга использовались некоторые функции 1.2, мы также были вынуждены изменить некоторые части util.concurrent, чтобы сделать его 1.1 совместимым с пакетом коллекций Sun 1.1 с обратным портом (больше не могу найти ссылку на них). Каким-то образом это вызвало это своеобразное поведение компиляции Eclipse, которое происходит, когда мы меняем формат класса на Java 1.6. Это минимальный код, который вызывает проблему:

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());
    }
}

После того, как вы скомпилируете это с Eclipse (с компиляцией, установленной на 1.6, 1.5 работает нормально) и попытаетесь загрузить класс из 1.6 JRE Sun, проблема возникает. Обходной путь: вместо циклического перебора записей мы перебираем ключи и получаем значения внутри циклов с ключами.

Наши настройки здесь настолько экзотичны, что неудивительно, что никто больше не сталкивался с этим. Я наконец-то проверил наши скрипты сборки, и вот, у ant-script есть 1.6 source и target-settings. Так что, очевидно, это специфично для Eclipse.

EDIT2:

Я посмотрел ближе к сообщению об ошибке Sun, которое я связал здесь. Эта проблема также связана с com.sun.java.util.collections.Map.Entry. И это произошло с Sun Javac. Интересно.

Ответы на вопрос(1)

Ваш ответ на вопрос