Java для JavaScript с использованием компилятора GWT

У меня написан код Java, который я хотел бы преобразовать в JavaScript. Интересно, возможно ли использовать компилятор GWT для компиляции упомянутого кода Java в код JavaScript , сохраняя все имена методов, переменных и параметров. Я попытался скомпилировать его с отключенной оптимизацией кода, используя -draftCompile, но имена методов искажены. Если компилятор GWT не может этого сделать, может ли какой-нибудь другой инструмент?

Обновление

Код Java будет зависеть только от эмулируемых классов GWT, поэтому компилятор GWT сможет его обработать.

Обновление 2

Этот метод Java:

public String method()

переведен на эту функцию JavaScript:

function com_client_T_$method__Lcom_client_T_2Ljava_lang_String_2()

используя параметры компилятора:

-style DETAILED
-optimize 0
-draftCompile

Так что имена не могут быть сохранены. Но есть ли способ контролировать, как они меняются?

Разъяснение

Скажем, например, у вас есть алгоритм сортировки, написанный на Java (или какая-то другая простая математическая утилита). Метод sort() принимает массив целых чисел. и возвращает эти целые числа в отсортированном массиве. Скажем, у меня есть приложения на Java и JavaScript. Я хочу написать этот метод один раз, в Java, запустить его через компилятор GWT и либо оставить имя метода неизменным, либо изменить его предсказуемым образом, чтобы я мог его обнаружить и узнать, как изменить его обратно на сортировку (). Затем я могу поместить этот код в мое приложение JavaScript и использовать его. Я также могу автоматически сгенерировать его, если версия Java изменится. У меня есть очень веские причины для этого, я понимаю концепции GWT на высоком уровне, я просто ищу ответ только на этот счет.

Заключение

Ответ на главный вопрос: НЕТ. Хотя имя метода может быть несколько сохранено, его тело нельзя использовать. Вызовы метода внутри него разбросаны по всему сгенерированному файлу, и поэтому их нельзя использовать в библиотеке JavaScript, которая была главной темой этой темы.

Ответы

Ответ 1

Хотя вы можете установить компилятор для вывода "симпатичного" кода, я предлагаю вам написать функции экспорта для классов, которые вы хотите вызвать из-за пределов вашего проекта GWT. Я верю, что где-то в документации GWT подробно описано, как это сделать, но я не смог найти его здесь, как только я только что создал.

class YourClass {
    public YourClass() {
        ...
    }

    public void yourMethod() {
        ...
    }

    public static YourClass create() {
        return new YourClass();
    }

    public final static native void export() /*-{
          $wnd.YourClass = function() {
              this.instance = new @your.package.name.YourClass::create()()
          }

          var _ = $wnd.YourClass.prototype;
          _.yourMethod = function() {[email protected]::yourMethod()()}
    }-*/;
}

ИЗМЕНИТЬ

Чтобы разработать, ваш код будет запутан как обычный, но благодаря функции экспорта вы можете легко ссылаться на эти функции извне. Вам не нужно переписывать что-либо из своего Java-класса в JavaScript. Вы только пишете ссылки в JavaScript, так что вы можете сделать это:

var myInstance = new YourClass();
myInstance.yourMethod();

Конечно, вы должны вызвать статический метод экспорта где-нибудь в вашем приложении GWT (скорее всего, в вашем EntryPoint), чтобы сделать эту работу.

Подробнее о ссылках на Java-методы из JavaScript: http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html#methods-fields

Ответ 2

Нет - это невозможно с компилятором GWT, поскольку компилятор GWT создан для создания оптимизированного и очень совершенного JavaScript из Java.

Большим преимуществом является то, что вы можете поддерживать свой проект в Java и компилировать его с помощью GWT на JavaScript. Поэтому нет необходимости помещать имена переменных и имена методов в результат JavaScript, так как все изменения и работа выполняются в JAVA-источниках.

Работа в JavaScript-выходе GWT просто не так проста и на самом деле очень много работы!

Обновление

По подсказке Дэвида, я нашел вариант компилятора стиль. Вы можете попробовать со следующими параметрами:

-style=PRETTY -optimize=0

Я понятия не имею, действительно ли это приведет к созданию "читаемого человеком" кода. Я думаю, что этого не произойдет, поскольку структура GWT все равно будет частью результирующего JavaScript и поэтому будет трудно внести изменения в результат JavaScript. Попробуйте и сообщите нам...

Ответ 3

Возможно, я могу ответить на ваш второй вопрос: "Если компилятор GWT не может этого сделать, может ли другой инструмент?"

Я использую Java2Script уже довольно давно, а также по довольно крупным проектам. Интеграция с родным JavaScript прекрасна, имена сохраняются, и через какое-то время можно даже скомпилировать сгенерированный JavaScript (в отладчике браузера) с исходным кодом Java с минимальными усилиями.

Удо

Ответ 4

Вы можете "экспортировать" свою функцию, написав встроенный JavaScript, который ее вызывает, и есть инструмент gwt-exporter, который делает это автоматически, когда вы комментируете классы и методы с помощью @Export и тому подобное. Дополнительная информация: https://code.google.com/p/gwtchismes/wiki/Tutorial_ExportingGwtLibrariesToJavascript_en