Code Monkey home page Code Monkey logo

kotlin-coroutine-agent-exercise's Introduction

Агент и плагин для отладки корутин на языке Kotlin

Тестовое задание для летней практики JetBrains 2017.

Предварительные знания и инструменты

  1. 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

  2. Манипуляция байткодом через библиотеку ASM http://asm.ow2.org
    Введение здесь http://asm.ow2.org/doc/tutorial.html

  3. Написание 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

  4. Язык Kotlin https://kotlinlang.org
    Очень рекомендуется https://kotlinlang.org/docs/tutorials/koans.html

  5. Корутины в языке Kotlin https://github.com/Kotlin/kotlin-coroutines/blob/master/kotlin-coroutines-informal.md
    А также библиотека к ним https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md

  6. Любить и использовать IntelliJ IDEA (Community Edition) https://www.jetbrains.com/idea/
    Котлин поддерживается "из коробки"

  7. Работать с проектом на 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".

kotlin-coroutine-agent-exercise's People

Contributors

artemmukhin avatar elizarov avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.