Попытки реализовать базовый пример JavaPoet (см ниже) в классе Android ActivityWatcher от LeakCanary:Как получить ссылку на Modifier.PUBLIC, которые не могут быть применены в строителе в MethodBuilder MethodSpec для JavaPoet
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
Modifier.PUBLIC и Modifier.STATIC, а другой .addModifiers оператор производит ошибку Android Studio
addModifiers (javax.lang.model.element.modifier...) in Builder can not be applied to (int, int)
и следующие Gradle ошибка:
:Machine-android:compileDebugJava
C: \ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ ActivityWatcher.java: 58: ошибка: невозможно получить доступ Модификатор .addModifiers (Modifier.PUBLIC, Modifier.STATIC) ^ файл класса для javax.lang.model.element.Modifier не найден C: \ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ ActivityWatcher.java: 65: ошибка: метод addModifiers в классе Builder нельзя применять к заданным типам; .addModifiers (Modifier.PUBLIC, Modifier.FINAL) ^ required: Модификатор [] найдено: int, int Причина: varargs несоответствие; int не может быть преобразован в Модификатор C: \ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ ActivityWatcher.java: 73: ошибка: не удается получить доступ Filer javaFile.writeTo (System.out) ; ^ файл класса для javax.annotation.processing.Filer не найден C: \ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ ActivityWatcher.java: 172: ошибка: метод addModifiers в класс Builder не может применяться к заданным типам; .addModifiers (Modifier.PUBLIC, Modifier.STATIC) ^ required: Modifier [] found: int, int Причина: varargs несоответствие; int не может быть преобразован в Модификатор C: \ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ ActivityWatcher.java: 179: ошибка: метод addModifiers в классе Builder не может применяться к заданным типам; .addModifiers (Modifier.PUBLIC, Modifier.FINAL) ^ required: Модификатор [] найдено: int, int Причина: varargs несоответствие; int не может быть преобразован в Модификатор C: \ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ ActivityWatcher.java: 187: ошибка: не удается получить доступ к пути javaFile.writeTo (System.out) ; ^ файл класса для java.nio.file.Path не найден Примечание: C: \ AAAMachine \ Machine-master \ Machine-android \ src \ main \ java \ com \ bmp \ internal \ MachineInternals.java использует или переопределяет устаревший API. Примечание: перекомпиляция с -Xlint: устаревшие сведения. Примечание: некоторые сообщения были упрощены; перекомпилировать с -Xdiags: многословным, чтобы получить полную выходную 6 ошибок
FAILED
FAILURE: Строить неудачу с исключением.
Что пошло не так: Не удалось завершить выполнение задачи по ': Машина-андроид: compileDebugJava.
Compilation failed; see the compiler error output for details.
Try: Run с --stacktrace возможностью получения трассировки стека. Запустите с опцией --info или --debug, чтобы получить больше выходных данных журнала.
BUILD FAILED
Общее время: 6.881 сек
и вот ошибка из сообщений:
:machine-android:compileDebugJava
C: \ AAAmachine \ машинно-мастер \ машинно-андроида \ ЦСИ \ main \ java \ com \ bmp \ ActivityWatcher.java Ошибка: (58, 15) ошибка: не удается получить доступ к модификатору файл класса для javax.lang.model.element.Modifier не найден Ошибка: (65, 15) error: метод addModifiers в классе Builder не может применяться к заданным типам; Требуется: Модификатор [] найдено: int, int Причина: varargs несоответствие; int не может быть преобразован в Модификатор Ошибка: (73, 19) error: не удается получить доступ к Filer файл класса для javax.annotation.processing.Filer не найден Ошибка: (172, 15) error: метод addModifiers в классе Builder не может быть применен к заданным типам; Требуется: Модификатор [] найдено: int, int Причина: varargs несоответствие; int не может быть преобразован в модификатор Ошибка: (179, 15) error: метод addModifiers в классе Builder не может применяться к заданным типам; Требуется: Модификатор [] найдено: int, int Причина: varargs несоответствие; int не может быть преобразован в Модификатор Ошибка: (187, 19) error: не удается получить доступ к файлу класса для java.nio.file.Path не найден Примечание: C: \ AAAmachine \ machine-master \ machine-android \ src \ main \ java \ com \ bmp \ internal \ machineInternals.java использует или переопределяет устаревший API. Примечание: перекомпиляция с -Xlint: устаревшие сведения. Примечание: некоторые сообщения были упрощены; перекомпилировать с -Xdiags: verbose для получения полного вывода Ошибка: выполнение выполнено для задачи ': machine-android: compileDebugJava'.
Compilation failed; see the compiler error output for details. Information:BUILD FAILED Information:Total time: 6.881 secs Information:7 errors Information:0 warnings Information:See complete output in console
Вот суть исходного кода, используя простой пример из readme.md файла из JavaPoet:
package com.bmp;
импорт android.annotation.TargetApi; импорт android.app.Activity; импорт android.app.Application; import android.content.Context; импорт android.content.SharedPreferences; import android.os.Bundle; импорт android.preference.PreferenceManager; импорт android.util.Log; import android.view.ViewGroup;
импорт com.bmp.util.eventbus.FabricLogEvent; импорт com.squareup.javapoet.JavaFile; импорт com.squareup.javapoet.MethodSpec; import com.squareup.javapoet.TypeSpec;
импорт java.io.File; import java.io.FileWriter; import java.io.IOException; импорт java.lang.reflect.Модификатор;
импорт de.greenrobot.event.EventBus;
импорт статический android.os.Build.VERSION.SDK_INT; import static android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH; import static com.bmp.Preconditions.checkNotNull;
@TargetApi (ICE_CREAM_SANDWICH) публичный конечный класс ActivityWatcher {
государственной статической силы (приложение Application, RefWatcher refWatcher) installOnIcsPlus { если (SDK_INT < ICE_CREAM_SANDWICH) { // Если вам необходимо поддерживать Android < ICS, переопределить onDestroy() в вашей базовой деятельности. возвращение; } ActivityWatcher activityWatcher = new ActivityWatcher (приложение, refWatcher); activityWatcher.watchActivities();
MethodSpec main = MethodSpec.methodBuilder("main")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.returns(void.class)
.addParameter(String[].class, "args")
.addStatement("$T.out.println($S)", System.class, "Hello, JavaPoet!")
.build();
TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld")
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
.addMethod(main)
.build();
JavaFile javaFile = JavaFile.builder("com.bmp.helloworld", helloWorld)
.build();
try {
javaFile.writeTo(System.out);
} catch (IOException e) {
e.printStackTrace();
}
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter(new File("com.bmp.newclass.java"));
} catch (IOException e) {
e.printStackTrace();
}
}
Может ли это быть связано с именем физического файла для записи?
Есть ли способ скомпилировать это как модуль в рамках проекта Android в Android Studio или есть ли файл aar, который я мог бы использовать? –