Подтвердить что ты не робот

Как сжимать scala библиотеку swing с помощью Proguard?

Я пытался сжимать и обфускать мою программу Scala/Java с помощью Proguard. Хотя я использовал только scala -library.jar, все было в порядке, но когда я добавляю scala -swing.jar в свои банки, я получаю следующее:

Warning: scala.swing.ComboBox: can't find referenced class scala.swing.ComboBox$selection
Warning: scala.swing.ListView: can't find referenced class scala.swing.ListView$selection
Warning: scala.swing.ListView$selection$: can't find referenced class scala.swing.ListView$selection$indices
Warning: scala.swing.ListView$selection$: can't find referenced class scala.swing.ListView$selection$items
Warning: scala.swing.ListView$selection$$anon$7: can't find referenced class scala.swing.ListView$selection
Warning: scala.swing.ListView$selection$Indices: can't find referenced class scala.swing.ListView$selection
Warning: scala.swing.ListView$selection$indices$: can't find referenced class scala.swing.ListView$selection$indices
Warning: scala.swing.ListView$selection$indices$: can't find referenced class scala.swing.ListView$selection$indices
Warning: scala.swing.ListView$selection$indices$: can't find referenced class scala.swing.ListView$selection
Warning: scala.swing.ListView$selection$items$: can't find referenced class scala.swing.ListView$selection

Если я смотрю в банку, я вижу, что таких файлов действительно нет - вместо scala.swing.ComboBox$selection.class есть scala.swing.ComboBox$selection$.class. Вручную переименование не делает трюк - тогда он жалуется, что файл содержит класс с другим именем.

Итак, являются ли эти незаконные ссылки в scala -swing.jar? Или ошибка в Proguard?

Вы можете предложить обходное решение?

EDIT: я использую Scala 2.9.0.1 и Proguard 4.6

EDIT2: Использование Scala 2.9.1. Финальные банки не помогли.

4b9b3361

Ответ 1

Он выглядит как ошибка в компиляторе scala. Например, файл класса scala/swing/ComboBox.class содержит следующий метод:

public final scala.swing.ComboBox$selection$ selection()

Внутренне подпись метода представляется следующим образом:

()Lscala/swing/ComboBox$selection$;

Это выглядит нормально. Однако этот метод также имеет атрибут Signature для отслеживания стираемых дженериков:

()Lscala/swing/ComboBox<TA;>.selection;

Как вы можете видеть, подписи не хватает $в конце. В ProGuard вы можете обойти проблему, указав

-dontwarn scala.swing.**