KochevniKXXI /
Foodies
Тестовое задание для REQUEST
31/100 healthLoading repository data…
elizarov / repository
Тестовое задание для летней практики 2017: Агент и плагин для отладки корутин на языке Kotlin
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Тестовое задание для летней практики JetBrains 2017.
JVM bytecode https://docs.oracle.com/javase/specs/jvms/se8/html/index.html Можно начать отсюда http://www.javaworld.com/article/2077233/core-java/bytecode-basics.html И посмотреть сюда https://www.slideshare.net/CharlesNutter/javaone-2011-jvm-bytecode-for-dummies
Манипуляция байткодом через библиотеку ASM http://asm.ow2.org Введение здесь http://asm.ow2.org/doc/tutorial.html
Написание Java Agent-ов https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html Пример инструментации кода здесь https://www.captechconsulting.com/blogs/not-so-secret-java-agents---part-1
Язык Kotlin https://kotlinlang.org Очень рекомендуется https://kotlinlang.org/docs/tutorials/koans.html
Корутины в языке Kotlin https://github.com/Kotlin/kotlin-coroutines/blob/master/kotlin-coroutines-informal.md А также библиотека к ним https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md
Любить и использовать IntelliJ IDEA (Community Edition) https://www.jetbrains.com/idea/ Котлин поддерживается "из коробки"
Работать с проектом на Gradle https://gradle.org Работа с Котлином описана здесь https://kotlinlang.org/docs/reference/using-gradle.html
В этом репозитории содержится проект-затравка (открывать в IntelliJ IDEA):
Сборка и запуск приложения
gradlew runApp
При этом запускается код тестового приложения, которое выводит на консоль:
Agent started.
Started!
Done.
Первая строчка выводится внутри Agent, а остальные две внутри CoroutineExample.
Ваша задача модифицировать Agent так, чтобы все подгужаемые классы приложения трансформировались используя ASM.
При этом, внутри байткода CoroutineExample есть вот такой вызов:
INVOKESTATIC example/CoroutineExampleKt.test (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object;
Посмотреть байткод можно в IntelliJ перейдя на строку
test()вCoroutineExampleи сделав через Ctrl/Cmd-Shift-A акцию "Show Kotlin Bytecode"
В процессе трансформации ваш агент должен искать именно этот вызов (в любом загружаемом коде) и вставлять прямо перед ним вывод на экран строки "Test detected". В результате, при запуске приложения должно получиться:
Agent started.
Started!
Test detected
Done.
Обратите внимание, что при модификации тестового приложения (добавление более сложной логики, множественные вызовы test())
транформация должна продолжать перехватывать все вызовы test() и помечать их выводом на экран "Test detected".
Selected from shared topics, language and repository description—not editorial ratings.
KochevniKXXI /
Тестовое задание для REQUEST
31/100 healthKochevniKXXI /
Тестовое задание для Montekrist media
31/100 healthagent7799 /
Тестовое задание для курса ЦФТ Андроид разработка (Kotlin)
/100 healthritm1993 /
тестовое задание для андроид разработчика
49/100 healthyulmaso /
Тестовое задание для Контура
29/100 healthplumsoftware /
Это тестовое задание для "студия Секвения"
29/100 health