Full Code of Kotlin/anko for AI

master 37893764c0f2 cached
396 files
2.8 MB
754.4k tokens
23 symbols
1 requests
Download .txt
Showing preview only (3,008K chars total). Download the full file or copy to clipboard to get everything.
Repository: Kotlin/anko
Branch: master
Commit: 37893764c0f2
Files: 396
Total size: 2.8 MB

Directory structure:
gitextract_fw5cbrlj/

├── .gitignore
├── .idea/
│   └── runConfigurations/
│       └── Android_Studio.xml
├── CHANGELOG.md
├── GOODBYE.md
├── LICENSE
├── README.md
├── anko/
│   ├── idea-plugin/
│   │   ├── attrs/
│   │   │   ├── build.gradle
│   │   │   └── src/
│   │   │       └── org/
│   │   │           └── jetbrains/
│   │   │               └── kotlin/
│   │   │                   └── android/
│   │   │                       └── Attrs.kt
│   │   ├── build.gradle
│   │   ├── idea-runner/
│   │   │   └── build.gradle
│   │   ├── intentions/
│   │   │   ├── build.gradle
│   │   │   └── src/
│   │   │       └── org/
│   │   │           └── jetbrains/
│   │   │               └── anko/
│   │   │                   └── idea/
│   │   │                       └── intentions/
│   │   │                           ├── AnkoIntention.kt
│   │   │                           ├── FindViewByIdIntention.kt
│   │   │                           ├── ReplaceColorGrayOpaqueIntention.kt
│   │   │                           └── ToastMakeTextShowIntention.kt
│   │   ├── plugin-classpath/
│   │   │   └── build.gradle
│   │   ├── preview/
│   │   │   ├── build.gradle
│   │   │   ├── resources/
│   │   │   │   ├── META-INF/
│   │   │   │   │   └── plugin.xml
│   │   │   │   └── intentionDescriptions/
│   │   │   │       ├── FindViewByIdIntention/
│   │   │   │       │   ├── after.kt.template
│   │   │   │       │   ├── before.kt.template
│   │   │   │       │   └── description.html
│   │   │   │       ├── ReplaceColorGrayOpaqueIntention/
│   │   │   │       │   ├── after.kt.template
│   │   │   │       │   ├── before.kt.template
│   │   │   │       │   └── description.html
│   │   │   │       └── ToastMakeTextShowIntention/
│   │   │   │           ├── after.kt.template
│   │   │   │           ├── before.kt.template
│   │   │   │           └── description.html
│   │   │   └── src/
│   │   │       └── org/
│   │   │           └── jetbrains/
│   │   │               └── kotlin/
│   │   │                   └── android/
│   │   │                       └── dslpreview/
│   │   │                           ├── AnkoNlPreviewManager.kt
│   │   │                           ├── AnkoViewLoaderExtension.kt
│   │   │                           ├── DslPreviewClassResolver.kt
│   │   │                           ├── LayoutPsiFile.kt
│   │   │                           ├── PreviewClassDescription.kt
│   │   │                           ├── SourceFileModificationTracker.kt
│   │   │                           └── UpdateActivityNameTask.kt
│   │   └── xml-converter/
│   │       ├── build.gradle
│   │       ├── resources/
│   │       │   ├── attrs.json
│   │       │   └── views.json
│   │       ├── src/
│   │       │   └── org/
│   │       │       └── jetbrains/
│   │       │           └── kotlin/
│   │       │               └── android/
│   │       │                   └── xmlconverter/
│   │       │                       ├── AttributeOptimizer.kt
│   │       │                       ├── AttributeParser.kt
│   │       │                       ├── ConvertAction.kt
│   │       │                       ├── LayoutAttributeRenderer.kt
│   │       │                       ├── Util.kt
│   │       │                       ├── ViewAttributeRenderer.kt
│   │       │                       └── XmlConverter.kt
│   │       ├── test/
│   │       │   └── org/
│   │       │       └── jetbrains/
│   │       │           └── kotlin/
│   │       │               └── android/
│   │       │                   └── xmlconverter/
│   │       │                       ├── BaseXmlConverterTest.java
│   │       │                       └── XmlConverterTest.kt
│   │       └── testData/
│   │           ├── attributes/
│   │           │   ├── layout.kt
│   │           │   └── layout.xml
│   │           ├── dimensions/
│   │           │   ├── layout.kt
│   │           │   └── layout.xml
│   │           ├── linearLayout/
│   │           │   ├── layout.kt
│   │           │   └── layout.xml
│   │           ├── relativeLayout/
│   │           │   ├── layout.kt
│   │           │   └── layout.xml
│   │           └── simple/
│   │               ├── layout.kt
│   │               └── layout.xml
│   ├── library/
│   │   ├── generated/
│   │   │   ├── anko/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           └── AndroidManifest.xml
│   │   │   ├── appcompat-v7/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               └── Views.kt
│   │   │   ├── appcompat-v7-commons/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           └── AndroidManifest.xml
│   │   │   ├── appcompat-v7-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── appcompat-v7-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── cardview-v7/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               └── Views.kt
│   │   │   ├── common/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           └── AndroidManifest.xml
│   │   │   ├── commons/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           └── AndroidManifest.xml
│   │   │   ├── constraint-layout/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               └── Views.kt
│   │   │   ├── coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── bg.kt
│   │   │   │               └── weakReferenceSupport.kt
│   │   │   ├── design/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               └── Views.kt
│   │   │   ├── design-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── design-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── gridlayout-v7/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               └── Views.kt
│   │   │   ├── percent/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               └── Views.kt
│   │   │   ├── recyclerview-v7/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               └── Views.kt
│   │   │   ├── recyclerview-v7-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── recyclerview-v7-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── sdk15/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               ├── Services.kt
│   │   │   │               └── Views.kt
│   │   │   ├── sdk15-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── sdk15-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── sdk19/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               ├── Services.kt
│   │   │   │               └── Views.kt
│   │   │   ├── sdk19-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── sdk19-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── sdk21/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               ├── Services.kt
│   │   │   │               └── Views.kt
│   │   │   ├── sdk21-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── sdk21-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── sdk23/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               ├── Services.kt
│   │   │   │               └── Views.kt
│   │   │   ├── sdk23-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── sdk23-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── sdk25/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               ├── Services.kt
│   │   │   │               └── Views.kt
│   │   │   ├── sdk25-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── sdk25-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── sdk27/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               ├── Services.kt
│   │   │   │               └── Views.kt
│   │   │   ├── sdk27-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── sdk27-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── sdk28/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               ├── Services.kt
│   │   │   │               └── Views.kt
│   │   │   ├── sdk28-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── sdk28-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── sqlite/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── SqlParserHelpers.kt
│   │   │   ├── support-v4/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Listeners.kt
│   │   │   │               └── Views.kt
│   │   │   └── support-v4-commons/
│   │   │       ├── build.gradle
│   │   │       └── src/
│   │   │           └── main/
│   │   │               └── AndroidManifest.xml
│   │   ├── generator/
│   │   │   ├── build.gradle
│   │   │   ├── src/
│   │   │   │   └── org/
│   │   │   │       └── jetbrains/
│   │   │   │           └── android/
│   │   │   │               └── anko/
│   │   │   │                   ├── ClassProcessor.kt
│   │   │   │                   ├── annotations/
│   │   │   │                   │   ├── AnnotationManager.kt
│   │   │   │                   │   └── annotationProviders.kt
│   │   │   │                   ├── artifact/
│   │   │   │                   │   └── Artifact.kt
│   │   │   │                   ├── config/
│   │   │   │                   │   ├── AnkoConfiguration.kt
│   │   │   │                   │   ├── AnkoFile.kt
│   │   │   │                   │   ├── ArtifactType.kt
│   │   │   │                   │   ├── ConfigurationKey.kt
│   │   │   │                   │   ├── DefaultAnkoConfiguration.kt
│   │   │   │                   │   ├── GeneratorContext.kt
│   │   │   │                   │   ├── Logger.kt
│   │   │   │                   │   ├── Props.kt
│   │   │   │                   │   └── configurationKeys.kt
│   │   │   │                   ├── generator/
│   │   │   │                   │   ├── GenerationState.kt
│   │   │   │                   │   ├── LayoutGenerator.kt
│   │   │   │                   │   ├── ListenerGenerator.kt
│   │   │   │                   │   ├── PropertyGenerator.kt
│   │   │   │                   │   ├── ServiceGenerator.kt
│   │   │   │                   │   ├── dslElements.kt
│   │   │   │                   │   ├── layoutParamsUtils.kt
│   │   │   │                   │   └── viewClassGenerators.kt
│   │   │   │                   ├── main.kt
│   │   │   │                   ├── render/
│   │   │   │                   │   ├── LayoutRenderer.kt
│   │   │   │                   │   ├── ListenerRenderer.kt
│   │   │   │                   │   ├── PropertyRenderer.kt
│   │   │   │                   │   ├── RenderFacade.kt
│   │   │   │                   │   ├── ServiceRenderer.kt
│   │   │   │                   │   ├── SqlParserHelperRenderer.kt
│   │   │   │                   │   ├── viewConstructorUtils.kt
│   │   │   │                   │   └── viewRenderers.kt
│   │   │   │                   ├── sources/
│   │   │   │                   │   ├── SourceManager.kt
│   │   │   │                   │   └── sourceProviders.kt
│   │   │   │                   ├── templates/
│   │   │   │                   │   ├── JtwigTemplateProvider.kt
│   │   │   │                   │   ├── MustacheTemplateProvider.kt
│   │   │   │                   │   └── TemplateManager.kt
│   │   │   │                   ├── utils/
│   │   │   │                   │   ├── Buffer.kt
│   │   │   │                   │   ├── ClassInfo.kt
│   │   │   │                   │   ├── ClassTree.kt
│   │   │   │                   │   ├── ClassTreeUtils.kt
│   │   │   │                   │   ├── ImportList.kt
│   │   │   │                   │   ├── KMethod.kt
│   │   │   │                   │   ├── KType.kt
│   │   │   │                   │   ├── KVariable.kt
│   │   │   │                   │   ├── MethodInfo.kt
│   │   │   │                   │   ├── Property.kt
│   │   │   │                   │   ├── ReflectionUtils.kt
│   │   │   │                   │   ├── SignatureParser.kt
│   │   │   │                   │   ├── Types.kt
│   │   │   │                   │   ├── stringUtils.kt
│   │   │   │                   │   └── utils.kt
│   │   │   │                   └── writer/
│   │   │   │                       ├── AbstractWriter.kt
│   │   │   │                       ├── GeneratorWriter.kt
│   │   │   │                       └── VerifyWriter.kt
│   │   │   └── test/
│   │   │       └── org/
│   │   │           └── jetbrains/
│   │   │               └── android/
│   │   │                   └── anko/
│   │   │                       └── ClassTreeTest.java
│   │   ├── library.gradle
│   │   ├── robolectricTests/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── local.properties
│   │   │   └── src/
│   │   │       ├── main/
│   │   │       │   ├── AndroidManifest.xml
│   │   │       │   └── java/
│   │   │       │       ├── AndroidLayoutParamsTestActivity.kt
│   │   │       │       ├── AndroidLayoutsTestActivity.kt
│   │   │       │       ├── AndroidListenerHelpersTestActivity.kt
│   │   │       │       ├── AndroidMultiMethodListenersActivity.kt
│   │   │       │       ├── AndroidPropertiesTestActivity.kt
│   │   │       │       ├── AndroidSimpleTestActivity.kt
│   │   │       │       ├── AndroidWidgetTestActivity.kt
│   │   │       │       └── README.md
│   │   │       └── test/
│   │   │           └── java/
│   │   │               ├── AnkoLoggerTest.kt
│   │   │               ├── AnkoSQliteTest.kt
│   │   │               ├── AttemptTest.kt
│   │   │               ├── BuildSpannedTest.kt
│   │   │               ├── BundleOfTest.kt
│   │   │               ├── ChildrenSequenceTest.kt
│   │   │               ├── ClassParserTest.kt
│   │   │               ├── CollectionsTest.kt
│   │   │               ├── CreateIntentTest.kt
│   │   │               ├── DialogsTest.kt
│   │   │               ├── FindViewTest.kt
│   │   │               ├── IntentForTest.kt
│   │   │               ├── RelativeLayoutHelpersTest.kt
│   │   │               ├── ServiceTest.kt
│   │   │               ├── SimpleTest.kt
│   │   │               ├── SparseArraysTest.kt
│   │   │               └── WithArgumentsTest.kt
│   │   ├── static/
│   │   │   ├── appcompatV7/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── SupportAlertBuilder.kt
│   │   │   ├── commons/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── AnkoContext.kt
│   │   │   │               ├── Async.kt
│   │   │   │               ├── ContextUtils.kt
│   │   │   │               ├── Custom.kt
│   │   │   │               ├── Deprecated.kt
│   │   │   │               ├── Dimensions.kt
│   │   │   │               ├── Helpers.kt
│   │   │   │               ├── Intents.kt
│   │   │   │               ├── Internals.kt
│   │   │   │               ├── Logging.kt
│   │   │   │               ├── RelativeLayoutLayoutParamsHelpers.kt
│   │   │   │               ├── SharedPreferences.kt
│   │   │   │               ├── Theme.kt
│   │   │   │               ├── Ui.kt
│   │   │   │               ├── buildSpanned.kt
│   │   │   │               ├── collections/
│   │   │   │               │   ├── Arrays.kt
│   │   │   │               │   ├── Collections.kt
│   │   │   │               │   └── SparseArrays.kt
│   │   │   │               ├── dialogs/
│   │   │   │               │   ├── AlertBuilder.kt
│   │   │   │               │   ├── AlertDialogBuilder.kt
│   │   │   │               │   ├── AndroidAlertBuilder.kt
│   │   │   │               │   ├── AndroidDialogs.kt
│   │   │   │               │   ├── AndroidSelectors.kt
│   │   │   │               │   ├── Dialogs.kt
│   │   │   │               │   ├── Selectors.kt
│   │   │   │               │   └── Toasts.kt
│   │   │   │               ├── menuItemsSequences.kt
│   │   │   │               └── viewChildrenSequences.kt
│   │   │   ├── constraint-layout/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ConstraintLayout.kt
│   │   │   ├── design/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Snackbar.kt
│   │   │   ├── platform/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── CustomLayoutProperties.kt
│   │   │   │               ├── CustomServices.kt
│   │   │   │               ├── CustomViewProperties.kt
│   │   │   │               ├── CustomViews.kt
│   │   │   │               ├── InputConstraints.kt
│   │   │   │               └── Menus.kt
│   │   │   ├── sqlite/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── ClassParser.kt
│   │   │   │               ├── Database.kt
│   │   │   │               ├── SelectQueryBuilder.kt
│   │   │   │               ├── SqlParsers.kt
│   │   │   │               ├── UpdateQueryBuilder.kt
│   │   │   │               ├── org/
│   │   │   │               │   └── jetbrains/
│   │   │   │               │       └── anko/
│   │   │   │               │           └── db/
│   │   │   │               │               └── JavaSqliteUtils.java
│   │   │   │               └── sqlTypes.kt
│   │   │   └── supportV4/
│   │   │       ├── build.gradle
│   │   │       └── src/
│   │   │           └── main/
│   │   │               ├── AndroidManifest.xml
│   │   │               └── java/
│   │   │                   ├── Support.kt
│   │   │                   ├── SupportAsync.kt
│   │   │                   ├── SupportContextUtils.kt
│   │   │                   ├── SupportDialogs.kt
│   │   │                   ├── SupportDimensions.kt
│   │   │                   └── SupportIntents.kt
│   │   ├── stubs/
│   │   │   ├── build.gradle
│   │   │   └── src/
│   │   │       └── main/
│   │   │           ├── AndroidManifest.xml
│   │   │           └── java/
│   │   │               └── Stubs.kt
│   │   └── testUtils/
│   │       ├── build.gradle
│   │       └── src/
│   │           ├── com/
│   │           │   └── intellij/
│   │           │       └── rt/
│   │           │           └── execution/
│   │           │               └── junit/
│   │           │                   ├── FileComparisonFailure.java
│   │           │                   └── KnownException.kt
│   │           └── org/
│   │               └── jetbrains/
│   │                   └── anko/
│   │                       └── test/
│   │                           └── testUtils.kt
│   └── props/
│       ├── annotations/
│       │   └── android/
│       │       ├── support/
│       │       │   └── v7/
│       │       │       └── widget/
│       │       │           └── annotations.xml
│       │       ├── view/
│       │       │   └── annotations.xml
│       │       └── widget/
│       │           └── annotations.xml
│       ├── configuration.json
│       ├── excluded_methods.txt
│       ├── excluded_properties.txt
│       ├── helper_constructors.txt
│       ├── imports_properties.txt
│       ├── imports_sqliteparserhelpers.txt
│       ├── imports_views.txt
│       ├── kotlin-android-sdk-annotations-1.0.0.jar
│       ├── properties_without_getters.txt
│       └── templates/
│           ├── complex_listener.twig
│           ├── complex_listener_coroutines.twig
│           ├── layout.twig
│           ├── services.twig
│           ├── simple_listener.mustache
│           ├── simple_listener_coroutines.twig
│           ├── sql_parser_helpers.twig
│           └── view.mustache
├── build.gradle
├── download_android_sdk.xml
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
├── update_dependencies.xml
└── update_dependencies_idea.xml

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
/dependencies/
/ideaSDK/
build/
.DS_Store
*.iml
.gradle
/out
.idea/*
!.idea/runConfigurations
local.properties


================================================
FILE: .idea/runConfigurations/Android_Studio.xml
================================================
<component name="ProjectRunConfigurationManager">
    <configuration default="false" name="Android Studio" type="Application" factoryName="Application" singleton="true">
        <log_file path="$PROJECT_DIR$/ideaSDK/system-idea/log/idea.log" checked="true" skipped="true" show_all="false" alias="idea.log" />
        <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
        <option name="MAIN_CLASS_NAME" value="com.intellij.idea.Main" />
        <option name="VM_PARAMETERS" value="-Xmx1250m -XX:ReservedCodeCacheSize=240m -XX:+HeapDumpOnOutOfMemoryError -ea -Didea.is.internal=true -Didea.debug.mode=true -Didea.system.path=../system-idea -Didea.config.path=../config-idea -Dapple.laf.useScreenMenuBar=true -Dapple.awt.graphics.UseQuartz=true -Dsun.io.useCanonCaches=false -Dplugin.path=$PROJECT_DIR$/anko/idea-plugin/preview/build/libs/preview-all.jar -Dkotlin.internal.mode.enabled=true -Didea.additional.classpath=../idea-kotlin-runtime/kotlin-runtime.jar,../idea-kotlin-runtime/kotlin-reflect.jar -Didea.platform.prefix=AndroidStudio" />
        <option name="PROGRAM_PARAMETERS" value="" />
        <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/ideaSDK/bin" />
        <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
        <option name="ALTERNATIVE_JRE_PATH" />
        <option name="ENABLE_SWING_INSPECTOR" value="false" />
        <option name="ENV_VARIABLES" />
        <option name="PASS_PARENT_ENVS" value="true" />
        <module name="idea-runner" />
        <envs />
        <RunnerSettings RunnerId="Debug">
            <option name="DEBUG_PORT" value="" />
            <option name="TRANSPORT" value="0" />
            <option name="LOCAL" value="true" />
        </RunnerSettings>
        <RunnerSettings RunnerId="JavaRebel">
            <option name="bootstrapPath" />
            <option name="jrebelArgs" value="" />
            <option name="loggingEnabled" value="false" />
            <option name="useBootstrapDefaults" value="true" />
        </RunnerSettings>
        <RunnerSettings RunnerId="JavaRebel Debug">
            <option name="bootstrapPath" />
            <option name="debugPort" value="" />
            <option name="jrebelArgs" value="" />
            <option name="loggingEnabled" value="false" />
            <option name="transport" value="0" />
            <option name="useBootstrapDefaults" value="true" />
            <option name="DEBUG_PORT" value="" />
            <option name="TRANSPORT" value="0" />
            <option name="LOCAL" value="true" />
        </RunnerSettings>
        <RunnerSettings RunnerId="Profile " />
        <RunnerSettings RunnerId="Run" />
        <ConfigurationWrapper RunnerId="Debug" />
        <ConfigurationWrapper RunnerId="Profile " />
        <ConfigurationWrapper RunnerId="Run" />
        <method>
            <option name="Make" enabled="false" />
            <option name="Gradle.BeforeRunTask" enabled="true" tasks=":ide:build :ide:preview:shadowJar" externalProjectPath="$PROJECT_DIR$/anko/idea-plugin" vmOptions="" scriptParameters="" />
        </method>
    </configuration>
</component>

================================================
FILE: CHANGELOG.md
================================================
## Change Log

### Anko 0.10.5 *(2018-04-28)*

- [DSL for ConstraintLayout](https://github.com/Kotlin/anko/wiki/ConstraintLayout)
- Preview plugin compatibility with Android Studio 3.1 C6

### Anko 0.10.3 *(2017-11-22)*

#### Bugfixes
- Anko support plugin compatibility with Kotlin 1.1.60+
- Fix Xml to Dsl converter ([#370](https://github.com/Kotlin/anko/issues/370))
- `lparams` for `CollapsingToolbarLayout`, now returns correct LayoutParams ([#275](https://github.com/Kotlin/anko/issues/275), [#269](https://github.com/Kotlin/anko/issues/269))
- `Context.clipboardManager` now returns new `ClipboardManager` instead of deprecated one ([#180](https://github.com/Kotlin/anko/issues/180))
- Generate layout wrapper for `CardView` ([#269](https://github.com/Kotlin/anko/issues/269), [#357](https://github.com/Kotlin/anko/issues/357))
- Fix ClassParser's Boolean parser when type is Long ([#464](https://github.com/Kotlin/anko/issues/464))

#### Breaking Changes
- Removed Dsl for classes from `android.support.design.internal.*` as they shouldn't be used outside of support library

#### Other Changes
- `TextInputEditText` added to anko-design ([#205](https://github.com/Kotlin/anko/issues/205))
- Anko commons dialog extensions now accept `CharSequence` instead of `String` ([#422](https://github.com/Kotlin/anko/issues/422))
- Add start and end rules to RelativeLayout.LayoutParams extensions ([#497](https://github.com/Kotlin/anko/pull/497))
- Add `allCaps` and `ems` properties to TextView ([#459](https://github.com/Kotlin/anko/pull/459))
- Add snackbar helpers with indefinite duration [(#454](https://github.com/Kotlin/anko/pull/454))
- Allow nullable values in `createIntent` and `startActivity` ([#465](https://github.com/Kotlin/anko/pull/465))
- Add extensions for `View::backgroundColorResource` and `TextView::textColorResource` ([#254](https://github.com/Kotlin/anko/pull/254))
- Return `ComponentName` from `startService` methods ([#435](https://github.com/Kotlin/anko/issues/435))
- Allow alerts to be cancelable ([#405](https://github.com/Kotlin/anko/pull/405))
- Add intent helpers for stopping services ([#509](https://github.com/Kotlin/anko/pull/509))
- Return toast object in toast helper functions ([#512](https://github.com/Kotlin/anko/pull/512))

### Anko 0.10.2 *(2017-10-17)*

- Fixed Anko Support IDE plugin compatibility with Android Studio 3.0 RC1
- `Fragment.indeterminateProgressDialog` now shows indeterminate progress dialog instead of classic ([#487](https://github.com/Kotlin/anko/pull/487))
- Added methods for creating and dropping a index for SQLiteDatabase ([#472](https://github.com/Kotlin/anko/pull/472))

### Anko 0.10.1 *(2017-05-31)*

#### Bugfixes

- Fix assertion in the Anko Support IDE plugin ([#387](https://github.com/Kotlin/anko/issues/387));
- Update `kotlinx.coroutines.android` dependency (the old one fails to resolve in Android Studio 3.0) )[#381](https://github.com/Kotlin/anko/issues/381));
- Fix inconsistency between `hasNext()` and `next()` in `childrenRecursiveSequence()` ([#388](https://github.com/Kotlin/anko/pull/388)).

### Anko 0.10 *(2017-05-17)*

#### 🐧 Notable changes:

- Coroutines and `DslMarker` annotation support;
- Anko Support IDE plugin updated for Android Studio 2.4.

#### Breaking changes:

- `DslMarker` annotation support (calling `lparams()` inside View blocks is finally forbidden);
- DSL listeners moved to `anko-<platformName>-listeners` artifacts (e.g. `anko-sdk25-listeners`);
- View blocks with the `theme` parameter renamed to `themed…()` to avoid disambiguation;
- Removed `AnkoLogger(clazz: KClass<*>)` and `AnkoLogger(obj: Any)`.

#### New API:

- `anko-<platformName>-coroutines` (e.g. `anko-sdk25-coroutines`) artifacts with the new listener helpers with coroutines support;
- `bg()` function that executes code in background (wrapper on top of [kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines));
- `AlertBuilder` interface with *core* and *appcompat* implementations. `AlertDialogBuilder` is deprecated;
- `Snackbar` helpers #203;
- `Dialog.find()` method #351;
- `foreach()` extensions for `SparseArray` #255;
- Reified version for `AnkoLogger` (`AnkoLogger<MyClass>()`);
- `isError` and `hasValue` to `AttemptResult`.

#### Other changes:

- Anko Support IDE plugin upated in order to support Android Studio 2.4;
- Added meta-artifact `org.jetbrains.anko:anko`;
- Added *Anko Commons* artifacts for Android support libraries (`anko-support-v4-commons`, `anko-appcompat-v7-commons`) #158;
- New Android SDK target: `sdk-25`;
- Updated Android Support library dependencies;
- `anko-common` artifact renamed to `anko-commons` to reflect the naming changes. `anko-common` is deprecated;
- `ClassParser` now accepts all primitive types #320;
- Synthetic properties (such as `act` or `ctx`) are now `inline`;
- `lparams` functions are now `inline` #338;
- Removed `TextView.enabled` generated property #245;
- Accessing setter-only property values is now forbidden.

#### Bugfixes:

- Fix `NoSuchMethodError` on accessing `act` property from the support Fragment #311;
- Fix compatibility with Proguard #235;
- Require the relative view `id` to be set in `RelativeView` helpers #363.

### Anko 0.10 Beta 2 *(2017-03-22)*

#### Breaking changes:

- DSL listeners moved to `anko-<platformName>-listeners` (e.g. `anko-sdk15-listeners`) artifacts;
- The custom `async()` function introduced in 0.10.0-beta1 was removed (use `async()` from [kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines));
- `AnkoLogger(clazz: KClass<*>)` and `AnkoLogger(obj: Any)` functions are removed;

#### Other changes:

- `anko-<platformName>-coroutines` (e.g. `anko-sdk15-coroutines`) artifacts with the new listener helpers with coroutines support;
- `lparams` functions are now `inline` #338;
- `bg()` function that executes code in a background thread and returns `Deferred<T>`;
- `AnkoLogger` now has the reified version: `AnkoLogger<MyClass>()`;

### Anko 0.10 Beta 1 *(2017-03-06)*

**Anko 0.10 requires Kotlin 1.1.**

#### Breaking changes:

- View DSL functions that accept the `theme` parameter are renamed to `themed…()` to avoid disambiguation;
- `DslMarker` support (`lparams` inside the View lambda are now forbidden);

#### Other changes:

- Add `anko-coroutines` artifact with the Kotlin 1.1 coroutines support (`async` / `bg`);
- New Android SDK target: `sdk-25`;
- Android Support library dependencies updated;
- `AlertBuilder` interface with core and app-compat implementations. `AlertDialogBuilder` is deprecated;
- `ClassParser` now accepts all primitive types #320;
- New artifacts: `anko-support-v4-common` and `anko-appcompat-v7-common` (with basic helpers, without the DSL functionality) #158;
- Synthetic properties (such as `act` or `ctx`) are now `inline`;
- `TextView.enabled` generated property is removed #245;
- Accessing setter-only property values is forbidden;
- SAM View listener setter functions are now `inline`;
- Add `isError` and `hasValue` to `AttemptResult`;
- Fix `NoSuchMethodError` on accessing `act` property from the support Fragment #311.

### Anko 0.9.1 *(2016-12-14)*

- Allow to use `AnkoLogger` as an instance #262;
- `FOREIGN_KEY` now returns `Pair<String, SqlType>` #258 #219;
- Fix `SparseArray` as sequence returns list which doesn't match its size #243 #240;
- Allow ManagedSQLiteOpenHelper to accept null for database name #228;
- Fix ProGuard warning (can't find referenced method 'int getThemeResId()' in library class android.view.ContextThemeWrapper). #206;
- Add `LayoutParams.baselineOf()` #213;
- Allow nullable values in `intentFor` #211;
- Migrate Anko build to Gradle.

### Anko 0.9 *(2016-06-07)*

- Update to Kotlin 1.0.2 and IDEA 2016.1 #161 #177;
- Support styles in DSL #16 #143;
- Add KDoc comments for most of Anko utilities #168;
- Rename `async()` to `doAsync()`, `onUiThread()` to `runOnUiThread()` for `Fragment` and `Context`;
- Add `AnkoAsyncContext.onComplete()` #181;
- `uiThread()` now returns `false` if code was not executed;
- Ability to add an exception handler to `doAsync()` #182;
- Add `newTask` parameter to `browse()` #186;
- Add `sendSMS()` #171;
- Add `makeStyle()` #132;
- Add `Activity.contentView` property #157;
- Add `horizontalProgressBar()` #23;
- Add `doFromSdk()` and `doIfSdk()` #118;
- Add `alignStart()` and `alignEnd()` to `RelativeLayout.LayoutParams` extensions;
- `AlertDialogBuilder`: make the `dialog` property public #140;
- Add `okButton()`, `yesButton()`, `cancelButton()`, `noButton()` to `AlertDialogBuilder`;
- Add nullable values to SQLite helpers #154;
- Add `editText()` with input constraints #25;
- Add `attempt()` #182;
- Change semantics of `Intent.clearTask()` and similar functions, now add flags, not set (replace old) #173;
- Rename `forEachReversed` to `forEachReversedByIndex()`;
- Rename `style()` to `applyRecursively()`;
- Allow the database to be pluggable for query builders #187;
- Fix `NOT_NULL` SQL type modifier #175;
- Fix `startActivityForResult` called on wrong object (for Fragments) #76;
- Fix `include` doesn't set LayoutParams from the XML #149;
- `View.backgroundDrawable` is nullable now #169;
- `classParser` has always not accessible constructor #136 #145.

### Anko 0.8.3 *(2016-03-02)*

Built for Kotlin 1.0.

* Remove deprecated `android.support.v4.Fragment.addView()` function.

### Anko 0.8.2 *(2016-02-04)*

Built for Kotlin 1.0 RC.

* `forEachChild()`, `forEachChildWithIndex()`, `firstChild()`, `firstChildOrNull()` are inlined now [#134](https://github.com/Kotlin/anko/pull/134);
* `Int.withAlpha` [#125](https://github.com/Kotlin/anko/pull/125);
* `ContextWrapper` is now supported by `AnkoContext`;
* Anko library size and method count was slightly reduced.

### Anko 0.8.1 *(2015-12-09)*

Built for Koltin Beta 3 (1.0.0-beta-3595).

* SQLite helpers are moved to `anko-sqlite` artifact;
* Fixed "Implicit setContentView in onCreate doesn't work in 0.8" [#114](https://github.com/Kotlin/anko/issues/114);
* Fixed "Anko DSL Preview plugin 0.8 crashes" [#115](https://github.com/Kotlin/anko/issues/115);
* Add intention: `0xffefefef.toInt()` → `0xef.gray.opaque`;
* Add `forEachChild()`, `firstChild()`, `firstChildOrNull()` helpers.

### Anko 0.8 *(2015-12-01)*

Built for Kotlin Beta 2 (1.0.0-beta-2423).

* `AnkoComponent` interface for writing reusable components;
* New DSL preview plugin: much more fast and stable :rocket:;
* Add `TextView.gravity` [#96](https://github.com/JetBrains/anko/issues/96) and `ImageView.imageResource` [#102](https://github.com/JetBrains/anko/issues/102) properties;
* `Cancel` is the default negative button name [#112](https://github.com/JetBrains/anko/issues/112);
* Fix `AnkoLogger.wtf`;
* Remove deprecated `__dslAddView` functions.

### Anko 0.7.3 *(2015-11-02)*

Built for Kotlin **Beta Candidate** (`1.0.0-beta-1103`).

### Anko 0.7.2 *(2015-10-22)*

Built for Kotlin **Beta Candidate**.

### Anko 0.7.1 *(2015-10-01)*

Built for Kotlin M14 (0.14.449).

 * [#86](https://github.com/JetBrains/anko/pull/86) New: Allow getting MenuItems as a Sequence.
 * New: Added `findOptional<T>` for `View`, `Activity` and `Fragment`.
 * Fix: An exception in DSL Preview plugin in Android Studio 1.4.

### Anko 0.7 *(2015-09-17)*

Built for Kotlin M13 (0.13.1513).

 * Anko is now split to several components:
    * `anko-common` contains some basic helpers (such as `async`, `toast` or SQLite parsers). Does not contain any of view DSL).
    * `anko-sdk15` (also `19`, `21`, `23`) contains DSL bindings for the corresponding Android SDK version.
    * `anko-support-v4`, `anko-appcompat-v7` and others - additional DSL bindings for the Android support library widgets.
 * [#78](https://github.com/JetBrains/anko/issues/78) Changed `async` logic.
 * Most of extension properties for Views are removed because Kotlin now supports this seamlessly.
 * [#74](https://github.com/JetBrains/anko/issues/74) New: Ability to iterate children views lazily using sequences.
 * [#77](https://github.com/JetBrains/anko/issues/77) New: Extension functions for the optimized Android collections and arrays.
 * `layoutParams` property is renamed to `lparams` (due to the clash with `View.getLayoutParams`).

### Anko 0.6.3 *(2015-07-10)*

Built for Kotlin M12.1 (0.12.613).

 * New: Tinted (appcompat) widgets support.
 * Deprecated extension properties for `RSSurfaceView`, `RSTextureView`, `WebView` are removed.
 * Intentions for `Toast.makeText(...).show()` and `findViewById()` in IDEA plugin.
 * [#54](https://github.com/JetBrains/anko/issues/54) Fix: LayoutParams resolving for some widgets.
 * [#60](https://github.com/JetBrains/anko/issues/60) Support more types in `intentFor`.
 * [#65](https://github.com/JetBrains/anko/issues/65) Fix: `AnkoLogger` can't now be used as a delegate.
 * Fix: `InterfaceWorkarounds` fields.
 * DSL Preview plugin is updated to Robolectric 3.0 rc3.
 * DSL generator refactoring.

### Anko 0.6.2 *(2015-05-29)*

Built for Kotlin M12 (0.12.200).

 * Sensible listener argument names.
 * Some listener arguments and properties are now not-null.
 * New: Added `bundleOf` function.
 * New: Added `getBuilder` in `AlertDialogBuilder`.
 * [#42](https://github.com/JetBrains/anko/pull/42) New: Added `Context.startService` extension.
 * [#46](https://github.com/JetBrains/anko/pull/46) Fix: `IllegalArgumentException` in `AnkoLogger`.
 * [#44](https://github.com/JetBrains/anko/pull/44) Fix: Wrong return type for `include`.
 * [#42](https://github.com/JetBrains/anko/pull/42) Fix: `INTEGER` `SqlType` instead of `INT`.
 * [#31](https://github.com/JetBrains/anko/issues/31) Fix: Added `withArguments` for `android.support.v4.Fragment`.
 * [#45](https://github.com/JetBrains/anko/issues/45) Fix: `SingleColumnParser` and `ScalarColumnParser`.
 * [#38](https://github.com/JetBrains/anko/issues/38) Fix: `SQLiteDatabase.dropTable` signature.

### Anko 0.6.1 *(2015-05-06)*

Built for Kotlin M11 (0.11.91.4).

 * [#30](https://github.com/JetBrains/anko/issues/30) Fix: Arguments in `intentFor`.
 * [#29](https://github.com/JetBrains/anko/issues/29) New: `android.support.v4.app.Fragment.withArguments` function.
 * [#26](https://github.com/JetBrains/anko/issues/26) New: More extension properties (including `emptyView` for `AdapterView`).
 * [#21](https://github.com/JetBrains/anko/issues/21) Fix: Supported String resources with `progressDialog` and `indeterminateProgressDialog`.

### Anko 0.6 *(2015-04-29)*

Built for Kotlin M11 (0.11.91.2).

 * **Breaking:** package name change (kotlinx.android.anko → org.jetbrains.anko).
 * **Breaking:** [new syntax](https://github.com/JetBrains/anko#listeners) for multi-method listeners.
 * New: Supported Configuration qualifiers.
 * New: Custom views creation.
 * New: Supported `appcompat.v7` views and properties.
 * Top-level DSL functions for simple views are removed.
 * New: `startActivityForResult`, `dimen` extension functions.
 * New: `uiThread` property for `Context` and `Fragment`.

### Anko 0.5 *(2015-04-02)*

Built for Koltin M11 (0.11.91.1).

 * Rebranding: Koan → Anko! :sparkles:
 * **Preview plugin** is available for IntelliJ IDEA and Android Studio.


================================================
FILE: GOODBYE.md
================================================
# Discontinuing Anko

Over the last few months, we have received quite a few questions from our users regarding the future of Anko. So today, we are going to make things clear and officially deprecate the library.

## Why are you deprecating Anko?

Anko was born as a type-safe DSL for building Android layouts. It not only allowed creating layouts in a type-safe way, but it made the layouts more adaptable, dynamic, reusable, and also performant, as there was no need for expensive layout inflation.

During the evolution of Anko, it became clear that not only the layout part of the Android framework could benefit from providing Kotlin extensions. That is why we created Anko Commons, a toolbox of utility functions and classes for different parts of the Android framework.

While Anko was quite popular among Kotlin users, we have to admit that the experience was not 100% perfect. Until recently, Android View APIs were highly optimized for inflation, and sometimes it wasn't possible to set some of the attributes programmatically. As a result, the DSL had to rely on hacks or workarounds. Also, it was non-trivial to emulate the reflective approach of widget loading needed for supporting AppCompat. We didn't have enough resources to fix all corner cases in a timely manner.

However, things have changed substantially during the last few years. Google officially supported Kotlin, and later even made Kotlin the preferred language for Android application development. Thanks to JetPack, an extensive set of libraries, the rough edges of the SDK were smoothed over.

Anko is a successful project, and it has played its role in establishing a better Android developer experience with Kotlin. However, there are modern alternatives today, and we feel it's time to say goodbye to Anko.

## What should I use instead of Anko?

### Layout DSL
- Jetpack Compose. A reactive View DSL for Kotlin, backed by Google.
- Splitties – [Views DSL](https://github.com/LouisCAD/Splitties/tree/master/modules/views-dsl). An extensible View DSL which resembles Anko.
### Generic utilities
- [Android KTX](https://developer.android.com/kotlin/ktx). A set of Kotlin extensions for different purposes, backed by Google.
- [Splitties](https://github.com/LouisCAD/Splitties). A lot of micro-libraries for all occasions.
### SQLite helpers
- [Room](https://developer.android.com/topic/libraries/architecture/room). An annotation-based framework for SQLite database access, backed by Google.
- [SQLDelight](https://github.com/cashapp/sqldelight) A type-safe API generator for SQL queries.

* * *

We would like to thank you for your support throughout these years. If you have any questions, please contact us on Slack or via the forum. You can find the links on our [community overview](https://kotlinlang.org/community/) page.


================================================
FILE: LICENSE
================================================
Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} {name of copyright owner}

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.



================================================
FILE: README.md
================================================
[![obsolete JetBrains project](https://jb.gg/badges/obsolete.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub)
[![Download](https://api.bintray.com/packages/jetbrains/anko/anko/images/download.svg) ](https://bintray.com/jetbrains/anko/anko/_latestVersion)
[![GitHub license](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg?style=flat)](https://www.apache.org/licenses/LICENSE-2.0)

<img src="doc/logo.png" alt="Anko logo" height="101" width="220" />

:warning: Anko is deprecated. Please see [this page](/GOODBYE.md) for more information.

* * *

Anko is a [Kotlin](https://www.kotlinlang.org/) library which makes Android application development faster and easier. It makes your code clean and easy to read, and lets you forget about rough edges of the Android SDK for Java.

Anko consists of several parts:

* *Anko Commons*: a lightweight library full of helpers for intents, dialogs, logging and so on;
* *Anko Layouts*: a fast and type-safe way to write dynamic Android layouts;
* *Anko SQLite*: a query DSL and parser collection for Android SQLite;
* *Anko Coroutines*: utilities based on the [kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) library.

## Anko Commons

*Anko Commons* is a "toolbox" for Kotlin Android developer. The library contains a lot of helpers for Android SDK, including, but not limited to:

* Intents ([wiki](https://github.com/Kotlin/anko/wiki/Anko-Commons-–-Intents));
* Dialogs and toasts ([wiki](https://github.com/Kotlin/anko/wiki/Anko-Commons-–-Dialogs));
* Logging ([wiki](https://github.com/Kotlin/anko/wiki/Anko-Commons-–-Logging));
* Resources and dimensions ([wiki](https://github.com/Kotlin/anko/wiki/Anko-Commons-–-Misc)).

## Anko Layouts ([wiki](https://github.com/Kotlin/anko/wiki/Anko-Layouts))

*Anko Layouts* is a DSL for writing dynamic Android layouts. Here is a simple UI written with Anko DSL:

```kotlin
verticalLayout {
    val name = editText()
    button("Say Hello") {
        onClick { toast("Hello, ${name.text}!") }
    }
}
```

The code above creates a button inside a `LinearLayout` and attaches an `OnClickListener` to that button. Moreover, `onClick` accepts a [`suspend` lambda](https://kotlinlang.org/docs/reference/coroutines.html), so you can write your asynchronous code right inside the listener!

Note that this is the complete layout code. No XML is required!

Anko has a [DSL for ConstraintLayout](https://github.com/Kotlin/anko/wiki/ConstraintLayout) since v0.10.4

<img src="doc/helloworld.png" alt="Hello world" height="90" width="373" />

There is also a [plugin](https://github.com/Kotlin/anko/wiki/Anko-Layouts#anko-support-plugin) for Android Studio that supports previewing Anko DSL layouts.

## Anko SQLite ([wiki](https://github.com/Kotlin/anko/wiki/Anko-SQLite))

Have you ever been tired of parsing SQLite query results using Android cursors? *Anko SQLite* provides lots of helpers to simplify working with SQLite databases.

For example, here is how you can fetch the list of users with a particular name:

```kotlin
fun getUsers(db: ManagedSQLiteOpenHelper): List<User> = db.use {
    db.select("Users")
            .whereSimple("family_name = ?", "John")
            .doExec()
            .parseList(UserParser)
}
```

## Anko Coroutines ([wiki](https://github.com/Kotlin/anko/wiki/Anko-Coroutines))

*Anko Coroutines* is based on the [`kotlinx.coroutines`](https://github.com/kotlin/kotlinx.coroutines) library and provides:

* [`bg()`](https://github.com/Kotlin/anko/wiki/Anko-Coroutines#bg) function that executes your code in a common pool.
* [`asReference()`](https://github.com/Kotlin/anko/wiki/Anko-Coroutines#asreference) function which creates a weak reference wrapper. By default, a coroutine holds references to captured objects until it is finished or canceled. If your asynchronous framework does not support cancellation, the values you use inside the asynchronous block can be leaked. `asReference()` protects you from this.

## Using Anko

### Gradle-based project

Anko has a meta-dependency which plugs in all available features (including Commons, Layouts, SQLite) into your project at once:

```gradle
dependencies {
    implementation "org.jetbrains.anko:anko:$anko_version"
}
```
Make sure that you have the ```$anko_version``` settled in your gradle file at the project level:

```
ext.anko_version='0.10.8'
```

If you only need some of the features, you can reference any of Anko's parts:

```gradle
dependencies {
    // Anko Commons
    implementation "org.jetbrains.anko:anko-commons:$anko_version"

    // Anko Layouts
    implementation "org.jetbrains.anko:anko-sdk25:$anko_version" // sdk15, sdk19, sdk21, sdk23 are also available
    implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version"

    // Coroutine listeners for Anko Layouts
    implementation "org.jetbrains.anko:anko-sdk25-coroutines:$anko_version"
    implementation "org.jetbrains.anko:anko-appcompat-v7-coroutines:$anko_version"

    // Anko SQLite
    implementation "org.jetbrains.anko:anko-sqlite:$anko_version"
}
```

There are also a number of artifacts for the Android support libraries:

```gradle
dependencies {
    // Appcompat-v7 (only Anko Commons)
    implementation "org.jetbrains.anko:anko-appcompat-v7-commons:$anko_version"

    // Appcompat-v7 (Anko Layouts)
    implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version"
    implementation "org.jetbrains.anko:anko-coroutines:$anko_version"

    // CardView-v7
    implementation "org.jetbrains.anko:anko-cardview-v7:$anko_version"

    // Design
    implementation "org.jetbrains.anko:anko-design:$anko_version"
    implementation "org.jetbrains.anko:anko-design-coroutines:$anko_version"

    // GridLayout-v7
    implementation "org.jetbrains.anko:anko-gridlayout-v7:$anko_version"

    // Percent
    implementation "org.jetbrains.anko:anko-percent:$anko_version"

    // RecyclerView-v7
    implementation "org.jetbrains.anko:anko-recyclerview-v7:$anko_version"
    implementation "org.jetbrains.anko:anko-recyclerview-v7-coroutines:$anko_version"

    // Support-v4 (only Anko Commons)
    implementation "org.jetbrains.anko:anko-support-v4-commons:$anko_version"

    // Support-v4 (Anko Layouts)
    implementation "org.jetbrains.anko:anko-support-v4:$anko_version"

    // ConstraintLayout
    implementation "org.jetbrains.anko:anko-constraint-layout:$anko_version"
}
```

There is an [example project](https://github.com/kotlin/anko-example) showing how to include Anko library into your Android Gradle project.

### IntelliJ IDEA project

If your project is not based on Gradle, just attach the required JARs from the [jcenter repository](https://jcenter.bintray.com/org/jetbrains/anko/) as the library dependencies and that's it.

## Contributing

The best way to submit a patch is to send us a [pull request](https://help.github.com/articles/about-pull-requests/). Before submitting the pull request, make sure all existing tests are passing, and add the new test if it is required.

If you want to add new functionality, please file a new *proposal* issue first to make sure that it is not in progress already. If you have any questions, feel free to create a *question* issue.

Instructions for building Anko are available in the [Wiki](https://github.com/Kotlin/anko/wiki/Building-Anko).


================================================
FILE: anko/idea-plugin/attrs/build.gradle
================================================
apply plugin: 'kotlin'

sourceSets {
    main {
        java.srcDirs = ['src']
        kotlin.srcDirs = ['src']
    }
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile project(':ide:plugin-classpath')
}

================================================
FILE: anko/idea-plugin/attrs/src/org/jetbrains/kotlin/android/Attrs.kt
================================================
/*
 * Copyright 2016 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.jetbrains.kotlin.android.attrs

import java.io.File

data class NameValue(
        val name: String = "",
        val value: String = "")

data class Attr(
        val name: String = "",
        val format: List<String> = emptyList(),
        val flags: List<NameValue>? = null,
        val enum: List<NameValue>? = null)

val NoAttr: Attr = Attr()

data class Styleable(
        val name: String = "",
        val attrs: List<Attr> = emptyList())

data class Attrs(
        val free: List<Attr> = emptyList(),
        val styleables: Map<String, Styleable> = emptyMap())

fun readResource(filename: String): String {
    return Attrs::class.java.classLoader.getResourceAsStream(filename)?.reader()?.readText()
            ?: File(filename).readText()
}

================================================
FILE: anko/idea-plugin/build.gradle
================================================
subprojects {
    apply plugin: 'kotlin'

    sourceSets {
        main {
            java.srcDirs = ['src', 'resources']
            kotlin.srcDirs = ['src']
            resources.srcDirs = ['resources']
        }
    }

    dependencies {
        compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    }
}

================================================
FILE: anko/idea-plugin/idea-runner/build.gradle
================================================
apply plugin: 'java'

dependencies {
    compile fileTree(dir: new File(project.rootDir, "ideaSDK/lib"), include: ['*.jar'])
}

================================================
FILE: anko/idea-plugin/intentions/build.gradle
================================================
apply plugin: 'kotlin'

sourceSets {
    main {
        java.srcDirs = ['src']
        kotlin.srcDirs = ['src']
    }
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile project(':ide:plugin-classpath')
}

================================================
FILE: anko/idea-plugin/intentions/src/org/jetbrains/anko/idea/intentions/AnkoIntention.kt
================================================
package org.jetbrains.anko.idea.intentions

import com.intellij.openapi.editor.Editor
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference
import org.jetbrains.kotlin.idea.imports.importableFqName
import org.jetbrains.kotlin.idea.intentions.SelfTargetingIntention
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.*
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.kotlin.resolve.descriptorUtil.resolveTopLevelClass
import org.jetbrains.kotlin.types.lowerIfFlexible

abstract class AnkoIntention<TElement : KtElement>(
        elementType: Class<TElement>,
        text: String,
        familyName: String = text
) : SelfTargetingIntention<TElement>(elementType, text, familyName) {

    final override fun isApplicableTo(element: TElement, caretOffset: Int): Boolean {
        val file = element.containingFile as? KtFile ?: return false
        val moduleDescriptor = file.findModuleDescriptor()
        moduleDescriptor.resolveTopLevelClass(ANKO_INTERNALS_FQNAME, NoLookupLocation.FROM_IDE) ?: return false
        return isApplicable(element, caretOffset)
    }

    abstract fun isApplicable(element: TElement, caretOffset: Int): Boolean

    private fun isTypeOf(descriptor: ClassifierDescriptor, vararg fqName: String): Boolean {
        val resolvedName = DescriptorUtils.getFqNameSafe(descriptor).asString()
        return fqName.any { it == resolvedName }
    }

    protected fun KtCallExpression.isValueParameterTypeOf(
            parameterIndex: Int,
            resolvedCall: ResolvedCall<*>?,
            vararg fqName: String
    ): Boolean {
        val ctxArgumentDescriptor = (resolvedCall ?: getResolvedCall(analyze()))?.resultingDescriptor
                ?.valueParameters?.get(parameterIndex)?.type?.lowerIfFlexible()
                ?.constructor?.declarationDescriptor ?: return false
        return isTypeOf(ctxArgumentDescriptor, *fqName)
    }

    protected fun KtCallExpression.isReceiverParameterTypeOf(
            resolvedCall: ResolvedCall<*>?,
            vararg fqName: String
    ): Boolean {
        val receiverDescriptor = (resolvedCall ?: getResolvedCall(analyze()))?.resultingDescriptor
                ?.dispatchReceiverParameter?.type?.lowerIfFlexible()
                ?.constructor?.declarationDescriptor ?: return false
        return isTypeOf(receiverDescriptor, *fqName)
    }

    protected val KtDotQualifiedExpression.receiver: KtExpression?
        get() = receiverExpression

    protected val KtDotQualifiedExpression.selector: KtExpression?
        get() = selectorExpression

    protected val KtBinaryExpressionWithTypeRHS.operation: KtSimpleNameExpression
        get() = operationReference

    protected inline fun <reified E : PsiElement> PsiElement?.require(name: String? = null, sub: E.() -> Boolean): Boolean {
        return require<E>(name) && (this as E).sub()
    }

    inline fun require(cond: Boolean, sub: () -> Boolean): Boolean {
        if (cond) sub()
        return cond
    }

    protected inline fun <reified E : PsiElement> PsiElement?.require(name: String? = null): Boolean {
        if (this !is E) return false
        if (name != null && name != this.text) return false
        return true
    }

    protected inline fun PsiElement?.requireCall(
            functionName: String? = null,
            argCount: Int? = null,
            sub: KtCallExpression.() -> Boolean
    ): Boolean {
        return requireCall(functionName, argCount) && (this as KtCallExpression).sub()
    }

    @Suppress("NOTHING_TO_INLINE")
    protected inline fun PsiElement?.requireCall(functionName: String? = null, argCount: Int? = null): Boolean {
        if (this !is KtCallExpression) return false
        if (functionName != null && functionName != calleeExpression?.text) return false
        if (argCount != null && argCount != valueArguments.size) return false
        return true
    }

    abstract fun replaceWith(element: TElement, psiFactory: KtPsiFactory): NewElement?

    final override fun applyTo(element: TElement, editor: Editor?) {
        val project = editor?.project ?: return
        val file = element.containingFile as? KtFile ?: return
        val moduleDescriptor = file.findModuleDescriptor()
        val resolutionFacade = file.getResolutionFacade()

        val psiFactory = KtPsiFactory(project)
        val (newElement, fqNamesToImport) = replaceWith(element, psiFactory) ?: return

        val newExpression = newElement

        ImportInsertHelper.getInstance(project).apply {
            fqNamesToImport
                    .flatMap {
                        val fqName = FqName(if ('.' in it) it else "$ANKO_PACKAGE$it")
                        resolutionFacade.resolveImportReference(moduleDescriptor, fqName)
                    }
                    .forEach { if (it.importableFqName != null) importDescriptor(file, it) }
        }

        element.replace(newExpression)
    }

    private companion object {
        private val ANKO_PACKAGE = "org.jetbrains.anko."
        private val ANKO_INTERNALS_FQNAME = FqName("org.jetbrains.anko.internals.AnkoInternals")
    }
}

object FqNames {
    val ACTIVITY_FQNAME = "android.app.Activity"
    val CONTEXT_FQNAME = "android.content.Context"
    val VIEW_FQNAME = "android.view.View"
}

class NewElement(val element: KtExpression, vararg val newNames: String) {
    operator fun component1() = element
    operator fun component2() = newNames //fqName or name in anko package
}

abstract class A {
    open fun test(a: CharSequence) {}
}

class B : A() {
    override fun test(a: CharSequence) {}
}

================================================
FILE: anko/idea-plugin/intentions/src/org/jetbrains/anko/idea/intentions/FindViewByIdIntention.kt
================================================
package org.jetbrains.anko.idea.intentions

import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall

class FindViewByIdIntention : AnkoIntention<KtExpression>(
        KtExpression::class.java,
        "Simplify findViewById() with Anko"
) {
    override fun isApplicable(element: KtExpression, caretOffset: Int): Boolean {
        fun PsiElement?.requireFindViewByIdCall() = requireCall(FIND_VIEW_BY_ID, 1) {
            val resolvedCall = getResolvedCall(analyze())
            isValueParameterTypeOf(0, resolvedCall, "kotlin.Int")
                    && isReceiverParameterTypeOf(resolvedCall, FqNames.ACTIVITY_FQNAME, FqNames.VIEW_FQNAME)
        }

        return element.require<KtBinaryExpressionWithTypeRHS>() {
            operation.require<KtSimpleNameExpression>("as")
            && (left.requireFindViewByIdCall() || left.require<KtDotQualifiedExpression> {
                selector.requireFindViewByIdCall()
            })
        }
    }

    override fun replaceWith(element: KtExpression, psiFactory: KtPsiFactory): NewElement? {
        fun KtCallExpression.createElement(type: String, receiver: String? = null): NewElement {
            val id = valueArguments[0].text
            val receiverWithDot = if (receiver == null) "" else "$receiver."
            val newExpression = psiFactory.createExpression("${receiverWithDot}find<$type>($id)")
            return NewElement(newExpression, "find")
        }

        element.require<KtBinaryExpressionWithTypeRHS>() {
            val type = right?.text ?: return null

            left.requireCall(FIND_VIEW_BY_ID) {
                return createElement(type)
            }
            left.require<KtDotQualifiedExpression> {
                selector.requireCall(FIND_VIEW_BY_ID) {
                    return createElement(type, receiver?.text)
                }
            }
        }
        return null
    }

    private companion object {
        val FIND_VIEW_BY_ID = "findViewById"
    }

}


================================================
FILE: anko/idea-plugin/intentions/src/org/jetbrains/anko/idea/intentions/ReplaceColorGrayOpaqueIntention.kt
================================================
package org.jetbrains.anko.idea.intentions

import org.jetbrains.kotlin.psi.*

class ReplaceColorGrayOpaqueIntention : AnkoIntention<KtExpression>(
        KtExpression::class.java,
        "Simplify color numeric literal with Anko"
) {
    override fun isApplicable(element: KtExpression, caretOffset: Int): Boolean {
        return element.require<KtDotQualifiedExpression> {
            receiver.require<KtConstantExpression> { text.matches(COLOR_REGEX) } && selector.requireCall("toInt", 0)
        } || element.require<KtConstantExpression> {
            text.matches(COLOR_REGEX) && (this != (parent as? KtDotQualifiedExpression)?.receiver)
        }
    }

    override fun replaceWith(element: KtExpression, psiFactory: KtPsiFactory): NewElement? {
        fun createNewElement(colorText: String): NewElement? {
            val color = ARGB(colorText)

            if (color.isOpaque) {
                return if (color.isTransparent) {
                    NewElement(psiFactory.createExpression("Color.TRANSPARENT"), ANDROID_GRAPHICS_COLOR)
                } else if (color.color in COLORS) {
                    NewElement(psiFactory.createExpression("Color.${COLORS[color.color]}"), ANDROID_GRAPHICS_COLOR)
                } else if (color.isGray) {
                    NewElement(psiFactory.createExpression(color.getGrayOpaque()), GRAY, OPAQUE)
                } else {
                    return NewElement(psiFactory.createExpression(color.getOpaque()), OPAQUE)
                }
            }
            return null
        }

        element.require<KtDotQualifiedExpression> {
            receiver.require<KtConstantExpression> { text.matches(COLOR_REGEX) } && selector.requireCall("toInt", 0) {
                return createNewElement(receiver!!.text)
            }
        } || element.require<KtConstantExpression> {
            require(text.matches(COLOR_REGEX) && (this != (parent as? KtDotQualifiedExpression)?.receiver)) {
                return createNewElement(text)
            }
        }

        return null
    }

    private data class ARGB(val color: String, val a: String, val r: String, val g: String, val b: String) {
        @JvmField val A = a.toUpperCase()
        @JvmField val R = r.toUpperCase()
        @JvmField val G = g.toUpperCase()
        @JvmField val B = b.toUpperCase()

        constructor(color: String) : this(color.drop(2).toUpperCase(), color.substring(2, 4), color.substring(4, 6),
                                          color.substring(6, 8), color.substring(8, 10))

        val isGray: Boolean
            get() = R == G && G == B

        val isTransparent: Boolean
            get() = A == "00"

        val isOpaque: Boolean
            get() = A == "FF"

        fun getGrayOpaque() = "0x$r.gray.opaque"
        fun getOpaque() = "0x$r$g$b.opaque"
    }

    private companion object {
        val COLOR_REGEX = "^0x[0-9A-Fa-f]{8}$".toRegex()
        val GRAY = "gray"
        val OPAQUE = "opaque"
        val ANDROID_GRAPHICS_COLOR = "android.graphics.Color"

        val COLORS = mapOf(
                "FFFFFFFF" to "WHITE",
                "FF000000" to "BLACK",
                "FF888888" to "GRAY",
                "FFCCCCCC" to "LTGRAY",
                "FFFF0000" to "RED",
                "FF00FF00" to "GREEN",
                "FF0000FF" to "BLUE",
                "FFFFFF00" to "YELLOW",
                "FF00FFFF" to "CYAN",
                "FFFF00FF" to "MAGENTA")
    }
}

================================================
FILE: anko/idea-plugin/intentions/src/org/jetbrains/anko/idea/intentions/ToastMakeTextShowIntention.kt
================================================
/*
 * Copyright 2010-2015 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.jetbrains.anko.idea.intentions

import org.jetbrains.kotlin.psi.*

class ToastMakeTextShowIntention : AnkoIntention<KtExpression>(
        KtExpression::class.java,
        "Simplify Toast.makeText().show() with Anko"
) {

    override fun isApplicable(element: KtExpression, caretOffset: Int): Boolean {
        return element.require<KtDotQualifiedExpression> {
            receiver.require<KtDotQualifiedExpression> {
                receiver.require<KtReferenceExpression>("Toast")
                && selector.requireCall("makeText", 3) {
                    isLongToast() != null && isValueParameterTypeOf(0, null, FqNames.CONTEXT_FQNAME)
                }
            }
            && selector.requireCall("show", 0)
        }
    }

    private fun KtCallExpression.isLongToast(): Boolean? {
        return when (valueArguments[2].text) {
            "Toast.LENGTH_SHORT", "LENGTH_SHORT" -> false
            "Toast.LENGTH_LONG", "LENGTH_LONG" -> true
            else -> null
        }
    }

    override fun replaceWith(element: KtExpression, psiFactory: KtPsiFactory): NewElement? {
        element.require<KtDotQualifiedExpression> {
            receiver.require<KtDotQualifiedExpression> {
                selector.requireCall("makeText") {
                    val args = valueArguments
                    val ctxArg = args[0].text
                    val textArg = args[1].text

                    val funName = if (isLongToast()!!) "longToast" else "toast"
                    val receiver = if (ctxArg == "this") "" else "$ctxArg."

                    val newExpression = psiFactory.createExpression("$receiver$funName($textArg)")
                    return NewElement(newExpression, funName)
                }
            }
        }
        return null
    }

}


================================================
FILE: anko/idea-plugin/plugin-classpath/build.gradle
================================================
apply plugin: 'java'

dependencies {
    compile fileTree(dir: new File(project.rootDir, "ideaSDK/lib"), include: ['*.jar'])
    compile fileTree(dir: new File(project.rootDir, "ideaSDK/plugins/android/lib"), include: ['*.jar'])
    compile fileTree(dir: new File(project.rootDir, "ideaSDK/plugins/Kotlin/lib"), include: ['kotlin-plugin.jar'])
}

================================================
FILE: anko/idea-plugin/preview/build.gradle
================================================
apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'kotlin'

sourceSets {
    main {
        java.srcDirs = ['src']
        kotlin.srcDirs = ['src']
    }
}

configurations {
    shadow
    compile.extendsFrom shadow
}

dependencies {
    compile project(':ide:plugin-classpath')

    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    shadow "org.jetbrains.kotlinx:kotlinx.dom:$kotlinx_dom_version"

    shadow(project(':ide:attrs')) {
        transitive = false
    }
    shadow(project(':ide:intentions')) {
        transitive = false
    }
    shadow(project(':ide:xml-converter')) {
        transitive = false
    }
}

shadowJar {
    configurations = [project.configurations.shadow]
}

================================================
FILE: anko/idea-plugin/preview/resources/META-INF/plugin.xml
================================================
<idea-plugin>
    <id>org.jetbrains.kotlin.android.dsl</id>
    <name>Anko Support</name>
    <description>Anko Android library support.</description>
    <version>0.10.8</version>
    <vendor url="https://www.jetbrains.com">JetBrains s.r.o.</vendor>

    <idea-version since-build="171.1" until-build="183.*"/>

    <depends>org.jetbrains.kotlin</depends>
    <depends>org.jetbrains.android</depends>

    <actions>
        <action id="XmlConvertAction" class="org.jetbrains.kotlin.android.xmlconverter.ConvertAction"
                text="Convert to Anko Layouts DSL" description="Convert XML layout to Anko Layouts code (Kotlin)">
            <add-to-group group-id="CodeMenu" anchor="last"/>
        </action>
    </actions>

    <extensions defaultExtensionNs="com.intellij">
        <psi.treeChangePreprocessor
                implementation="org.jetbrains.kotlin.android.dslpreview.SourceFileModificationTracker"/>

        <intentionAction>
            <className>org.jetbrains.anko.idea.intentions.ToastMakeTextShowIntention</className>
            <category>Anko</category>
        </intentionAction>

        <intentionAction>
            <className>org.jetbrains.anko.idea.intentions.FindViewByIdIntention</className>
            <category>Anko</category>
        </intentionAction>

        <intentionAction>
            <className>org.jetbrains.anko.idea.intentions.ReplaceColorGrayOpaqueIntention</className>
            <category>Anko</category>
        </intentionAction>
    </extensions>

    <extensions defaultExtensionNs="org.jetbrains.android.uipreview">
        <viewLoaderExtension implementation="org.jetbrains.kotlin.android.dslpreview.AnkoViewLoaderExtension"/>
    </extensions>

    <project-components>
        <component>
            <implementation-class>org.jetbrains.kotlin.android.dslpreview.AnkoNlPreviewManager</implementation-class>
            <skipForDefaultProject/>
            <headless-implementation-class/>
        </component>
    </project-components>
</idea-plugin>

================================================
FILE: anko/idea-plugin/preview/resources/intentionDescriptions/FindViewByIdIntention/after.kt.template
================================================
find<TextView>(R.id.name)

================================================
FILE: anko/idea-plugin/preview/resources/intentionDescriptions/FindViewByIdIntention/before.kt.template
================================================
findViewById(R.id.name) as TextView

================================================
FILE: anko/idea-plugin/preview/resources/intentionDescriptions/FindViewByIdIntention/description.html
================================================
<html>
<body>
This intention replaces 'findViewById() as T' method call with 'find<T>' that is available in Anko.
</body>
</html>

================================================
FILE: anko/idea-plugin/preview/resources/intentionDescriptions/ReplaceColorGrayOpaqueIntention/after.kt.template
================================================
0xCC.gray.opaque

================================================
FILE: anko/idea-plugin/preview/resources/intentionDescriptions/ReplaceColorGrayOpaqueIntention/before.kt.template
================================================
0xFFCCCCCC.toInt()

================================================
FILE: anko/idea-plugin/preview/resources/intentionDescriptions/ReplaceColorGrayOpaqueIntention/description.html
================================================
<html>
<body>
This intention replaces numeric literals representing Android colors with ones that use Anko `gray` and `opaque` extension properties.
</body>
</html>

================================================
FILE: anko/idea-plugin/preview/resources/intentionDescriptions/ToastMakeTextShowIntention/after.kt.template
================================================
toast("Message")

================================================
FILE: anko/idea-plugin/preview/resources/intentionDescriptions/ToastMakeTextShowIntention/before.kt.template
================================================
Toast.makeText(this, "Message", Toast.LENGTH_SHORT).show()

================================================
FILE: anko/idea-plugin/preview/resources/intentionDescriptions/ToastMakeTextShowIntention/description.html
================================================
<html>
<body>
This intention replaces 'Toast.makeText(ctx, text, length).show()' method call with 'toast(text)' or 'longToast(text)' that is available in Anko.
</body>
</html>

================================================
FILE: anko/idea-plugin/preview/src/org/jetbrains/kotlin/android/dslpreview/AnkoNlPreviewManager.kt
================================================
package org.jetbrains.kotlin.android.dslpreview

import com.android.tools.idea.common.model.NlModel
import com.android.tools.idea.gradle.project.GradleProjectInfo
import com.android.tools.idea.gradle.project.build.invoker.GradleBuildInvoker
import com.android.tools.idea.project.AndroidProjectInfo
import com.android.tools.idea.uibuilder.editor.NlPreviewForm
import com.android.tools.idea.uibuilder.editor.NlPreviewManager
import com.intellij.ide.highlighter.XmlFileType
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.fileEditor.TextEditor
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleUtilCore
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.ComboBox
import com.intellij.openapi.util.Computable
import com.intellij.openapi.wm.ToolWindow
import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiFile
import com.intellij.psi.PsiFileFactory
import com.intellij.psi.xml.XmlFile
import com.intellij.util.Alarm
import org.jetbrains.android.uipreview.ViewLoaderExtension
import org.jetbrains.kotlin.idea.util.InfinitePeriodicalTask
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
import java.awt.BorderLayout
import java.awt.event.ItemEvent
import javax.swing.ComboBoxModel
import javax.swing.DefaultComboBoxModel
import javax.swing.JPanel

class AnkoNlPreviewManager(
        project: Project,
        fileEditorManager: FileEditorManager?
) : NlPreviewManager(project, fileEditorManager), Disposable {
    internal val classResolver = DslPreviewClassResolver(project)

    internal var myActivityListModel: DefaultComboBoxModel<Any> = DefaultComboBoxModel()

    private val viewLoaderExtension by lazy {
        val area = Extensions.getArea(project)

        if (area.hasExtensionPoint(ViewLoaderExtension.EP_NAME.name)) {
            area.getExtensionPoint(ViewLoaderExtension.EP_NAME).extensions.firstIsInstanceOrNull<AnkoViewLoaderExtension>()
        } else {
            null
        }
    }

    init {
        ApplicationManager.getApplication().invokeLater {
            val task = Computable { UpdateActivityNameTask(this) }
            InfinitePeriodicalTask(1000, Alarm.ThreadToUse.SWING_THREAD, this@AnkoNlPreviewManager, task).start()
        }

        GradleBuildInvoker.getInstance(project).add {
            ApplicationManager.getApplication().invokeLater {
                refresh()
            }
        }
    }

    override fun getToolWindowId() = "Anko Layout Preview"
    override fun getComponentName() = "AnkoNlPreviewManager"
    public override fun getToolWindow() = super.getToolWindow()

    override fun getBoundXmlFile(file: PsiFile?): XmlFile? {
        if (file is XmlFile) {
            return file
        } else if (file !is KtFile) {
            return null
        }

        val ankoPreviewFrom = previewForm as? AnkoPreviewForm ?: return null
        val module = ModuleUtilCore.findModuleForPsiElement(file) ?: return null

        return if (refresh() || ankoPreviewFrom.xmlFile == null) {
            generateStubXmlFile(module, file).also {
                ankoPreviewFrom.xmlFile = it
            }
        } else {
            ankoPreviewFrom.xmlFile
        }
    }

    private fun getActiveTextEditor(): TextEditor? {
        if (!ApplicationManager.getApplication().isReadAccessAllowed) {
            return ApplicationManager.getApplication().runReadAction(Computable<TextEditor> { getActiveTextEditor() })
        }
        ApplicationManager.getApplication().assertReadAccessAllowed()
        val fileEditors = fileEditorManager?.selectedEditors
        if (fileEditors != null && fileEditors.isNotEmpty() && fileEditors[0] is TextEditor) {
            val textEditor = fileEditors[0] as TextEditor
            if (isApplicableEditor(textEditor, null)) {
                return textEditor
            }
        }
        return null
    }

    private fun generateStubXmlFile(module: Module, originalFile: KtFile): LayoutPsiFile {
        val filename = "anko_preview.xml"
        val content = """<?xml version="1.0" encoding="utf-8"?>
                <__anko.preview.View xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>"""

        val psiFile = PsiFileFactory.getInstance(project).createFileFromText(filename, XmlFileType.INSTANCE, content)
        return LayoutPsiFile(psiFile as XmlFile, originalFile, module)
    }

    private fun refresh(): Boolean {
        val toolWindow: ToolWindow = toolWindow ?: return false
        if (!toolWindow.isVisible) return false

        val viewLoaderExtension = this.viewLoaderExtension ?: return false
        val description = myActivityListModel.selectedItem as? PreviewClassDescription
                ?: classResolver.getOnCursorPreviewClassDescription()

        if (description != null && viewLoaderExtension.description != description) {
            viewLoaderExtension.description = description
            return true
        }

        return false
    }

    override fun isApplicableEditor(textEditor: TextEditor, file: PsiFile?): Boolean {
        val psiFile =
                file ?: PsiDocumentManager.getInstance(project).getPsiFile(textEditor.editor.document) ?: return false
        if (!GradleProjectInfo.getInstance(project).isBuildWithGradle &&
                !AndroidProjectInfo.getInstance(project).isLegacyIdeaAndroidProject) {
            return false
        }

        return psiFile is KtFile
    }

    private val fileEditorManager: FileEditorManager?
        get() = with(NlPreviewManager::class.java.getDeclaredField("myFileEditorManager")) {
            val oldAccessible = isAccessible
            try {
                isAccessible = true
                get(this@AnkoNlPreviewManager) as? FileEditorManager
            } finally {
                isAccessible = oldAccessible
            }
        }

    override fun initToolWindow() {
        super.initToolWindow()
        resolveAvailableClasses()
    }

    override fun createPreviewForm(): NlPreviewForm = AnkoPreviewForm(this)

    internal fun updatePreview() {
        getActiveTextEditor()?.let { notifyFileShown(it, true) }
    }

    fun resolveAvailableClasses() {
        val activityClasses = classResolver
                .getAncestors(DslPreviewClassResolver.ANKO_COMPONENT_CLASS_NAME)
                .filter { classResolver.isClassApplicableForPreview(it.ktClass) }

        with(myActivityListModel) {
            selectedItem = null
            removeAllElements()
            val items = activityClasses
            items.sortedBy { it.toString() }.forEach { addElement(it) }
        }
    }

    override fun isUseInteractiveSelector() = false

    override fun dispose() {}
}

class AnkoPreviewForm(private val ankoPreviewManager: AnkoNlPreviewManager) : NlPreviewForm(ankoPreviewManager) {
    var xmlFile: XmlFile? = null

    override fun setActiveModel(model: NlModel?) {
        super.setActiveModel(model)

        if (model != null) {
            (this.toolbarComponent as? JPanel)?.let { addLayoutComboBox(it) }
        }
    }

    private fun addLayoutComboBox(panel: JPanel) {
        if (panel.components.firstIsInstanceOrNull<PreviewCandidateComboBox>() != null) {
            return
        }

        val comboBox = PreviewCandidateComboBox(ankoPreviewManager.myActivityListModel)
        comboBox.addItemListener { itemEvent ->
            if (itemEvent.stateChange == ItemEvent.SELECTED) {
                ankoPreviewManager.updatePreview()
            }
        }

        panel.add(comboBox, BorderLayout.SOUTH)
    }
}

class PreviewCandidateComboBox(model: ComboBoxModel<Any>) : ComboBox<Any>(model)


================================================
FILE: anko/idea-plugin/preview/src/org/jetbrains/kotlin/android/dslpreview/AnkoViewLoaderExtension.kt
================================================
package org.jetbrains.kotlin.android.dslpreview

import org.jetbrains.android.uipreview.ViewLoaderExtension
import org.jetbrains.org.objectweb.asm.ClassWriter
import org.jetbrains.org.objectweb.asm.Opcodes
import java.net.URL
import java.net.URLClassLoader

class AnkoViewLoaderExtension : ViewLoaderExtension {
    internal var description: PreviewClassDescription? = null

    override fun loadClass(className: String, delegateClassLoader: ClassLoader): Class<*>? {
        val description = this.description
        if (className == "__anko.preview.View" && description != null) {
            val clazz = generateStubViewClass(delegateClassLoader, description)
            if (clazz != null) return clazz
        }

        return null
    }

    private fun generateStubViewClass(delegateClassLoader: ClassLoader, description: PreviewClassDescription): Class<*>? {
        val uiInternalName = description.internalName
        val viewFqName = "__anko.preview.View"
        val viewInternalName = viewFqName.replace('.', '/')
        val superClassInternalName = "android/widget/FrameLayout"

        val bytes = with (ClassWriter(0)) {
            visit(49, Opcodes.ACC_PUBLIC, viewInternalName, null, superClassInternalName, null)
            visitSource(null, null)

            fun visitConstructor(vararg params: String) {
                val signature = "(${params.joinToString("")})V"

                with (visitMethod(Opcodes.ACC_PUBLIC, "<init>", signature, null, null)) {
                    visitVarInsn(Opcodes.ALOAD, 0)
                    params.forEachIndexed { i, param ->
                        when (param) {
                            "I" -> visitVarInsn(Opcodes.ILOAD, i + 1)
                            else -> visitVarInsn(Opcodes.ALOAD, i + 1)
                        }
                    }

                    visitMethodInsn(Opcodes.INVOKESPECIAL, superClassInternalName, "<init>", signature)
                    visitVarInsn(Opcodes.ALOAD, 0)
                    visitMethodInsn(Opcodes.INVOKEVIRTUAL, viewInternalName, "init", "()V")
                    visitInsn(Opcodes.RETURN)
                    visitMaxs(1 + params.size /*max stack*/, 1 + params.size /*max locals*/)
                    visitEnd()
                }
            }

            visitConstructor("Landroid/content/Context;")
            visitConstructor("Landroid/content/Context;", "Landroid/util/AttributeSet;")
            visitConstructor("Landroid/content/Context;", "Landroid/util/AttributeSet;", "I")

            /*
            private fun init() {
                addView(MainActivityUi().createView(AnkoContext.create(getContext())))
            }
             */

            with (visitMethod(Opcodes.ACC_PRIVATE, "init", "()V", null, null)) {
                visitVarInsn(Opcodes.ALOAD, 0)
                visitTypeInsn(Opcodes.NEW, uiInternalName)
                visitInsn(Opcodes.DUP)
                visitMethodInsn(Opcodes.INVOKESPECIAL, uiInternalName, "<init>", "()V")
                visitFieldInsn(Opcodes.GETSTATIC, "org/jetbrains/anko/AnkoContext", "Companion",
                        "Lorg/jetbrains/anko/AnkoContext" + '$' + "Companion;")
                visitVarInsn(Opcodes.ALOAD, 0)
                visitMethodInsn(Opcodes.INVOKEVIRTUAL, viewInternalName, "getContext", "()Landroid/content/Context;")

                visitInsn(Opcodes.ICONST_0)
                visitMethodInsn(Opcodes.INVOKEVIRTUAL, "org/jetbrains/anko/AnkoContext" + '$' + "Companion", "create",
                        "(Landroid/content/Context;Z)Lorg/jetbrains/anko/AnkoContext;")

                visitMethodInsn(Opcodes.INVOKEVIRTUAL, uiInternalName, "createView",
                        "(Lorg/jetbrains/anko/AnkoContext;)Landroid/view/View;")
                visitMethodInsn(Opcodes.INVOKEVIRTUAL, viewInternalName, "addView", "(Landroid/view/View;)V")

                visitInsn(Opcodes.RETURN)
                visitMaxs(5 /*max stack*/, 1 /*max locals*/)
                visitEnd()
            }

            visitEnd()
            toByteArray()
        }

        return loadClass(viewFqName, bytes, delegateClassLoader)
    }

    private fun loadClass(fqName: String, bytes: ByteArray, delegateClassLoader: ClassLoader): Class<*>? {
        class ByteClassLoader(
                urls: Array<out URL>?,
                parent: ClassLoader?,
                private var extraClasses: MutableMap<String, ByteArray>
        ) : URLClassLoader(urls, parent) {
            override fun findClass(name: String): Class<*>? {
                return extraClasses.remove(name)?.let {
                    defineClass(name, it, 0, it.size)
                } ?: super.findClass(name)
            }
        }

        try {
            val classLoader = ByteClassLoader(emptyArray(), delegateClassLoader, hashMapOf(fqName to bytes))
            return Class.forName(fqName, false, classLoader)
        } catch (e: Throwable) {
            return null
        }
    }
}

================================================
FILE: anko/idea-plugin/preview/src/org/jetbrains/kotlin/android/dslpreview/DslPreviewClassResolver.kt
================================================
package org.jetbrains.kotlin.android.dslpreview

import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.editor.ex.EditorEx
import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.project.DumbService
import com.intellij.openapi.project.IndexNotReadyException
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Computable
import com.intellij.psi.JavaPsiFacade
import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiElement
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.search.searches.ClassInheritorsSearch
import org.jetbrains.kotlin.asJava.elements.KtLightElement
import org.jetbrains.kotlin.caches.resolve.KotlinCacheService
import org.jetbrains.kotlin.codegen.ClassBuilderMode
import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtConstructor
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
import org.jetbrains.kotlin.types.typeUtil.supertypes
import java.util.*

internal class DslPreviewClassResolver(private val project: Project) {

    private fun getKtClass(psiElement: PsiElement?): KtClass? {
        return if (psiElement is KtLightElement<*, *>) {
            getKtClass(psiElement.kotlinOrigin)
        } else if (psiElement is KtClass && !psiElement.isEnum() && !psiElement.isInterface() &&
                !psiElement.isAnnotation() && !psiElement.isSealed()) {
            psiElement
        } else {
            val parent = psiElement?.parent ?: return null
            return getKtClass(parent)
        }
    }

    fun getOnCursorPreviewClassDescription(): PreviewClassDescription? {
        val editor = ApplicationManager.getApplication().runReadAction(Computable {
            FileEditorManager.getInstance(project).selectedTextEditor
        }) ?: return null

        val psiFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.document)

        if (psiFile !is KtFile || editor !is EditorEx) return null

        val selectionStart = editor.caretModel.primaryCaret.selectionStart
        val psiElement = psiFile.findElementAt(selectionStart) ?: return null

        val cacheService = KotlinCacheService.getInstance(project)
        return resolveClassDescription(psiElement, cacheService)
    }

    fun getAncestors(baseClassName: String): Collection<PreviewClassDescription> {
        if (DumbService.isDumb(project)) return emptyList()
        val baseClasses = JavaPsiFacade.getInstance(project)
                .findClasses(baseClassName, GlobalSearchScope.allScope(project))

        if (baseClasses.isEmpty()) return emptyList()

        return try {
            val cacheService = KotlinCacheService.getInstance(project)

            val previewClasses = ArrayList<PreviewClassDescription>(0)
            for (element in ClassInheritorsSearch.search(baseClasses[0]).findAll()) {
                resolveClassDescription(element, cacheService)?.let { previewClasses += it }
            }

            previewClasses
        }
        catch (e: IndexNotReadyException) {
            emptyList()
        }
    }

    private fun isZeroParameterConstructor(constructor: KtConstructor<*>?): Boolean {
        if (constructor == null) return false
        val parameters = constructor.getValueParameters()
        return parameters.isEmpty() || parameters.all { it.hasDefaultValue() }
    }


    fun isClassApplicableForPreview(clazz: KtClass): Boolean {
        val primaryConstructor = clazz.primaryConstructor
        val secondaryConstructors = clazz.secondaryConstructors

        return (primaryConstructor == null && secondaryConstructors.isEmpty())
                || isZeroParameterConstructor(primaryConstructor)
                || secondaryConstructors.any(this::isZeroParameterConstructor)
    }

    fun resolveClassDescription(element: PsiElement, cacheService: KotlinCacheService): PreviewClassDescription? {
        if (DumbService.isDumb(element.project)) return null
        val ktClass = getKtClass(element) ?: return null
        if (!isClassApplicableForPreview(ktClass)) return null

        val resolveSession = cacheService.getResolutionFacade(listOf(ktClass))
                .getFrontendService(ResolveSession::class.java)
        val classDescriptor = resolveSession.getClassDescriptor(ktClass, NoLookupLocation.FROM_IDE)

        if (!classDescriptor.defaultType.supertypes().any {
            val fqName = it.constructor.declarationDescriptor?.fqNameUnsafe?.asString() ?: ""
            fqName == ANKO_COMPONENT_CLASS_NAME
        }) {
            return null
        }

        val typeMapper = createTypeMapper(resolveSession.bindingContext)

        return PreviewClassDescription(ktClass, classDescriptor.fqNameSafe.asString(),
                typeMapper.mapType(classDescriptor).internalName)
    }

    companion object {
        val ANKO_COMPONENT_CLASS_NAME = "org.jetbrains.anko.AnkoComponent"

        private fun createTypeMapper(bindingContext: BindingContext): KotlinTypeMapper {
            // TODO: Add stable constructor to KotlinTypeMapper
            val typeMapperConstructor7 = KotlinTypeMapper::class.java.constructors.find { it.parameterCount == 7 }
            if (typeMapperConstructor7 != null) {
                if (typeMapperConstructor7.parameterTypes[4].isAssignableFrom(JvmTarget::class.java))
                    return typeMapperConstructor7
                            .newInstance(
                                    bindingContext,
                                    ClassBuilderMode.LIGHT_CLASSES,
                                    IncompatibleClassTracker.DoNothing,
                                    "main",
                                    JvmTarget.DEFAULT,
                                    false,
                                    false) as KotlinTypeMapper
                else
                    return typeMapperConstructor7
                            .newInstance(
                                    bindingContext,
                                    ClassBuilderMode.LIGHT_CLASSES,
                                    IncompatibleClassTracker.DoNothing,
                                    "main",
                                    false,
                                    false,
                                    false) as KotlinTypeMapper
            }

            val typeMapperConstructor6 = KotlinTypeMapper::class.java.constructors.find { it.parameterCount == 6 }
            if (typeMapperConstructor6 != null) {
                return typeMapperConstructor6
                        .newInstance(
                                bindingContext,
                                ClassBuilderMode.LIGHT_CLASSES,
                                IncompatibleClassTracker.DoNothing,
                                "main",
                                false,
                                false) as KotlinTypeMapper
            }

            return KotlinTypeMapper(
                    bindingContext,
                    ClassBuilderMode.LIGHT_CLASSES,
                    IncompatibleClassTracker.DoNothing,
                    "main",
                    false)
        }
    }

}

================================================
FILE: anko/idea-plugin/preview/src/org/jetbrains/kotlin/android/dslpreview/LayoutPsiFile.kt
================================================
/*
 * Copyright 2016 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

@file:Suppress("UNREACHABLE_CODE", "OverridingDeprecatedMember", "DEPRECATION")
package org.jetbrains.kotlin.android.dslpreview

import com.intellij.injected.editor.DocumentWindow
import com.intellij.injected.editor.VirtualFileWindow
import com.intellij.lang.ASTNode
import com.intellij.lang.FileASTNode
import com.intellij.lang.Language
import com.intellij.navigation.ItemPresentation
import com.intellij.openapi.Disposable
import com.intellij.openapi.editor.Document
import com.intellij.openapi.editor.RangeMarker
import com.intellij.openapi.editor.event.DocumentListener
import com.intellij.openapi.module.Module
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Iconable.IconFlags
import com.intellij.openapi.util.Key
import com.intellij.openapi.util.Segment
import com.intellij.openapi.util.TextRange
import com.intellij.openapi.util.UserDataHolderBase
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.*
import com.intellij.psi.impl.PsiDocumentManagerImpl
import com.intellij.psi.impl.PsiManagerEx
import com.intellij.psi.scope.PsiScopeProcessor
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.search.PsiElementProcessor
import com.intellij.psi.search.SearchScope
import com.intellij.psi.xml.XmlFile
import com.intellij.testFramework.LightVirtualFile
import com.intellij.util.IncorrectOperationException
import org.jetbrains.android.facet.AndroidFacet
import org.jetbrains.android.resourceManagers.ModuleResourceManagers
import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.psi.KtFile
import java.beans.PropertyChangeListener
import javax.swing.Icon

/*
  Reason for these stubs:
  Android Preview checks that the xml file is placed inside "layout-*" directory.
  TODO: Implement some kind of stable api in Android plugin for this
 */
class LayoutPsiFile(private val myPsiFile: XmlFile, val originalFile: KtFile, module: Module) : XmlFile {
    private val myPsiDirectory: PsiDirectory = LayoutPsiDirectory(module)

    private val myViewProvider: FileViewProvider = object : FileViewProvider by myPsiFile.viewProvider {
        override fun getPsi(p0: Language): PsiFile = this@LayoutPsiFile
    }

    private val myVirtualFile: VirtualFile by lazy {
        LayoutLightVirtualFile(myPsiFile.name, myPsiFile.text).also { virtualFile ->
            (myPsiFile.manager as? PsiManagerEx)?.fileManager?.setViewProvider(virtualFile, myViewProvider)
        }
    }

    override fun getParent() = myPsiDirectory
    override fun getDocument() = myPsiFile.document
    override fun getRootTag() = myPsiFile.rootTag
    override fun getVirtualFile(): VirtualFile? = myVirtualFile
    override fun getContainingDirectory() = myPsiDirectory
    override fun getModificationStamp() = myPsiFile.modificationStamp
    override fun getOriginalFile() = this
    override fun getFileType() = myPsiFile.fileType
    override fun getViewProvider() = myViewProvider
    override fun getNode(): FileASTNode? = myPsiFile.node
    override fun getPsiRoots(): Array<PsiFile> = myPsiFile.psiRoots
    override fun subtreeChanged() = myPsiFile.subtreeChanged()
    override fun isDirectory() = myPsiFile.isDirectory
    override fun getName() = myPsiFile.name
    override fun checkSetName(s: String) = myPsiFile.checkSetName(s)
    override fun setName(s: String): PsiElement = myPsiFile.setName(s)
    override fun getProject() = myPsiFile.project
    override fun getLanguage() = myPsiFile.language
    override fun getManager(): PsiManager? = myPsiFile.manager
    override fun getChildren(): Array<PsiElement> = myPsiFile.children
    override fun getFirstChild(): PsiElement? = myPsiFile.firstChild
    override fun getLastChild(): PsiElement? = myPsiFile.lastChild
    override fun getNextSibling(): PsiElement? = myPsiFile.nextSibling
    override fun getPrevSibling(): PsiElement? = myPsiFile.prevSibling
    override fun getContainingFile(): PsiFile? = myPsiFile.containingFile
    override fun getTextRange(): TextRange? = myPsiFile.textRange
    override fun getStartOffsetInParent() = myPsiFile.startOffsetInParent
    override fun getTextLength() = myPsiFile.textLength
    override fun findElementAt(i: Int) = myPsiFile.findElementAt(i)
    override fun findReferenceAt(i: Int) = myPsiFile.findReferenceAt(i)
    override fun getTextOffset() = myPsiFile.textOffset
    override fun getText(): String? = myPsiFile.text
    override fun textToCharArray() = myPsiFile.textToCharArray()
    override fun getNavigationElement(): PsiElement? = myPsiFile.navigationElement
    override fun getOriginalElement(): PsiElement? = myPsiFile.originalElement
    override fun textMatches(charSequence: CharSequence) = myPsiFile.textMatches(charSequence)
    override fun textMatches(psiElement: PsiElement) = myPsiFile.textMatches(psiElement)
    override fun textContains(c: Char) = myPsiFile.textContains(c)
    override fun accept(psiElementVisitor: PsiElementVisitor) = myPsiFile.accept(psiElementVisitor)
    override fun acceptChildren(psiElementVisitor: PsiElementVisitor) = myPsiFile.acceptChildren(psiElementVisitor)
    override fun copy(): PsiElement? = myPsiFile.copy()
    override fun add(psiElement: PsiElement): PsiElement? = myPsiFile.add(psiElement)

    override fun processChildren(psiFileSystemItemPsiElementProcessor: PsiElementProcessor<PsiFileSystemItem>?): Boolean {
        return myPsiFile.processChildren(psiFileSystemItemPsiElementProcessor)
    }

    override fun addBefore(psiElement: PsiElement, psiElement2: PsiElement?): PsiElement? =
            myPsiFile.addBefore(psiElement, psiElement2)

    override fun addAfter(psiElement: PsiElement, psiElement2: PsiElement?): PsiElement? =
            myPsiFile.addAfter(psiElement, psiElement2)

    override fun checkAdd(psiElement: PsiElement) = myPsiFile.checkAdd(psiElement)

    override fun addRange(psiElement: PsiElement, psiElement2: PsiElement): PsiElement? {
        return myPsiFile.addRange(psiElement, psiElement2)
    }

    override fun addRangeBefore(psiElement: PsiElement, psiElement2: PsiElement, psiElement3: PsiElement): PsiElement? {
        return myPsiFile.addRangeBefore(psiElement, psiElement2, psiElement3)
    }

    override fun addRangeAfter(psiElement: PsiElement, psiElement2: PsiElement, psiElement3: PsiElement): PsiElement? {
        return myPsiFile.addRangeAfter(psiElement, psiElement2, psiElement3)
    }

    override fun delete() = myPsiFile.delete()

    override fun checkDelete() = myPsiFile.checkDelete()

    override fun deleteChildRange(psiElement: PsiElement, psiElement2: PsiElement)
            = myPsiFile.deleteChildRange(psiElement, psiElement2)

    override fun replace(psiElement: PsiElement): PsiElement? = myPsiFile.replace(psiElement)
    override fun isValid() = myPsiFile.isValid
    override fun isWritable() = myPsiFile.isWritable
    override fun getReference() = myPsiFile.reference
    override fun getReferences(): Array<PsiReference> = myPsiFile.references
    override fun <T> getCopyableUserData(tKey: Key<T>) = myPsiFile.getCopyableUserData(tKey)
    override fun <T> putCopyableUserData(tKey: Key<T>, t: T?) = myPsiFile.putCopyableUserData(tKey, t)

    override fun processDeclarations(
            psiScopeProcessor: PsiScopeProcessor,
            resolveState: ResolveState,
            psiElement: PsiElement?,
            psiElement2: PsiElement
    ): Boolean {
        return myPsiFile.processDeclarations(psiScopeProcessor, resolveState, psiElement, psiElement2)
    }

    override fun getContext() = myPsiFile.context

    override fun isPhysical() = myPsiFile.isPhysical

    override fun getResolveScope() = myPsiFile.resolveScope

    override fun getUseScope() = myPsiFile.useScope

    override fun toString() = myPsiFile.toString()
    override fun isEquivalentTo(psiElement: PsiElement) = myPsiFile.isEquivalentTo(psiElement)
    override fun <T> getUserData(tKey: Key<T>) = myPsiFile.getUserData(tKey)
    override fun <T> putUserData(tKey: Key<T>, t: T?) = myPsiFile.putUserData(tKey, t)
    override fun getIcon(i: Int): Icon = myPsiFile.getIcon(i)
    override fun getPresentation() = myPsiFile.presentation
    override fun navigate(b: Boolean) = myPsiFile.navigate(b)
    override fun canNavigate() = myPsiFile.canNavigate()
    override fun canNavigateToSource() = myPsiFile.canNavigateToSource()
    override fun getFileResolveScope() = myPsiFile.fileResolveScope
    override fun ignoreReferencedElementAccessibility() = myPsiFile.ignoreReferencedElementAccessibility()

    override fun processElements(psiElementProcessor: PsiElementProcessor<PsiElement>, psiElement: PsiElement): Boolean {
        return myPsiFile.processElements(psiElementProcessor, psiElement)
    }

    private class LayoutPsiDirectory(val module: Module) : PsiDirectory {
        private val parentDir by lazy {
            val facet = AndroidFacet.getInstance(module) ?: return@lazy null
            val dir = ModuleResourceManagers.getInstance(facet).localResourceManager.resourceDirs
                    .firstOrNull() ?: return@lazy null
            PsiManager.getInstance(module.project).findDirectory(dir)
        }

        override fun getName(): String {
            return "layout"
        }

        override fun getVirtualFile(): VirtualFile {
            return null!!
        }

        @Throws(IncorrectOperationException::class)
        override fun setName(s: String): PsiElement {
            return null!!
        }

        override fun getParentDirectory(): PsiDirectory? = parentDir

        override fun getParent() = parentDir

        override fun getSubdirectories(): Array<PsiDirectory?> {
            return arrayOfNulls(0)
        }

        override fun getFiles(): Array<PsiFile?> {
            return arrayOfNulls(0)
        }

        override fun findSubdirectory(s: String): PsiDirectory? {
            return null
        }

        override fun findFile(@NonNls s: String): PsiFile? {
            return null
        }

        @Throws(IncorrectOperationException::class)
        override fun createSubdirectory(s: String): PsiDirectory {
            return null!!
        }

        @Throws(IncorrectOperationException::class)
        override fun checkCreateSubdirectory(s: String) {

        }

        @Throws(IncorrectOperationException::class)
        override fun createFile(@NonNls s: String): PsiFile {
            return null!!
        }

        @Throws(IncorrectOperationException::class)
        override fun copyFileFrom(s: String, psiFile: PsiFile): PsiFile {
            return null!!
        }

        @Throws(IncorrectOperationException::class)
        override fun checkCreateFile(s: String) {

        }

        override fun isDirectory(): Boolean {
            return true
        }

        override fun processChildren(psiFileSystemItemPsiElementProcessor: PsiElementProcessor<PsiFileSystemItem>): Boolean {
            return false
        }

        override fun getPresentation(): ItemPresentation? {
            return null
        }

        override fun navigate(b: Boolean) {

        }

        override fun canNavigate(): Boolean {
            return false
        }

        override fun canNavigateToSource(): Boolean {
            return false
        }

        @Throws(IncorrectOperationException::class)
        override fun checkSetName(s: String) {

        }

        @Throws(PsiInvalidElementAccessException::class)
        override fun getProject(): Project {
            return null!!
        }

        override fun getLanguage(): Language {
            return null!!
        }

        override fun getManager(): PsiManager? {
            return null
        }

        override fun getChildren(): Array<PsiElement?> {
            return arrayOfNulls(0)
        }

        override fun getFirstChild(): PsiElement? {
            return null
        }

        override fun getLastChild(): PsiElement? {
            return null
        }

        override fun getNextSibling(): PsiElement? {
            return null
        }

        override fun getPrevSibling(): PsiElement? {
            return null
        }

        @Throws(PsiInvalidElementAccessException::class)
        override fun getContainingFile(): PsiFile? {
            return null
        }

        override fun getTextRange(): TextRange? {
            return null
        }

        override fun getStartOffsetInParent(): Int {
            return 0
        }

        override fun getTextLength(): Int {
            return 0
        }

        override fun findElementAt(i: Int): PsiElement? {
            return null
        }

        override fun findReferenceAt(i: Int): PsiReference? {
            return null
        }

        override fun getTextOffset(): Int {
            return 0
        }

        override fun getText(): String? {
            return null
        }

        override fun textToCharArray(): CharArray {
            return CharArray(0)
        }

        override fun getNavigationElement(): PsiElement? {
            return null
        }

        override fun getOriginalElement(): PsiElement? {
            return null
        }

        override fun textMatches(@NonNls charSequence: CharSequence): Boolean {
            return false
        }

        override fun textMatches(psiElement: PsiElement): Boolean {
            return false
        }

        override fun textContains(c: Char): Boolean {
            return false
        }

        override fun accept(psiElementVisitor: PsiElementVisitor) {

        }

        override fun acceptChildren(psiElementVisitor: PsiElementVisitor) {

        }

        override fun copy(): PsiElement? {
            return null
        }

        @Throws(IncorrectOperationException::class)
        override fun add(psiElement: PsiElement): PsiElement? {
            return null
        }

        @Throws(IncorrectOperationException::class)
        override fun addBefore(psiElement: PsiElement, psiElement2: PsiElement?): PsiElement? {
            return null
        }

        @Throws(IncorrectOperationException::class)
        override fun addAfter(psiElement: PsiElement, psiElement2: PsiElement?): PsiElement? {
            return null
        }

        @Throws(IncorrectOperationException::class)
        override fun checkAdd(psiElement: PsiElement) {

        }

        @Throws(IncorrectOperationException::class)
        override fun addRange(psiElement: PsiElement, psiElement2: PsiElement): PsiElement? {
            return null
        }

        @Throws(IncorrectOperationException::class)
        override fun addRangeBefore(psiElement: PsiElement, psiElement2: PsiElement, psiElement3: PsiElement): PsiElement? {
            return null
        }

        @Throws(IncorrectOperationException::class)
        override fun addRangeAfter(psiElement: PsiElement, psiElement2: PsiElement, psiElement3: PsiElement): PsiElement? {
            return null
        }

        @Throws(IncorrectOperationException::class)
        override fun delete() {

        }

        @Throws(IncorrectOperationException::class)
        override fun checkDelete() {

        }

        @Throws(IncorrectOperationException::class)
        override fun deleteChildRange(psiElement: PsiElement, psiElement2: PsiElement) {

        }

        @Throws(IncorrectOperationException::class)
        override fun replace(psiElement: PsiElement): PsiElement? {
            return null
        }

        override fun isValid(): Boolean {
            return false
        }

        override fun isWritable(): Boolean {
            return false
        }

        override fun getReference(): PsiReference? {
            return null
        }

        override fun getReferences(): Array<PsiReference?> {
            return arrayOfNulls(0)
        }

        override fun <T> getCopyableUserData(tKey: Key<T>): T? {
            return null
        }

        override fun <T> putCopyableUserData(tKey: Key<T>, t: T?) {

        }

        override fun processDeclarations(
                psiScopeProcessor: PsiScopeProcessor,
                resolveState: ResolveState,
                psiElement: PsiElement?,
                psiElement2: PsiElement
        ): Boolean {
            return false
        }

        override fun getContext(): PsiElement? {
            return null
        }

        override fun isPhysical(): Boolean {
            return false
        }

        override fun getResolveScope(): GlobalSearchScope {
            return null!!
        }

        override fun getUseScope(): SearchScope {
            return null!!
        }

        override fun getNode(): ASTNode? {
            return null
        }

        override fun isEquivalentTo(psiElement: PsiElement): Boolean {
            return false
        }

        override fun getIcon(@IconFlags i: Int): Icon? {
            return null
        }

        override fun <T> getUserData(tKey: Key<T>): T? {
            return null
        }

        override fun <T> putUserData(tKey: Key<T>, t: T?) {

        }
    }

    inner class LayoutLightVirtualFile(name: String, text: String) : LightVirtualFile(name, text), VirtualFileWindow {
        /*
         * This hack is needed to force PsiDocumentManager return our LayoutPsiFile for LayoutLightVirtualFile
         */
        override fun getDocumentWindow(): DocumentWindow {
            val documentManager = PsiDocumentManager.getInstance(project)
            val documentWindowStub =  object : UserDataHolderBase(), DocumentWindow {
                override fun hostToInjectedUnescaped(p0: Int): Int {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun isOneLine(): Boolean {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun removeDocumentListener(p0: DocumentListener) {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun deleteString(p0: Int, p1: Int) {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getTextLength(): Int {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getHostRanges(): Array<Segment> {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getText(): String {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getText(p0: TextRange): String {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getLineStartOffset(p0: Int): Int {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun createRangeMarker(p0: Int, p1: Int): RangeMarker {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun createRangeMarker(p0: Int, p1: Int, p2: Boolean): RangeMarker {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun createRangeMarker(p0: TextRange): RangeMarker {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun insertString(p0: Int, p1: CharSequence) {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun setText(p0: CharSequence) {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun startGuardedBlockChecking() {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getHostRange(p0: Int): TextRange? {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getChars(): CharArray {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getLineCount(): Int {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun stopGuardedBlockChecking() {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun areRangesEqual(p0: DocumentWindow): Boolean {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun isValid(): Boolean {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun removeGuardedBlock(p0: RangeMarker) {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getLineSeparatorLength(p0: Int): Int {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun injectedToHostLine(p0: Int): Int {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun addPropertyChangeListener(p0: PropertyChangeListener) {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun createGuardedBlock(p0: Int, p1: Int): RangeMarker {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun replaceString(p0: Int, p1: Int, p2: CharSequence) {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getModificationStamp(): Long {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun setReadOnly(p0: Boolean) {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun intersectWithEditable(p0: TextRange): TextRange? {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun fireReadOnlyModificationAttempt() {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getLineNumber(p0: Int): Int {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun setCyclicBufferSize(p0: Int) {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun hostToInjected(p0: Int): Int {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getImmutableCharSequence(): CharSequence {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getOffsetGuard(p0: Int): RangeMarker? {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun isWritable(): Boolean {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getLineEndOffset(p0: Int): Int {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getCharsSequence(): CharSequence {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getDelegate(): Document {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun containsRange(p0: Int, p1: Int): Boolean {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun addDocumentListener(p0: DocumentListener) {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun addDocumentListener(p0: DocumentListener, p1: Disposable) {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun removePropertyChangeListener(p0: PropertyChangeListener) {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun getRangeGuard(p0: Int, p1: Int): RangeMarker? {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun injectedToHost(p0: Int): Int {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun injectedToHost(p0: TextRange): TextRange {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }
            }
            (documentManager as PsiDocumentManagerImpl).associatePsi(documentWindowStub, this@LayoutPsiFile)
            return documentWindowStub
        }

        override fun getDelegate(): VirtualFile = this@LayoutPsiFile.originalFile.virtualFile

        override fun getParent() = object : LightVirtualFile("layout") {
            override fun isDirectory() = true
        }
    }
}

================================================
FILE: anko/idea-plugin/preview/src/org/jetbrains/kotlin/android/dslpreview/PreviewClassDescription.kt
================================================
/*
 * Copyright 2016 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.jetbrains.kotlin.android.dslpreview

import org.jetbrains.kotlin.psi.KtClass

class PreviewClassDescription(val ktClass: KtClass, val fqName: String, val internalName: String) {
    val packageName = fqName.substringBeforeLast('.')
    val name = fqName.substringAfterLast('.')

    override fun toString(): String {
        return if (packageName.isNotBlank())
            "<html>$packageName.<b>$name</b></html>"
        else
            "<html><b>$name</b></html>"
    }

    override fun equals(other: Any?): Boolean{
        if (this === other) return true
        if (other?.javaClass != javaClass) return false

        other as PreviewClassDescription

        if (fqName != other.fqName) return false
        if (internalName != other.internalName) return false

        return true
    }

    override fun hashCode(): Int{
        var result = fqName.hashCode()
        result += 31 * result + internalName.hashCode()
        return result
    }
}

================================================
FILE: anko/idea-plugin/preview/src/org/jetbrains/kotlin/android/dslpreview/SourceFileModificationTracker.kt
================================================
/*
 * Copyright 2016 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.jetbrains.kotlin.android.dslpreview

import com.intellij.openapi.util.ModificationTracker
import com.intellij.psi.PsiJavaFile
import com.intellij.psi.impl.PsiTreeChangeEventImpl
import com.intellij.psi.impl.PsiTreeChangePreprocessor
import org.jetbrains.kotlin.psi.KtFile
import java.util.concurrent.atomic.AtomicLong

class SourceFileModificationTracker : PsiTreeChangePreprocessor, ModificationTracker {

    private val counter = AtomicLong()

    companion object {
        private val HANDLED_EVENTS = setOf(
                PsiTreeChangeEventImpl.PsiEventType.CHILD_ADDED,
                PsiTreeChangeEventImpl.PsiEventType.CHILD_MOVED,
                PsiTreeChangeEventImpl.PsiEventType.CHILD_REMOVED,
                PsiTreeChangeEventImpl.PsiEventType.CHILD_REPLACED,
                PsiTreeChangeEventImpl.PsiEventType.CHILDREN_CHANGED)
    }

    override fun treeChanged(event: PsiTreeChangeEventImpl) {
        if (event.code in HANDLED_EVENTS) {
            val file = event.file
            if (file is KtFile || file is PsiJavaFile) counter.incrementAndGet()
        }
    }

    override fun getModificationCount() = counter.get()
}

================================================
FILE: anko/idea-plugin/preview/src/org/jetbrains/kotlin/android/dslpreview/UpdateActivityNameTask.kt
================================================
package org.jetbrains.kotlin.android.dslpreview

import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.wm.ToolWindow
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.caches.resolve.KotlinCacheService
import org.jetbrains.kotlin.idea.internal.Location
import org.jetbrains.kotlin.idea.util.LongRunningReadTask
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import javax.swing.DefaultComboBoxModel

class UpdateActivityNameTask(
        val previewManager: AnkoNlPreviewManager
) : LongRunningReadTask<PsiElement, PreviewClassDescription>() {
    override fun prepareRequestInfo(): PsiElement? = with (previewManager) {
        val toolWindow: ToolWindow = toolWindow ?: return null
        if (!toolWindow.isVisible) return null

        val editor = FileEditorManager.getInstance(project).selectedTextEditor
        val location = Location.fromEditor(editor, project)
        if (location.editor == null) return null

        val file = location.kFile
        if (file == null ||
                !ProjectRootsUtil.isInProjectSource(file))
            return null

        val psiElement = file.findElementAt(location.startOffset) ?: return null
        return psiElement
    }

    override fun cloneRequestInfo(requestInfo: PsiElement): PsiElement {
        val newRequestInfo = super.cloneRequestInfo(requestInfo)
        assert(requestInfo == newRequestInfo) { "cloneRequestInfo should generate same location object" }
        return newRequestInfo
    }

    override fun hideResultOnInvalidLocation() {

    }

    override fun processRequest(element: PsiElement): PreviewClassDescription? {
        val cacheService = KotlinCacheService.getInstance(previewManager.project)
        return previewManager.classResolver.resolveClassDescription(element, cacheService)
    }

    private fun indexOf(model: DefaultComboBoxModel<Any>, description: PreviewClassDescription): Int? {
        for (i in 0..(model.size - 1)) {
            val item = model.getElementAt(i) as? PreviewClassDescription ?: continue
            if (item == description) return i
        }
        return null
    }

    private fun setSelection(model: DefaultComboBoxModel<Any>, description: PreviewClassDescription): Boolean {
        val index = indexOf(model, description) ?: return false
        model.selectedItem = model.getElementAt(index)
        return true
    }

    override fun onResultReady(requestInfo: PsiElement, description: PreviewClassDescription?) = with (previewManager) {
        if (description == null) return
        val model = myActivityListModel

        if (!setSelection(model, description)) {
            resolveAvailableClasses()
            setSelection(model, description)
        }
    }
}


================================================
FILE: anko/idea-plugin/xml-converter/build.gradle
================================================
apply plugin: 'kotlin'

sourceSets {
    main {
        java.srcDirs = ['src']
        kotlin.srcDirs = ['src']
    }
    test {
        java.srcDirs = ['test']
        kotlin.srcDirs = ['test']
    }
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile "org.jetbrains.kotlinx:kotlinx.dom:$kotlinx_dom_version"

    compile project(':ide:plugin-classpath')
    compile project(':ide:attrs')
}

================================================
FILE: anko/idea-plugin/xml-converter/resources/attrs.json
================================================
{
  "free": [
    {
      "name": "textSize",
      "format": [
        "dimension"
      ]
    },
    {
      "name": "fontFamily",
      "format": [
        "string"
      ]
    },
    {
      "name": "typeface",
      "format": [
        "enum"
      ],
      "enum": [
        {
          "name": "normal",
          "value": "0"
        },
        {
          "name": "sans",
          "value": "1"
        },
        {
          "name": "serif",
          "value": "2"
        },
        {
          "name": "monospace",
          "value": "3"
        }
      ]
    },
    {
      "name": "textStyle",
      "format": [
        "flags"
      ],
      "flags": [
        {
          "name": "normal",
          "value": "0"
        },
        {
          "name": "bold",
          "value": "1"
        },
        {
          "name": "italic",
          "value": "2"
        }
      ]
    },
    {
      "name": "textColor",
      "format": [
        "reference",
        "color"
      ]
    },
    {
      "name": "textColorHighlight",
      "format": [
        "reference",
        "color"
      ]
    },
    {
      "name": "textColorHint",
      "format": [
        "reference",
        "color"
      ]
    },
    {
      "name": "textColorLink",
      "format": [
        "reference",
        "color"
      ]
    },
    {
      "name": "textCursorDrawable",
      "format": [
        "reference"
      ]
    },
    {
      "name": "textIsSelectable",
      "format": [
        "boolean"
      ]
    },
    {
      "name": "ellipsize",
      "format": [
        "enum"
      ],
      "enum": [
        {
          "name": "none",
          "value": "0"
        },
        {
          "name": "start",
          "value": "1"
        },
        {
          "name": "middle",
          "value": "2"
        },
        {
          "name": "end",
          "value": "3"
        },
        {
          "name": "marquee",
          "value": "4"
        }
      ]
    },
    {
      "name": "inputType",
      "format": [
        "flags"
      ],
      "flags": [
        {
          "name": "none",
          "value": "0x00000000"
        },
        {
          "name": "text",
          "value": "0x00000001"
        },
        {
          "name": "textCapCharacters",
          "value": "0x00001001"
        },
        {
          "name": "textCapWords",
          "value": "0x00002001"
        },
        {
          "name": "textCapSentences",
          "value": "0x00004001"
        },
        {
          "name": "textAutoCorrect",
          "value": "0x00008001"
        },
        {
          "name": "textAutoComplete",
          "value": "0x00010001"
        },
        {
          "name": "textMultiLine",
          "value": "0x00020001"
        },
        {
          "name": "textImeMultiLine",
          "value": "0x00040001"
        },
        {
          "name": "textNoSuggestions",
          "value": "0x00080001"
        },
        {
          "name": "textUri",
          "value": "0x00000011"
        },
        {
          "name": "textEmailAddress",
          "value": "0x00000021"
        },
        {
          "name": "textEmailSubject",
          "value": "0x00000031"
        },
        {
          "name": "textShortMessage",
          "value": "0x00000041"
        },
        {
          "name": "textLongMessage",
          "value": "0x00000051"
        },
        {
          "name": "textPersonName",
          "value": "0x00000061"
        },
        {
          "name": "textPostalAddress",
          "value": "0x00000071"
        },
        {
          "name": "textPassword",
          "value": "0x00000081"
        },
        {
          "name": "textVisiblePassword",
          "value": "0x00000091"
        },
        {
          "name": "textWebEditText",
          "value": "0x000000a1"
        },
        {
          "name": "textFilter",
          "value": "0x000000b1"
        },
        {
          "name": "textPhonetic",
          "value": "0x000000c1"
        },
        {
          "name": "textWebEmailAddress",
          "value": "0x000000d1"
        },
        {
          "name": "textWebPassword",
          "value": "0x000000e1"
        },
        {
          "name": "number",
          "value": "0x00000002"
        },
        {
          "name": "numberSigned",
          "value": "0x00001002"
        },
        {
          "name": "numberDecimal",
          "value": "0x00002002"
        },
        {
          "name": "numberPassword",
          "value": "0x00000012"
        },
        {
          "name": "phone",
          "value": "0x00000003"
        },
        {
          "name": "datetime",
          "value": "0x00000004"
        },
        {
          "name": "date",
          "value": "0x00000014"
        },
        {
          "name": "time",
          "value": "0x00000024"
        }
      ]
    },
    {
      "name": "imeOptions",
      "format": [
        "flags"
      ],
      "flags": [
        {
          "name": "normal",
          "value": "0x00000000"
        },
        {
          "name": "actionUnspecified",
          "value": "0x00000000"
        },
        {
          "name": "actionNone",
          "value": "0x00000001"
        },
        {
          "name": "actionGo",
          "value": "0x00000002"
        },
        {
          "name": "actionSearch",
          "value": "0x00000003"
        },
        {
          "name": "actionSend",
          "value": "0x00000004"
        },
        {
          "name": "actionNext",
          "value": "0x00000005"
        },
        {
          "name": "actionDone",
          "value": "0x00000006"
        },
        {
          "name": "actionPrevious",
          "value": "0x00000007"
        },
        {
          "name": "flagNoFullscreen",
          "value": "0x2000000"
        },
        {
          "name": "flagNavigatePrevious",
          "value": "0x4000000"
        },
        {
          "name": "flagNavigateNext",
          "value": "0x8000000"
        },
        {
          "name": "flagNoExtractUi",
          "value": "0x10000000"
        },
        {
          "name": "flagNoAccessoryAction",
          "value": "0x20000000"
        },
        {
          "name": "flagNoEnterAction",
          "value": "0x40000000"
        },
        {
          "name": "flagForceAscii",
          "value": "0x80000000"
        }
      ]
    },
    {
      "name": "x",
      "format": [
        "dimension"
      ]
    },
    {
      "name": "y",
      "format": [
        "dimension"
      ]
    },
    {
      "name": "gravity",
      "format": [
        "flags"
      ],
      "flags": [
        {
          "name": "top",
          "value": "0x30"
        },
        {
          "name": "bottom",
          "value": "0x50"
        },
        {
          "name": "left",
          "value": "0x03"
        },
        {
          "name": "right",
          "value": "0x05"
        },
        {
          "name": "center_vertical",
          "value": "0x10"
        },
        {
          "name": "fill_vertical",
          "value": "0x70"
        },
        {
          "name": "center_horizontal",
          "value": "0x01"
        },
        {
          "name": "fill_horizontal",
          "value": "0x07"
        },
        {
          "name": "center",
          "value": "0x11"
        },
        {
          "name": "fill",
          "value": "0x77"
        },
        {
          "name": "clip_vertical",
          "value": "0x80"
        },
        {
          "name": "clip_horizontal",
          "value": "0x08"
        },
        {
          "name": "start",
          "value": "0x00800003"
        },
        {
          "name": "end",
          "value": "0x00800005"
        }
      ]
    },
    {
      "name": "autoLink",
      "format": [
        "flags"
      ],
      "flags": [
        {
          "name": "none",
          "value": "0x00"
        },
        {
          "name": "web",
          "value": "0x01"
        },
        {
          "name": "email",
          "value": "0x02"
        },
        {
          "name": "phone",
          "value": "0x04"
        },
        {
          "name": "map",
          "value": "0x08"
        },
        {
          "name": "all",
          "value": "0x0f"
        }
      ]
    },
    {
      "name": "entries",
      "format": [
        "reference"
      ]
    },
    {
      "name": "layout_gravity",
      "format": [
        "flags"
      ],
      "flags": [
        {
          "name": "top",
          "value": "0x30"
        },
        {
          "name": "bottom",
          "value": "0x50"
        },
        {
          "name": "left",
          "value": "0x03"
        },
        {
          "name": "right",
          "value": "0x05"
        },
        {
          "name": "center_vertical",
          "value": "0x10"
        },
        {
          "name": "fill_vertical",
          "value": "0x70"
        },
        {
          "name": "center_horizontal",
          "value": "0x01"
        },
        {
          "name": "fill_horizontal",
          "value": "0x07"
        },
        {
          "name": "center",
          "value": "0x11"
        },
        {
          "name": "fill",
          "value": "0x77"
        },
        {
          "name": "clip_vertical",
          "value": "0x80"
        },
        {
          "name": "clip_horizontal",
          "value": "0x08"
        },
        {
          "name": "start",
          "value": "0x00800003"
        },
        {
          "name": "end",
          "value": "0x00800005"
        }
      ]
    },
    {
      "name": "orientation",
      "format": [
        "enum"
      ],
      "enum": [
        {
          "name": "horizontal",
          "value": "0"
        },
        {
          "name": "vertical",
          "value": "1"
        }
      ]
    },
    {
      "name": "alignmentMode",
      "format": [
        "enum"
      ],
      "enum": [
        {
          "name": "alignBounds",
          "value": "0"
        },
        {
          "name": "alignMargins",
          "value": "1"
        }
      ]
    },
    {
      "name": "keycode",
      "format": [
        "enum"
      ],
      "enum": [
        {
          "name": "KEYCODE_UNKNOWN",
          "value": "0"
        },
        {
          "name": "KEYCODE_SOFT_LEFT",
          "value": "1"
        },
        {
          "name": "KEYCODE_SOFT_RIGHT",
          "value": "2"
        },
        {
          "name": "KEYCODE_HOME",
          "value": "3"
        },
        {
          "name": "KEYCODE_BACK",
          "value": "4"
        },
        {
          "name": "KEYCODE_CALL",
          "value": "5"
        },
        {
          "name": "KEYCODE_ENDCALL",
          "value": "6"
        },
        {
          "name": "KEYCODE_0",
          "value": "7"
        },
        {
          "name": "KEYCODE_1",
          "value": "8"
        },
        {
          "name": "KEYCODE_2",
          "value": "9"
        },
        {
          "name": "KEYCODE_3",
          "value": "10"
        },
        {
          "name": "KEYCODE_4",
          "value": "11"
        },
        {
          "name": "KEYCODE_5",
          "value": "12"
        },
        {
          "name": "KEYCODE_6",
          "value": "13"
        },
        {
          "name": "KEYCODE_7",
          "value": "14"
        },
        {
          "name": "KEYCODE_8",
          "value": "15"
        },
        {
          "name": "KEYCODE_9",
          "value": "16"
        },
        {
          "name": "KEYCODE_STAR",
          "value": "17"
        },
        {
          "name": "KEYCODE_POUND",
          "value": "18"
        },
        {
          "name": "KEYCODE_DPAD_UP",
          "value": "19"
        },
        {
          "name": "KEYCODE_DPAD_DOWN",
          "value": "20"
        },
        {
          "name": "KEYCODE_DPAD_LEFT",
          "value": "21"
        },
        {
          "name": "KEYCODE_DPAD_RIGHT",
          "value": "22"
        },
        {
          "name": "KEYCODE_DPAD_CENTER",
          "value": "23"
        },
        {
          "name": "KEYCODE_VOLUME_UP",
          "value": "24"
        },
        {
          "name": "KEYCODE_VOLUME_DOWN",
          "value": "25"
        },
        {
          "name": "KEYCODE_POWER",
          "value": "26"
        },
        {
          "name": "KEYCODE_CAMERA",
          "value": "27"
        },
        {
          "name": "KEYCODE_CLEAR",
          "value": "28"
        },
        {
          "name": "KEYCODE_A",
          "value": "29"
        },
        {
          "name": "KEYCODE_B",
          "value": "30"
        },
        {
          "name": "KEYCODE_C",
          "value": "31"
        },
        {
          "name": "KEYCODE_D",
          "value": "32"
        },
        {
          "name": "KEYCODE_E",
          "value": "33"
        },
        {
          "name": "KEYCODE_F",
          "value": "34"
        },
        {
          "name": "KEYCODE_G",
          "value": "35"
        },
        {
          "name": "KEYCODE_H",
          "value": "36"
        },
        {
          "name": "KEYCODE_I",
          "value": "37"
        },
        {
          "name": "KEYCODE_J",
          "value": "38"
        },
        {
          "name": "KEYCODE_K",
          "value": "39"
        },
        {
          "name": "KEYCODE_L",
          "value": "40"
        },
        {
          "name": "KEYCODE_M",
          "value": "41"
        },
        {
          "name": "KEYCODE_N",
          "value": "42"
        },
        {
          "name": "KEYCODE_O",
          "value": "43"
        },
        {
          "name": "KEYCODE_P",
          "value": "44"
        },
        {
          "name": "KEYCODE_Q",
          "value": "45"
        },
        {
          "name": "KEYCODE_R",
          "value": "46"
        },
        {
          "name": "KEYCODE_S",
          "value": "47"
        },
        {
          "name": "KEYCODE_T",
          "value": "48"
        },
        {
          "name": "KEYCODE_U",
          "value": "49"
        },
        {
          "name": "KEYCODE_V",
          "value": "50"
        },
        {
          "name": "KEYCODE_W",
          "value": "51"
        },
        {
          "name": "KEYCODE_X",
          "value": "52"
        },
        {
          "name": "KEYCODE_Y",
          "value": "53"
        },
        {
          "name": "KEYCODE_Z",
          "value": "54"
        },
        {
          "name": "KEYCODE_COMMA",
          "value": "55"
        },
        {
          "name": "KEYCODE_PERIOD",
          "value": "56"
        },
        {
          "name": "KEYCODE_ALT_LEFT",
          "value": "57"
        },
        {
          "name": "KEYCODE_ALT_RIGHT",
          "value": "58"
        },
        {
          "name": "KEYCODE_SHIFT_LEFT",
          "value": "59"
        },
        {
          "name": "KEYCODE_SHIFT_RIGHT",
          "value": "60"
        },
        {
          "name": "KEYCODE_TAB",
          "value": "61"
        },
        {
          "name": "KEYCODE_SPACE",
          "value": "62"
        },
        {
          "name": "KEYCODE_SYM",
          "value": "63"
        },
        {
          "name": "KEYCODE_EXPLORER",
          "value": "64"
        },
        {
          "name": "KEYCODE_ENVELOPE",
          "value": "65"
        },
        {
          "name": "KEYCODE_ENTER",
          "value": "66"
        },
        {
          "name": "KEYCODE_DEL",
          "value": "67"
        },
        {
          "name": "KEYCODE_GRAVE",
          "value": "68"
        },
        {
          "name": "KEYCODE_MINUS",
          "value": "69"
        },
        {
          "name": "KEYCODE_EQUALS",
          "value": "70"
        },
        {
          "name": "KEYCODE_LEFT_BRACKET",
          "value": "71"
        },
        {
          "name": "KEYCODE_RIGHT_BRACKET",
          "value": "72"
        },
        {
          "name": "KEYCODE_BACKSLASH",
          "value": "73"
        },
        {
          "name": "KEYCODE_SEMICOLON",
          "value": "74"
        },
        {
          "name": "KEYCODE_APOSTROPHE",
          "value": "75"
        },
        {
          "name": "KEYCODE_SLASH",
          "value": "76"
        },
        {
          "name": "KEYCODE_AT",
          "value": "77"
        },
        {
          "name": "KEYCODE_NUM",
          "value": "78"
        },
        {
          "name": "KEYCODE_HEADSETHOOK",
          "value": "79"
        },
        {
          "name": "KEYCODE_FOCUS",
          "value": "80"
        },
        {
          "name": "KEYCODE_PLUS",
          "value": "81"
        },
        {
          "name": "KEYCODE_MENU",
          "value": "82"
        },
        {
          "name": "KEYCODE_NOTIFICATION",
          "value": "83"
        },
        {
          "name": "KEYCODE_SEARCH",
          "value": "84"
        },
        {
          "name": "KEYCODE_MEDIA_PLAY_PAUSE",
          "value": "85"
        },
        {
          "name": "KEYCODE_MEDIA_STOP",
          "value": "86"
        },
        {
          "name": "KEYCODE_MEDIA_NEXT",
          "value": "87"
        },
        {
          "name": "KEYCODE_MEDIA_PREVIOUS",
          "value": "88"
        },
        {
          "name": "KEYCODE_MEDIA_REWIND",
          "value": "89"
        },
        {
          "name": "KEYCODE_MEDIA_FAST_FORWARD",
          "value": "90"
        },
        {
          "name": "KEYCODE_MUTE",
          "value": "91"
        },
        {
          "name": "KEYCODE_PAGE_UP",
          "value": "92"
        },
        {
          "name": "KEYCODE_PAGE_DOWN",
          "value": "93"
        },
        {
          "name": "KEYCODE_PICTSYMBOLS",
          "value": "94"
        },
        {
          "name": "KEYCODE_SWITCH_CHARSET",
          "value": "95"
        },
        {
          "name": "KEYCODE_BUTTON_A",
          "value": "96"
        },
        {
          "name": "KEYCODE_BUTTON_B",
          "value": "97"
        },
        {
          "name": "KEYCODE_BUTTON_C",
          "value": "98"
        },
        {
          "name": "KEYCODE_BUTTON_X",
          "value": "99"
        },
        {
          "name": "KEYCODE_BUTTON_Y",
          "value": "100"
        },
        {
          "name": "KEYCODE_BUTTON_Z",
          "value": "101"
        },
        {
          "name": "KEYCODE_BUTTON_L1",
          "value": "102"
        },
        {
          "name": "KEYCODE_BUTTON_R1",
          "value": "103"
        },
        {
          "name": "KEYCODE_BUTTON_L2",
          "value": "104"
        },
        {
          "name": "KEYCODE_BUTTON_R2",
          "value": "105"
        },
        {
          "name": "KEYCODE_BUTTON_THUMBL",
          "value": "106"
        },
        {
          "name": "KEYCODE_BUTTON_THUMBR",
          "value": "107"
        },
        {
          "name": "KEYCODE_BUTTON_START",
          "value": "108"
        },
        {
          "name": "KEYCODE_BUTTON_SELECT",
          "value": "109"
        },
        {
          "name": "KEYCODE_BUTTON_MODE",
          "value": "110"
        },
        {
          "name": "KEYCODE_ESCAPE",
          "value": "111"
        },
        {
          "name": "KEYCODE_FORWARD_DEL",
          "value": "112"
        },
        {
          "name": "KEYCODE_CTRL_LEFT",
          "value": "113"
        },
        {
          "name": "KEYCODE_CTRL_RIGHT",
          "value": "114"
        },
        {
          "name": "KEYCODE_CAPS_LOCK",
          "value": "115"
        },
        {
          "name": "KEYCODE_SCROLL_LOCK",
          "value": "116"
        },
        {
          "name": "KEYCODE_META_LEFT",
          "value": "117"
        },
        {
          "name": "KEYCODE_META_RIGHT",
          "value": "118"
        },
        {
          "name": "KEYCODE_FUNCTION",
          "value": "119"
        },
        {
          "name": "KEYCODE_SYSRQ",
          "value": "120"
        },
        {
          "name": "KEYCODE_BREAK",
          "value": "121"
        },
        {
          "name": "KEYCODE_MOVE_HOME",
          "value": "122"
        },
        {
          "name": "KEYCODE_MOVE_END",
          "value": "123"
        },
        {
          "name": "KEYCODE_INSERT",
          "value": "124"
        },
        {
          "name": "KEYCODE_FORWARD",
          "value": "125"
        },
        {
          "name": "KEYCODE_MEDIA_PLAY",
          "value": "126"
        },
        {
          "name": "KEYCODE_MEDIA_PAUSE",
          "value": "127"
        },
        {
          "name": "KEYCODE_MEDIA_CLOSE",
          "value": "128"
        },
        {
          "name": "KEYCODE_MEDIA_EJECT",
          "value": "129"
        },
        {
          "name": "KEYCODE_MEDIA_RECORD",
          "value": "130"
        },
        {
          "name": "KEYCODE_F1",
          "value": "131"
        },
        {
          "name": "KEYCODE_F2",
          "value": "132"
        },
        {
          "name": "KEYCODE_F3",
          "value": "133"
        },
        {
          "name": "KEYCODE_F4",
          "value": "134"
        },
        {
          "name": "KEYCODE_F5",
          "value": "135"
        },
        {
          "name": "KEYCODE_F6",
          "value": "136"
        },
        {
          "name": "KEYCODE_F7",
          "value": "137"
        },
        {
          "name": "KEYCODE_F8",
          "value": "138"
        },
        {
          "name": "KEYCODE_F9",
          "value": "139"
        },
        {
          "name": "KEYCODE_F10",
          "value": "140"
        },
        {
          "name": "KEYCODE_F11",
          "value": "141"
        },
        {
          "name": "KEYCODE_F12",
          "value": "142"
        },
        {
          "name": "KEYCODE_NUM_LOCK",
          "value": "143"
        },
        {
          "name": "KEYCODE_NUMPAD_0",
          "value": "144"
        },
        {
          "name": "KEYCODE_NUMPAD_1",
          "value": "145"
        },
        {
          "name": "KEYCODE_NUMPAD_2",
          "value": "146"
        },
        {
          "name": "KEYCODE_NUMPAD_3",
          "value": "147"
        },
        {
          "name": "KEYCODE_NUMPAD_4",
          "value": "148"
        },
        {
          "name": "KEYCODE_NUMPAD_5",
          "value": "149"
        },
        {
          "name": "KEYCODE_NUMPAD_6",
          "value": "150"
        },
        {
          "name": "KEYCODE_NUMPAD_7",
          "value": "151"
        },
        {
          "name": "KEYCODE_NUMPAD_8",
          "value": "152"
        },
        {
          "name": "KEYCODE_NUMPAD_9",
          "value": "153"
        },
        {
          "name": "KEYCODE_NUMPAD_DIVIDE",
          "value": "154"
        },
        {
          "name": "KEYCODE_NUMPAD_MULTIPLY",
          "value": "155"
        },
        {
          "name": "KEYCODE_NUMPAD_SUBTRACT",
          "value": "156"
        },
        {
          "name": "KEYCODE_NUMPAD_ADD",
          "value": "157"
        },
        {
          "name": "KEYCODE_NUMPAD_DOT",
          "value": "158"
        },
        {
          "name": "KEYCODE_NUMPAD_COMMA",
          "value": "159"
        },
        {
          "name": "KEYCODE_NUMPAD_ENTER",
          "value": "160"
        },
        {
          "name": "KEYCODE_NUMPAD_EQUALS",
          "value": "161"
        },
        {
          "name": "KEYCODE_NUMPAD_LEFT_PAREN",
          "value": "162"
        },
        {
          "name": "KEYCODE_NUMPAD_RIGHT_PAREN",
          "value": "163"
        },
        {
          "name": "KEYCODE_VOLUME_MUTE",
          "value": "164"
        },
        {
          "name": "KEYCODE_INFO",
          "value": "165"
        },
        {
          "name": "KEYCODE_CHANNEL_UP",
          "value": "166"
        },
        {
          "name": "KEYCODE_CHANNEL_DOWN",
          "value": "167"
        },
        {
          "name": "KEYCODE_ZOOM_IN",
          "value": "168"
        },
        {
          "name": "KEYCODE_ZOOM_OUT",
          "value": "169"
        },
        {
          "name": "KEYCODE_TV",
          "value": "170"
        },
        {
          "name": "KEYCODE_WINDOW",
          "value": "171"
        },
        {
          "name": "KEYCODE_GUIDE",
          "value": "172"
        },
        {
          "name": "KEYCODE_DVR",
          "value": "173"
        },
        {
          "name": "KEYCODE_BOOKMARK",
          "value": "174"
        },
        {
          "name": "KEYCODE_CAPTIONS",
          "value": "175"
        },
        {
          "name": "KEYCODE_SETTINGS",
          "value": "176"
        },
        {
          "name": "KEYCODE_TV_POWER",
          "value": "177"
        },
        {
          "name": "KEYCODE_TV_INPUT",
          "value": "178"
        },
        {
          "name": "KEYCODE_STB_POWER",
          "value": "179"
        },
        {
          "name": "KEYCODE_STB_INPUT",
          "value": "180"
        },
        {
          "name": "KEYCODE_AVR_POWER",
          "value": "181"
        },
        {
          "name": "KEYCODE_AVR_INPUT",
          "value": "182"
        },
        {
          "name": "KEYCODE_PROG_GRED",
          "value": "183"
        },
        {
          "name": "KEYCODE_PROG_GREEN",
          "value": "184"
        },
        {
          "name": "KEYCODE_PROG_YELLOW",
          "value": "185"
        },
        {
          "name": "KEYCODE_PROG_BLUE",
          "value": "186"
        },
        {
          "name": "KEYCODE_APP_SWITCH",
          "value": "187"
        },
        {
          "name": "KEYCODE_BUTTON_1",
          "value": "188"
        },
        {
          "name": "KEYCODE_BUTTON_2",
          "value": "189"
        },
        {
          "name": "KEYCODE_BUTTON_3",
          "value": "190"
        },
        {
          "name": "KEYCODE_BUTTON_4",
          "value": "191"
        },
        {
          "name": "KEYCODE_BUTTON_5",
          "value": "192"
        },
        {
          "name": "KEYCODE_BUTTON_6",
          "value": "193"
        },
        {
          "name": "KEYCODE_BUTTON_7",
          "value": "194"
        },
        {
          "name": "KEYCODE_BUTTON_8",
          "value": "195"
        },
        {
          "name": "KEYCODE_BUTTON_9",
          "value": "196"
        },
        {
          "name": "KEYCODE_BUTTON_10",
          "value": "197"
        },
        {
          "name": "KEYCODE_BUTTON_11",
          "value": "198"
        },
        {
          "name": "KEYCODE_BUTTON_12",
          "value": "199"
        },
        {
          "name": "KEYCODE_BUTTON_13",
          "value": "200"
        },
        {
          "name": "KEYCODE_BUTTON_14",
          "value": "201"
        },
        {
          "name": "KEYCODE_BUTTON_15",
          "value": "202"
        },
        {
          "name": "KEYCODE_BUTTON_16",
          "value": "203"
        },
        {
          "name": "KEYCODE_LANGUAGE_SWITCH",
          "value": "204"
        },
        {
          "name": "KEYCODE_MANNER_MODE",
          "value": "205"
        },
        {
          "name": "KEYCODE_3D_MODE",
          "value": "206"
        },
        {
          "name": "KEYCODE_CONTACTS",
          "value": "207"
        },
        {
          "name": "KEYCODE_CALENDAR",
          "value": "208"
        },
        {
          "name": "KEYCODE_MUSIC",
          "value": "209"
        },
        {
          "name": "KEYCODE_CALCULATOR",
          "value": "210"
        },
        {
          "name": "KEYCODE_ZENKAKU_HANKAKU",
          "value": "211"
        },
        {
          "name": "KEYCODE_EISU",
          "value": "212"
        },
        {
          "name": "KEYCODE_MUHENKAN",
          "value": "213"
        },
        {
          "name": "KEYCODE_HENKAN",
          "value": "214"
        },
        {
          "name": "KEYCODE_KATAKANA_HIRAGANA",
          "value": "215"
        },
        {
          "name": "KEYCODE_YEN",
          "value": "216"
        },
        {
          "name": "KEYCODE_RO",
          "value": "217"
        },
        {
          "name": "KEYCODE_KANA",
          "value": "218"
        },
        {
          "name": "KEYCODE_ASSIST",
          "value": "219"
        },
        {
          "name": "KEYCODE_BRIGHTNESS_DOWN",
          "value": "220"
        },
        {
          "name": "KEYCODE_BRIGHTNESS_UP",
          "value": "221"
        },
        {
          "name": "KEYCODE_MEDIA_AUDIO_TRACK",
          "value": "222"
        }
      ]
    },
    {
      "name": "layout_childType",
      "format": [
        "enum"
      ],
      "enum": [
        {
          "name": "none",
          "value": "0"
        },
        {
          "name": "widget",
          "value": "1"
        },
        {
          "name": "challenge",
          "value": "2"
        },
        {
          "name": "userSwitcher",
          "value": "3"
        },
        {
          "name": "scrim",
          "value": "4"
        },
        {
          "name": "widgets",
          "value": "5"
        },
        {
          "name": "expandChallengeHandle",
          "value": "6"
        },
        {
          "name": "pageDeleteDropTarget",
          "value": "7"
        }
      ]
    }
  ],
  "styleables": {
    "Theme": {
      "name": "Theme",
      "attrs": [
        {
          "name": "colorForeground",
          "format": [
            "color"
          ]
        },
        {
          "name": "colorForegroundInverse",
          "format": [
            "color"
          ]
        },
        {
          "name": "colorBackground",
          "format": [
            "color"
          ]
        },
        {
          "name": "colorBackgroundCacheHint",
          "format": [
            "color"
          ]
        },
        {
          "name": "colorPressedHighlight",
          "format": [
            "color"
          ]
        },
        {
          "name": "colorLongPressedHighlight",
          "format": [
            "color"
          ]
        },
        {
          "name": "colorFocusedHighlight",
          "format": [
            "color"
          ]
        },
        {
          "name": "colorActivatedHighlight",
          "format": [
            "color"
          ]
        },
        {
          "name": "colorMultiSelectHighlight",
          "format": [
            "color"
          ]
        },
        {
          "name": "disabledAlpha",
          "format": [
            "float"
          ]
        },
        {
          "name": "backgroundDimAmount",
          "format": [
            "float"
          ]
        },
        {
          "name": "backgroundDimEnabled",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "textAppearance",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textAppearanceInverse",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textColorPrimary",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textColorSecondary",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textColorTertiary",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textColorPrimaryInverse",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textColorSecondaryInverse",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textColorTertiaryInverse",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textColorHintInverse",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textColorPrimaryDisableOnly",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textColorPrimaryInverseDisableOnly",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textColorPrimaryNoDisable",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textColorSecondaryNoDisable",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textColorPrimaryInverseNoDisable",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textColorSecondaryInverseNoDisable",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textColorSearchUrl",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textColorHighlightInverse",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textColorLinkInverse",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textColorAlertDialogListItem",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "searchWidgetCorpusItemBackground",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textAppearanceLarge",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textAppearanceMedium",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textAppearanceSmall",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textAppearanceLargeInverse",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textAppearanceMediumInverse",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textAppearanceSmallInverse",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textAppearanceSearchResultTitle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textAppearanceSearchResultSubtitle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textAppearanceButton",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textAppearanceLargePopupMenu",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textAppearanceSmallPopupMenu",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textAppearanceEasyCorrectSuggestion",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textAppearanceMisspelledSuggestion",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textAppearanceAutoCorrectionSuggestion",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textUnderlineColor",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "textUnderlineThickness",
          "format": [
            "reference",
            "dimension"
          ]
        },
        {
          "name": "editTextColor",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "editTextBackground",
          "format": [
            "reference"
          ]
        },
        {
          "name": "errorMessageBackground",
          "format": [
            "reference"
          ]
        },
        {
          "name": "errorMessageAboveBackground",
          "format": [
            "reference"
          ]
        },
        {
          "name": "candidatesTextStyleSpans",
          "format": [
            "reference",
            "string"
          ]
        },
        {
          "name": "textCheckMark",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textCheckMarkInverse",
          "format": [
            "reference"
          ]
        },
        {
          "name": "listChoiceIndicatorMultiple",
          "format": [
            "reference"
          ]
        },
        {
          "name": "listChoiceIndicatorSingle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "listChoiceBackgroundIndicator",
          "format": [
            "reference"
          ]
        },
        {
          "name": "activatedBackgroundIndicator",
          "format": [
            "reference"
          ]
        },
        {
          "name": "buttonStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "buttonStyleSmall",
          "format": [
            "reference"
          ]
        },
        {
          "name": "buttonStyleInset",
          "format": [
            "reference"
          ]
        },
        {
          "name": "buttonStyleToggle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "galleryItemBackground",
          "format": [
            "reference"
          ]
        },
        {
          "name": "listPreferredItemHeight",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "listPreferredItemHeightSmall",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "listPreferredItemHeightLarge",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "searchResultListItemHeight",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "listPreferredItemPaddingLeft",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "listPreferredItemPaddingRight",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "textAppearanceListItem",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textAppearanceListItemSmall",
          "format": [
            "reference"
          ]
        },
        {
          "name": "listDivider",
          "format": [
            "reference"
          ]
        },
        {
          "name": "listDividerAlertDialog",
          "format": [
            "reference"
          ]
        },
        {
          "name": "listSeparatorTextViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "expandableListPreferredItemPaddingLeft",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "expandableListPreferredChildPaddingLeft",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "expandableListPreferredItemIndicatorLeft",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "expandableListPreferredItemIndicatorRight",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "expandableListPreferredChildIndicatorLeft",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "expandableListPreferredChildIndicatorRight",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "dropdownListPreferredItemHeight",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "listPreferredItemPaddingStart",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "listPreferredItemPaddingEnd",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "windowBackground",
          "format": [
            "reference"
          ]
        },
        {
          "name": "windowFrame",
          "format": [
            "reference"
          ]
        },
        {
          "name": "windowNoTitle",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "windowFullscreen",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "windowOverscan",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "windowIsFloating",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "windowIsTranslucent",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "windowShowWallpaper",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "windowContentOverlay",
          "format": [
            "reference"
          ]
        },
        {
          "name": "windowTitleSize",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "windowTitleStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "windowTitleBackgroundStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "windowAnimationStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "windowActionBar",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "windowActionBarOverlay",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "windowActionModeOverlay",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "windowSplitActionBar",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "windowSoftInputMode",
          "format": [
            "flags"
          ],
          "flags": [
            {
              "name": "stateUnspecified",
              "value": "0"
            },
            {
              "name": "stateUnchanged",
              "value": "1"
            },
            {
              "name": "stateHidden",
              "value": "2"
            },
            {
              "name": "stateAlwaysHidden",
              "value": "3"
            },
            {
              "name": "stateVisible",
              "value": "4"
            },
            {
              "name": "stateAlwaysVisible",
              "value": "5"
            },
            {
              "name": "adjustUnspecified",
              "value": "0x00"
            },
            {
              "name": "adjustResize",
              "value": "0x10"
            },
            {
              "name": "adjustPan",
              "value": "0x20"
            },
            {
              "name": "adjustNothing",
              "value": "0x30"
            }
          ]
        },
        {
          "name": "windowDisablePreview",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "windowNoDisplay",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "windowEnableSplitTouch",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "windowCloseOnTouchOutside",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "windowTranslucentStatus",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "windowTranslucentNavigation",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "alertDialogStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "alertDialogButtonGroupStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "alertDialogCenterButtons",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "detailsElementBackground",
          "format": [
            "reference"
          ]
        },
        {
          "name": "panelBackground",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "panelFullBackground",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "panelColorForeground",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "panelColorBackground",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "panelTextAppearance",
          "format": [
            "reference"
          ]
        },
        {
          "name": "panelMenuIsCompact",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "panelMenuListWidth",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "panelMenuListTheme",
          "format": [
            "reference"
          ]
        },
        {
          "name": "absListViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "autoCompleteTextViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "checkboxStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "checkedTextViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "dropDownListViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "editTextStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "expandableListViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "expandableListViewWhiteStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "galleryStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "gestureOverlayViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "gridViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "imageButtonStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "imageWellStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "listViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "listViewWhiteStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "popupWindowStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "progressBarStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "progressBarStyleHorizontal",
          "format": [
            "reference"
          ]
        },
        {
          "name": "progressBarStyleSmall",
          "format": [
            "reference"
          ]
        },
        {
          "name": "progressBarStyleSmallTitle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "progressBarStyleLarge",
          "format": [
            "reference"
          ]
        },
        {
          "name": "progressBarStyleInverse",
          "format": [
            "reference"
          ]
        },
        {
          "name": "progressBarStyleSmallInverse",
          "format": [
            "reference"
          ]
        },
        {
          "name": "progressBarStyleLargeInverse",
          "format": [
            "reference"
          ]
        },
        {
          "name": "seekBarStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "ratingBarStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "ratingBarStyleIndicator",
          "format": [
            "reference"
          ]
        },
        {
          "name": "ratingBarStyleSmall",
          "format": [
            "reference"
          ]
        },
        {
          "name": "radioButtonStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "scrollViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "horizontalScrollViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "spinnerStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "dropDownSpinnerStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionDropDownStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionButtonStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "starStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "tabWidgetStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "webTextViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "webViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "dropDownItemStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "spinnerDropDownItemStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "dropDownHintAppearance",
          "format": [
            "reference"
          ]
        },
        {
          "name": "spinnerItemStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "mapViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "quickContactBadgeOverlay",
          "format": [
            "reference"
          ]
        },
        {
          "name": "quickContactBadgeStyleWindowSmall",
          "format": [
            "reference"
          ]
        },
        {
          "name": "quickContactBadgeStyleWindowMedium",
          "format": [
            "reference"
          ]
        },
        {
          "name": "quickContactBadgeStyleWindowLarge",
          "format": [
            "reference"
          ]
        },
        {
          "name": "quickContactBadgeStyleSmallWindowSmall",
          "format": [
            "reference"
          ]
        },
        {
          "name": "quickContactBadgeStyleSmallWindowMedium",
          "format": [
            "reference"
          ]
        },
        {
          "name": "quickContactBadgeStyleSmallWindowLarge",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textSelectHandleWindowStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textSuggestionsWindowStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "listPopupWindowStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "popupMenuStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "stackViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "numberPickerStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "calendarViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "timePickerStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "datePickerStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "activityChooserViewStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "fastScrollThumbDrawable",
          "format": [
            "reference"
          ]
        },
        {
          "name": "fastScrollPreviewBackgroundRight",
          "format": [
            "reference"
          ]
        },
        {
          "name": "fastScrollPreviewBackgroundLeft",
          "format": [
            "reference"
          ]
        },
        {
          "name": "fastScrollTrackDrawable",
          "format": [
            "reference"
          ]
        },
        {
          "name": "fastScrollOverlayPosition",
          "format": [
            "enum"
          ],
          "enum": [
            {
              "name": "floating",
              "value": "0"
            },
            {
              "name": "atThumb",
              "value": "1"
            }
          ]
        },
        {
          "name": "fastScrollTextColor",
          "format": [
            "color"
          ]
        },
        {
          "name": "actionBarTabStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionBarTabBarStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionBarTabTextStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionOverflowButtonStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionBarStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionBarSplitStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionBarWidgetTheme",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionBarSize",
          "format": [
            "dimension",
            "enum"
          ],
          "enum": [
            {
              "name": "wrap_content",
              "value": "0"
            }
          ]
        },
        {
          "name": "actionBarDivider",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionBarItemBackground",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionMenuTextAppearance",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionMenuTextColor",
          "format": [
            "color",
            "reference"
          ]
        },
        {
          "name": "actionModeStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionModeCloseButtonStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionModeBackground",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionModeSplitBackground",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionModeCloseDrawable",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionModeCutDrawable",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionModeCopyDrawable",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionModePasteDrawable",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionModeSelectAllDrawable",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionModeShareDrawable",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionModeFindDrawable",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionModeWebSearchDrawable",
          "format": [
            "reference"
          ]
        },
        {
          "name": "actionModePopupWindowStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "preferenceScreenStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "preferenceFragmentStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "preferenceCategoryStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "preferenceStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "preferenceInformationStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "checkBoxPreferenceStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "yesNoPreferenceStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "dialogPreferenceStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "editTextPreferenceStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "ringtonePreferenceStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "preferenceLayoutChild",
          "format": [
            "reference"
          ]
        },
        {
          "name": "preferencePanelStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "preferenceHeaderPanelStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "preferenceListStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "preferenceFragmentListStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "preferenceFragmentPaddingSide",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "switchPreferenceStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textSelectHandleLeft",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textSelectHandleRight",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textSelectHandle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textEditPasteWindowLayout",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textEditNoPasteWindowLayout",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textEditSidePasteWindowLayout",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textEditSideNoPasteWindowLayout",
          "format": [
            "reference"
          ]
        },
        {
          "name": "textEditSuggestionItemLayout",
          "format": [
            "reference"
          ]
        },
        {
          "name": "dialogTheme",
          "format": [
            "reference"
          ]
        },
        {
          "name": "dialogTitleIconsDecorLayout",
          "format": [
            "reference"
          ]
        },
        {
          "name": "dialogCustomTitleDecorLayout",
          "format": [
            "reference"
          ]
        },
        {
          "name": "dialogTitleDecorLayout",
          "format": [
            "reference"
          ]
        },
        {
          "name": "alertDialogTheme",
          "format": [
            "reference"
          ]
        },
        {
          "name": "alertDialogIcon",
          "format": [
            "reference"
          ]
        },
        {
          "name": "presentationTheme",
          "format": [
            "reference"
          ]
        },
        {
          "name": "dividerVertical",
          "format": [
            "reference"
          ]
        },
        {
          "name": "dividerHorizontal",
          "format": [
            "reference"
          ]
        },
        {
          "name": "buttonBarStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "buttonBarButtonStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "segmentedButtonStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "selectableItemBackground",
          "format": [
            "reference"
          ]
        },
        {
          "name": "borderlessButtonStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "toastFrameBackground",
          "format": [
            "reference"
          ]
        },
        {
          "name": "searchDropdownBackground",
          "format": [
            "reference"
          ]
        },
        {
          "name": "searchViewCloseIcon",
          "format": [
            "reference"
          ]
        },
        {
          "name": "searchViewGoIcon",
          "format": [
            "reference"
          ]
        },
        {
          "name": "searchViewSearchIcon",
          "format": [
            "reference"
          ]
        },
        {
          "name": "searchViewVoiceIcon",
          "format": [
            "reference"
          ]
        },
        {
          "name": "searchViewEditQuery",
          "format": [
            "reference"
          ]
        },
        {
          "name": "searchViewEditQueryBackground",
          "format": [
            "reference"
          ]
        },
        {
          "name": "searchViewTextField",
          "format": [
            "reference"
          ]
        },
        {
          "name": "searchViewTextFieldRight",
          "format": [
            "reference"
          ]
        },
        {
          "name": "searchDialogTheme",
          "format": [
            "reference"
          ]
        },
        {
          "name": "homeAsUpIndicator",
          "format": [
            "reference"
          ]
        },
        {
          "name": "preferenceFrameLayoutStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "switchStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "mediaRouteButtonStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "pointerStyle",
          "format": [
            "reference"
          ]
        },
        {
          "name": "accessibilityFocusedDrawable",
          "format": [
            "reference"
          ]
        },
        {
          "name": "findOnPageNextDrawable",
          "format": [
            "reference"
          ]
        },
        {
          "name": "findOnPagePreviousDrawable",
          "format": [
            "reference"
          ]
        }
      ]
    },
    "Window": {
      "name": "Window",
      "attrs": [
        {
          "name": "windowBackground",
          "format": []
        },
        {
          "name": "windowContentOverlay",
          "format": []
        },
        {
          "name": "windowFrame",
          "format": []
        },
        {
          "name": "windowNoTitle",
          "format": []
        },
        {
          "name": "windowFullscreen",
          "format": []
        },
        {
          "name": "windowOverscan",
          "format": []
        },
        {
          "name": "windowIsFloating",
          "format": []
        },
        {
          "name": "windowIsTranslucent",
          "format": []
        },
        {
          "name": "windowShowWallpaper",
          "format": []
        },
        {
          "name": "windowAnimationStyle",
          "format": []
        },
        {
          "name": "windowSoftInputMode",
          "format": []
        },
        {
          "name": "windowDisablePreview",
          "format": []
        },
        {
          "name": "windowNoDisplay",
          "format": []
        },
        {
          "name": "textColor",
          "format": []
        },
        {
          "name": "backgroundDimEnabled",
          "format": []
        },
        {
          "name": "backgroundDimAmount",
          "format": []
        },
        {
          "name": "windowActionBar",
          "format": []
        },
        {
          "name": "windowActionModeOverlay",
          "format": []
        },
        {
          "name": "windowActionBarOverlay",
          "format": []
        },
        {
          "name": "windowSplitActionBar",
          "format": []
        },
        {
          "name": "windowEnableSplitTouch",
          "format": []
        },
        {
          "name": "windowCloseOnTouchOutside",
          "format": []
        },
        {
          "name": "windowTranslucentStatus",
          "format": []
        },
        {
          "name": "windowTranslucentNavigation",
          "format": []
        },
        {
          "name": "windowMinWidthMajor",
          "format": [
            "dimension",
            "fraction"
          ]
        },
        {
          "name": "windowMinWidthMinor",
          "format": [
            "dimension",
            "fraction"
          ]
        },
        {
          "name": "windowFixedWidthMajor",
          "format": [
            "dimension",
            "fraction"
          ]
        },
        {
          "name": "windowFixedHeightMinor",
          "format": [
            "dimension",
            "fraction"
          ]
        },
        {
          "name": "windowFixedWidthMinor",
          "format": [
            "dimension",
            "fraction"
          ]
        },
        {
          "name": "windowFixedHeightMajor",
          "format": [
            "dimension",
            "fraction"
          ]
        }
      ]
    },
    "AlertDialog": {
      "name": "AlertDialog",
      "attrs": [
        {
          "name": "fullDark",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "topDark",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "centerDark",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "bottomDark",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "fullBright",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "topBright",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "centerBright",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "bottomBright",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "bottomMedium",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "centerMedium",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "layout",
          "format": []
        },
        {
          "name": "listLayout",
          "format": [
            "reference"
          ]
        },
        {
          "name": "multiChoiceItemLayout",
          "format": [
            "reference"
          ]
        },
        {
          "name": "singleChoiceItemLayout",
          "format": [
            "reference"
          ]
        },
        {
          "name": "listItemLayout",
          "format": [
            "reference"
          ]
        },
        {
          "name": "progressLayout",
          "format": [
            "reference"
          ]
        },
        {
          "name": "horizontalProgressLayout",
          "format": [
            "reference"
          ]
        }
      ]
    },
    "FragmentAnimation": {
      "name": "FragmentAnimation",
      "attrs": [
        {
          "name": "fragmentOpenEnterAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "fragmentOpenExitAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "fragmentCloseEnterAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "fragmentCloseExitAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "fragmentFadeEnterAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "fragmentFadeExitAnimation",
          "format": [
            "reference"
          ]
        }
      ]
    },
    "WindowAnimation": {
      "name": "WindowAnimation",
      "attrs": [
        {
          "name": "windowEnterAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "windowExitAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "windowShowAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "windowHideAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "activityOpenEnterAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "activityOpenExitAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "activityCloseEnterAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "activityCloseExitAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "taskOpenEnterAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "taskOpenExitAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "taskCloseEnterAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "taskCloseExitAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "taskToFrontEnterAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "taskToFrontExitAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "taskToBackEnterAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "taskToBackExitAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "wallpaperOpenEnterAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "wallpaperOpenExitAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "wallpaperCloseEnterAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "wallpaperCloseExitAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "wallpaperIntraOpenEnterAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "wallpaperIntraOpenExitAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "wallpaperIntraCloseEnterAnimation",
          "format": [
            "reference"
          ]
        },
        {
          "name": "wallpaperIntraCloseExitAnimation",
          "format": [
            "reference"
          ]
        }
      ]
    },
    "View": {
      "name": "View",
      "attrs": [
        {
          "name": "id",
          "format": [
            "reference"
          ]
        },
        {
          "name": "tag",
          "format": [
            "string"
          ]
        },
        {
          "name": "scrollX",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "scrollY",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "background",
          "format": [
            "reference",
            "color"
          ]
        },
        {
          "name": "padding",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "paddingLeft",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "paddingTop",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "paddingRight",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "paddingBottom",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "paddingStart",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "paddingEnd",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "focusable",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "focusableInTouchMode",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "visibility",
          "format": [
            "enum"
          ],
          "enum": [
            {
              "name": "visible",
              "value": "0"
            },
            {
              "name": "invisible",
              "value": "1"
            },
            {
              "name": "gone",
              "value": "2"
            }
          ]
        },
        {
          "name": "fitsSystemWindows",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "scrollbars",
          "format": [
            "flags"
          ],
          "flags": [
            {
              "name": "horizontal",
              "value": "0x00000100"
            },
            {
              "name": "vertical",
              "value": "0x00000200"
            }
          ]
        },
        {
          "name": "scrollbarStyle",
          "format": [
            "enum"
          ],
          "enum": [
            {
              "name": "insideOverlay",
              "value": "0x0"
            },
            {
              "name": "insideInset",
              "value": "0x01000000"
            },
            {
              "name": "outsideOverlay",
              "value": "0x02000000"
            },
            {
              "name": "outsideInset",
              "value": "0x03000000"
            }
          ]
        },
        {
          "name": "isScrollContainer",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "fadeScrollbars",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "scrollbarFadeDuration",
          "format": [
            "integer"
          ]
        },
        {
          "name": "scrollbarDefaultDelayBeforeFade",
          "format": [
            "integer"
          ]
        },
        {
          "name": "scrollbarSize",
          "format": [
            "dimension"
          ]
        },
        {
          "name": "scrollbarThumbHorizontal",
          "format": [
            "reference"
          ]
        },
        {
          "name": "scrollbarThumbVertical",
          "format": [
            "reference"
          ]
        },
        {
          "name": "scrollbarTrackHorizontal",
          "format": [
            "reference"
          ]
        },
        {
          "name": "scrollbarTrackVertical",
          "format": [
            "reference"
          ]
        },
        {
          "name": "scrollbarAlwaysDrawHorizontalTrack",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "scrollbarAlwaysDrawVerticalTrack",
          "format": [
            "boolean"
          ]
        },
        {
          "name": "fadingEdge",
          "format": [
            "flags"
          ],
          "flags": [
            {
              "name": "none",
              "value": "0x00000000"
            },
            {
              "name": "horizontal",
              "value": "0x00001000"
            },
            {
  
Download .txt
gitextract_fw5cbrlj/

├── .gitignore
├── .idea/
│   └── runConfigurations/
│       └── Android_Studio.xml
├── CHANGELOG.md
├── GOODBYE.md
├── LICENSE
├── README.md
├── anko/
│   ├── idea-plugin/
│   │   ├── attrs/
│   │   │   ├── build.gradle
│   │   │   └── src/
│   │   │       └── org/
│   │   │           └── jetbrains/
│   │   │               └── kotlin/
│   │   │                   └── android/
│   │   │                       └── Attrs.kt
│   │   ├── build.gradle
│   │   ├── idea-runner/
│   │   │   └── build.gradle
│   │   ├── intentions/
│   │   │   ├── build.gradle
│   │   │   └── src/
│   │   │       └── org/
│   │   │           └── jetbrains/
│   │   │               └── anko/
│   │   │                   └── idea/
│   │   │                       └── intentions/
│   │   │                           ├── AnkoIntention.kt
│   │   │                           ├── FindViewByIdIntention.kt
│   │   │                           ├── ReplaceColorGrayOpaqueIntention.kt
│   │   │                           └── ToastMakeTextShowIntention.kt
│   │   ├── plugin-classpath/
│   │   │   └── build.gradle
│   │   ├── preview/
│   │   │   ├── build.gradle
│   │   │   ├── resources/
│   │   │   │   ├── META-INF/
│   │   │   │   │   └── plugin.xml
│   │   │   │   └── intentionDescriptions/
│   │   │   │       ├── FindViewByIdIntention/
│   │   │   │       │   ├── after.kt.template
│   │   │   │       │   ├── before.kt.template
│   │   │   │       │   └── description.html
│   │   │   │       ├── ReplaceColorGrayOpaqueIntention/
│   │   │   │       │   ├── after.kt.template
│   │   │   │       │   ├── before.kt.template
│   │   │   │       │   └── description.html
│   │   │   │       └── ToastMakeTextShowIntention/
│   │   │   │           ├── after.kt.template
│   │   │   │           ├── before.kt.template
│   │   │   │           └── description.html
│   │   │   └── src/
│   │   │       └── org/
│   │   │           └── jetbrains/
│   │   │               └── kotlin/
│   │   │                   └── android/
│   │   │                       └── dslpreview/
│   │   │                           ├── AnkoNlPreviewManager.kt
│   │   │                           ├── AnkoViewLoaderExtension.kt
│   │   │                           ├── DslPreviewClassResolver.kt
│   │   │                           ├── LayoutPsiFile.kt
│   │   │                           ├── PreviewClassDescription.kt
│   │   │                           ├── SourceFileModificationTracker.kt
│   │   │                           └── UpdateActivityNameTask.kt
│   │   └── xml-converter/
│   │       ├── build.gradle
│   │       ├── resources/
│   │       │   ├── attrs.json
│   │       │   └── views.json
│   │       ├── src/
│   │       │   └── org/
│   │       │       └── jetbrains/
│   │       │           └── kotlin/
│   │       │               └── android/
│   │       │                   └── xmlconverter/
│   │       │                       ├── AttributeOptimizer.kt
│   │       │                       ├── AttributeParser.kt
│   │       │                       ├── ConvertAction.kt
│   │       │                       ├── LayoutAttributeRenderer.kt
│   │       │                       ├── Util.kt
│   │       │                       ├── ViewAttributeRenderer.kt
│   │       │                       └── XmlConverter.kt
│   │       ├── test/
│   │       │   └── org/
│   │       │       └── jetbrains/
│   │       │           └── kotlin/
│   │       │               └── android/
│   │       │                   └── xmlconverter/
│   │       │                       ├── BaseXmlConverterTest.java
│   │       │                       └── XmlConverterTest.kt
│   │       └── testData/
│   │           ├── attributes/
│   │           │   ├── layout.kt
│   │           │   └── layout.xml
│   │           ├── dimensions/
│   │           │   ├── layout.kt
│   │           │   └── layout.xml
│   │           ├── linearLayout/
│   │           │   ├── layout.kt
│   │           │   └── layout.xml
│   │           ├── relativeLayout/
│   │           │   ├── layout.kt
│   │           │   └── layout.xml
│   │           └── simple/
│   │               ├── layout.kt
│   │               └── layout.xml
│   ├── library/
│   │   ├── generated/
│   │   │   ├── anko/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           └── AndroidManifest.xml
│   │   │   ├── appcompat-v7/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               └── Views.kt
│   │   │   ├── appcompat-v7-commons/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           └── AndroidManifest.xml
│   │   │   ├── appcompat-v7-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── appcompat-v7-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── cardview-v7/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               └── Views.kt
│   │   │   ├── common/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           └── AndroidManifest.xml
│   │   │   ├── commons/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           └── AndroidManifest.xml
│   │   │   ├── constraint-layout/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               └── Views.kt
│   │   │   ├── coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── bg.kt
│   │   │   │               └── weakReferenceSupport.kt
│   │   │   ├── design/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               └── Views.kt
│   │   │   ├── design-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── design-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── gridlayout-v7/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               └── Views.kt
│   │   │   ├── percent/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               └── Views.kt
│   │   │   ├── recyclerview-v7/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               └── Views.kt
│   │   │   ├── recyclerview-v7-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── recyclerview-v7-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── sdk15/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               ├── Services.kt
│   │   │   │               └── Views.kt
│   │   │   ├── sdk15-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── sdk15-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── sdk19/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               ├── Services.kt
│   │   │   │               └── Views.kt
│   │   │   ├── sdk19-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── sdk19-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── sdk21/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               ├── Services.kt
│   │   │   │               └── Views.kt
│   │   │   ├── sdk21-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── sdk21-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── sdk23/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               ├── Services.kt
│   │   │   │               └── Views.kt
│   │   │   ├── sdk23-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── sdk23-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── sdk25/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               ├── Services.kt
│   │   │   │               └── Views.kt
│   │   │   ├── sdk25-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── sdk25-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── sdk27/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               ├── Services.kt
│   │   │   │               └── Views.kt
│   │   │   ├── sdk27-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── sdk27-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── sdk28/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Properties.kt
│   │   │   │               ├── Services.kt
│   │   │   │               └── Views.kt
│   │   │   ├── sdk28-coroutines/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ListenersWithCoroutines.kt
│   │   │   ├── sdk28-listeners/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Listeners.kt
│   │   │   ├── sqlite/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── SqlParserHelpers.kt
│   │   │   ├── support-v4/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── Layouts.kt
│   │   │   │               ├── Listeners.kt
│   │   │   │               └── Views.kt
│   │   │   └── support-v4-commons/
│   │   │       ├── build.gradle
│   │   │       └── src/
│   │   │           └── main/
│   │   │               └── AndroidManifest.xml
│   │   ├── generator/
│   │   │   ├── build.gradle
│   │   │   ├── src/
│   │   │   │   └── org/
│   │   │   │       └── jetbrains/
│   │   │   │           └── android/
│   │   │   │               └── anko/
│   │   │   │                   ├── ClassProcessor.kt
│   │   │   │                   ├── annotations/
│   │   │   │                   │   ├── AnnotationManager.kt
│   │   │   │                   │   └── annotationProviders.kt
│   │   │   │                   ├── artifact/
│   │   │   │                   │   └── Artifact.kt
│   │   │   │                   ├── config/
│   │   │   │                   │   ├── AnkoConfiguration.kt
│   │   │   │                   │   ├── AnkoFile.kt
│   │   │   │                   │   ├── ArtifactType.kt
│   │   │   │                   │   ├── ConfigurationKey.kt
│   │   │   │                   │   ├── DefaultAnkoConfiguration.kt
│   │   │   │                   │   ├── GeneratorContext.kt
│   │   │   │                   │   ├── Logger.kt
│   │   │   │                   │   ├── Props.kt
│   │   │   │                   │   └── configurationKeys.kt
│   │   │   │                   ├── generator/
│   │   │   │                   │   ├── GenerationState.kt
│   │   │   │                   │   ├── LayoutGenerator.kt
│   │   │   │                   │   ├── ListenerGenerator.kt
│   │   │   │                   │   ├── PropertyGenerator.kt
│   │   │   │                   │   ├── ServiceGenerator.kt
│   │   │   │                   │   ├── dslElements.kt
│   │   │   │                   │   ├── layoutParamsUtils.kt
│   │   │   │                   │   └── viewClassGenerators.kt
│   │   │   │                   ├── main.kt
│   │   │   │                   ├── render/
│   │   │   │                   │   ├── LayoutRenderer.kt
│   │   │   │                   │   ├── ListenerRenderer.kt
│   │   │   │                   │   ├── PropertyRenderer.kt
│   │   │   │                   │   ├── RenderFacade.kt
│   │   │   │                   │   ├── ServiceRenderer.kt
│   │   │   │                   │   ├── SqlParserHelperRenderer.kt
│   │   │   │                   │   ├── viewConstructorUtils.kt
│   │   │   │                   │   └── viewRenderers.kt
│   │   │   │                   ├── sources/
│   │   │   │                   │   ├── SourceManager.kt
│   │   │   │                   │   └── sourceProviders.kt
│   │   │   │                   ├── templates/
│   │   │   │                   │   ├── JtwigTemplateProvider.kt
│   │   │   │                   │   ├── MustacheTemplateProvider.kt
│   │   │   │                   │   └── TemplateManager.kt
│   │   │   │                   ├── utils/
│   │   │   │                   │   ├── Buffer.kt
│   │   │   │                   │   ├── ClassInfo.kt
│   │   │   │                   │   ├── ClassTree.kt
│   │   │   │                   │   ├── ClassTreeUtils.kt
│   │   │   │                   │   ├── ImportList.kt
│   │   │   │                   │   ├── KMethod.kt
│   │   │   │                   │   ├── KType.kt
│   │   │   │                   │   ├── KVariable.kt
│   │   │   │                   │   ├── MethodInfo.kt
│   │   │   │                   │   ├── Property.kt
│   │   │   │                   │   ├── ReflectionUtils.kt
│   │   │   │                   │   ├── SignatureParser.kt
│   │   │   │                   │   ├── Types.kt
│   │   │   │                   │   ├── stringUtils.kt
│   │   │   │                   │   └── utils.kt
│   │   │   │                   └── writer/
│   │   │   │                       ├── AbstractWriter.kt
│   │   │   │                       ├── GeneratorWriter.kt
│   │   │   │                       └── VerifyWriter.kt
│   │   │   └── test/
│   │   │       └── org/
│   │   │           └── jetbrains/
│   │   │               └── android/
│   │   │                   └── anko/
│   │   │                       └── ClassTreeTest.java
│   │   ├── library.gradle
│   │   ├── robolectricTests/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── local.properties
│   │   │   └── src/
│   │   │       ├── main/
│   │   │       │   ├── AndroidManifest.xml
│   │   │       │   └── java/
│   │   │       │       ├── AndroidLayoutParamsTestActivity.kt
│   │   │       │       ├── AndroidLayoutsTestActivity.kt
│   │   │       │       ├── AndroidListenerHelpersTestActivity.kt
│   │   │       │       ├── AndroidMultiMethodListenersActivity.kt
│   │   │       │       ├── AndroidPropertiesTestActivity.kt
│   │   │       │       ├── AndroidSimpleTestActivity.kt
│   │   │       │       ├── AndroidWidgetTestActivity.kt
│   │   │       │       └── README.md
│   │   │       └── test/
│   │   │           └── java/
│   │   │               ├── AnkoLoggerTest.kt
│   │   │               ├── AnkoSQliteTest.kt
│   │   │               ├── AttemptTest.kt
│   │   │               ├── BuildSpannedTest.kt
│   │   │               ├── BundleOfTest.kt
│   │   │               ├── ChildrenSequenceTest.kt
│   │   │               ├── ClassParserTest.kt
│   │   │               ├── CollectionsTest.kt
│   │   │               ├── CreateIntentTest.kt
│   │   │               ├── DialogsTest.kt
│   │   │               ├── FindViewTest.kt
│   │   │               ├── IntentForTest.kt
│   │   │               ├── RelativeLayoutHelpersTest.kt
│   │   │               ├── ServiceTest.kt
│   │   │               ├── SimpleTest.kt
│   │   │               ├── SparseArraysTest.kt
│   │   │               └── WithArgumentsTest.kt
│   │   ├── static/
│   │   │   ├── appcompatV7/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── SupportAlertBuilder.kt
│   │   │   ├── commons/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── AnkoContext.kt
│   │   │   │               ├── Async.kt
│   │   │   │               ├── ContextUtils.kt
│   │   │   │               ├── Custom.kt
│   │   │   │               ├── Deprecated.kt
│   │   │   │               ├── Dimensions.kt
│   │   │   │               ├── Helpers.kt
│   │   │   │               ├── Intents.kt
│   │   │   │               ├── Internals.kt
│   │   │   │               ├── Logging.kt
│   │   │   │               ├── RelativeLayoutLayoutParamsHelpers.kt
│   │   │   │               ├── SharedPreferences.kt
│   │   │   │               ├── Theme.kt
│   │   │   │               ├── Ui.kt
│   │   │   │               ├── buildSpanned.kt
│   │   │   │               ├── collections/
│   │   │   │               │   ├── Arrays.kt
│   │   │   │               │   ├── Collections.kt
│   │   │   │               │   └── SparseArrays.kt
│   │   │   │               ├── dialogs/
│   │   │   │               │   ├── AlertBuilder.kt
│   │   │   │               │   ├── AlertDialogBuilder.kt
│   │   │   │               │   ├── AndroidAlertBuilder.kt
│   │   │   │               │   ├── AndroidDialogs.kt
│   │   │   │               │   ├── AndroidSelectors.kt
│   │   │   │               │   ├── Dialogs.kt
│   │   │   │               │   ├── Selectors.kt
│   │   │   │               │   └── Toasts.kt
│   │   │   │               ├── menuItemsSequences.kt
│   │   │   │               └── viewChildrenSequences.kt
│   │   │   ├── constraint-layout/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── ConstraintLayout.kt
│   │   │   ├── design/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               └── Snackbar.kt
│   │   │   ├── platform/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── CustomLayoutProperties.kt
│   │   │   │               ├── CustomServices.kt
│   │   │   │               ├── CustomViewProperties.kt
│   │   │   │               ├── CustomViews.kt
│   │   │   │               ├── InputConstraints.kt
│   │   │   │               └── Menus.kt
│   │   │   ├── sqlite/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           └── java/
│   │   │   │               ├── ClassParser.kt
│   │   │   │               ├── Database.kt
│   │   │   │               ├── SelectQueryBuilder.kt
│   │   │   │               ├── SqlParsers.kt
│   │   │   │               ├── UpdateQueryBuilder.kt
│   │   │   │               ├── org/
│   │   │   │               │   └── jetbrains/
│   │   │   │               │       └── anko/
│   │   │   │               │           └── db/
│   │   │   │               │               └── JavaSqliteUtils.java
│   │   │   │               └── sqlTypes.kt
│   │   │   └── supportV4/
│   │   │       ├── build.gradle
│   │   │       └── src/
│   │   │           └── main/
│   │   │               ├── AndroidManifest.xml
│   │   │               └── java/
│   │   │                   ├── Support.kt
│   │   │                   ├── SupportAsync.kt
│   │   │                   ├── SupportContextUtils.kt
│   │   │                   ├── SupportDialogs.kt
│   │   │                   ├── SupportDimensions.kt
│   │   │                   └── SupportIntents.kt
│   │   ├── stubs/
│   │   │   ├── build.gradle
│   │   │   └── src/
│   │   │       └── main/
│   │   │           ├── AndroidManifest.xml
│   │   │           └── java/
│   │   │               └── Stubs.kt
│   │   └── testUtils/
│   │       ├── build.gradle
│   │       └── src/
│   │           ├── com/
│   │           │   └── intellij/
│   │           │       └── rt/
│   │           │           └── execution/
│   │           │               └── junit/
│   │           │                   ├── FileComparisonFailure.java
│   │           │                   └── KnownException.kt
│   │           └── org/
│   │               └── jetbrains/
│   │                   └── anko/
│   │                       └── test/
│   │                           └── testUtils.kt
│   └── props/
│       ├── annotations/
│       │   └── android/
│       │       ├── support/
│       │       │   └── v7/
│       │       │       └── widget/
│       │       │           └── annotations.xml
│       │       ├── view/
│       │       │   └── annotations.xml
│       │       └── widget/
│       │           └── annotations.xml
│       ├── configuration.json
│       ├── excluded_methods.txt
│       ├── excluded_properties.txt
│       ├── helper_constructors.txt
│       ├── imports_properties.txt
│       ├── imports_sqliteparserhelpers.txt
│       ├── imports_views.txt
│       ├── kotlin-android-sdk-annotations-1.0.0.jar
│       ├── properties_without_getters.txt
│       └── templates/
│           ├── complex_listener.twig
│           ├── complex_listener_coroutines.twig
│           ├── layout.twig
│           ├── services.twig
│           ├── simple_listener.mustache
│           ├── simple_listener_coroutines.twig
│           ├── sql_parser_helpers.twig
│           └── view.mustache
├── build.gradle
├── download_android_sdk.xml
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
├── update_dependencies.xml
└── update_dependencies_idea.xml
Download .txt
SYMBOL INDEX (23 symbols across 4 files)

FILE: anko/idea-plugin/xml-converter/test/org/jetbrains/kotlin/android/xmlconverter/BaseXmlConverterTest.java
  class BaseXmlConverterTest (line 14) | public class BaseXmlConverterTest {
    method doLayoutTest (line 19) | protected void doLayoutTest() {
    method decapitalize (line 39) | private String decapitalize(String original) {

FILE: anko/library/generator/test/org/jetbrains/android/anko/ClassTreeTest.java
  class ClassTreeTest (line 29) | public class ClassTreeTest extends Assert {
    method setUp (line 34) | @Before
    method doAdd (line 51) | private void doAdd(ClassTree target) {
    method testAdd (line 57) | @Test
    method testIsChild (line 63) | @Test
    method testIsSuccessorOf (line 72) | @Test
    method testNoSuchClassException (line 90) | @Test(expected = NoSuchClassException.class)
    method testTreeIterator (line 98) | @Test
    method createNode (line 111) | private static ClassNode createNode(String name, String superName) {

FILE: anko/library/static/sqlite/src/main/java/org/jetbrains/anko/db/JavaSqliteUtils.java
  class JavaSqliteUtils (line 7) | class JavaSqliteUtils {
    method JavaSqliteUtils (line 8) | private JavaSqliteUtils() {}
    method wrap (line 10) | @SuppressWarnings("unchecked")
    method newInstance (line 30) | static <T> T newInstance(Constructor<T> constructor, Object[] argument...

FILE: anko/library/testUtils/src/com/intellij/rt/execution/junit/FileComparisonFailure.java
  class FileComparisonFailure (line 10) | public class FileComparisonFailure extends ComparisonFailure implements ...
    method FileComparisonFailure (line 16) | public FileComparisonFailure(String message, String expected, String a...
    method FileComparisonFailure (line 20) | public FileComparisonFailure(String message, String expected, String a...
    method getFilePath (line 28) | public String getFilePath() {
    method getActualFilePath (line 32) | public String getActualFilePath() {
    method getExpected (line 36) | public String getExpected() {
    method getActual (line 40) | public String getActual() {
Condensed preview — 396 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,051K chars).
[
  {
    "path": ".gitignore",
    "chars": 111,
    "preview": "/dependencies/\n/ideaSDK/\nbuild/\n.DS_Store\n*.iml\n.gradle\n/out\n.idea/*\n!.idea/runConfigurations\nlocal.properties\n"
  },
  {
    "path": ".idea/runConfigurations/Android_Studio.xml",
    "chars": 3163,
    "preview": "<component name=\"ProjectRunConfigurationManager\">\n    <configuration default=\"false\" name=\"Android Studio\" type=\"Applica"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 15123,
    "preview": "## Change Log\n\n### Anko 0.10.5 *(2018-04-28)*\n\n- [DSL for ConstraintLayout](https://github.com/Kotlin/anko/wiki/Constrai"
  },
  {
    "path": "GOODBYE.md",
    "chars": 2812,
    "preview": "# Discontinuing Anko\n\nOver the last few months, we have received quite a few questions from our users regarding the futu"
  },
  {
    "path": "LICENSE",
    "chars": 11325,
    "preview": "Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licens"
  },
  {
    "path": "README.md",
    "chars": 7342,
    "preview": "[![obsolete JetBrains project](https://jb.gg/badges/obsolete.svg)](https://confluence.jetbrains.com/display/ALL/JetBrain"
  },
  {
    "path": "anko/idea-plugin/attrs/build.gradle",
    "chars": 247,
    "preview": "apply plugin: 'kotlin'\n\nsourceSets {\n    main {\n        java.srcDirs = ['src']\n        kotlin.srcDirs = ['src']\n    }\n}\n"
  },
  {
    "path": "anko/idea-plugin/attrs/src/org/jetbrains/kotlin/android/Attrs.kt",
    "chars": 1362,
    "preview": "/*\n * Copyright 2016 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may n"
  },
  {
    "path": "anko/idea-plugin/build.gradle",
    "chars": 317,
    "preview": "subprojects {\n    apply plugin: 'kotlin'\n\n    sourceSets {\n        main {\n            java.srcDirs = ['src', 'resources'"
  },
  {
    "path": "anko/idea-plugin/idea-runner/build.gradle",
    "chars": 126,
    "preview": "apply plugin: 'java'\n\ndependencies {\n    compile fileTree(dir: new File(project.rootDir, \"ideaSDK/lib\"), include: ['*.ja"
  },
  {
    "path": "anko/idea-plugin/intentions/build.gradle",
    "chars": 247,
    "preview": "apply plugin: 'kotlin'\n\nsourceSets {\n    main {\n        java.srcDirs = ['src']\n        kotlin.srcDirs = ['src']\n    }\n}\n"
  },
  {
    "path": "anko/idea-plugin/intentions/src/org/jetbrains/anko/idea/intentions/AnkoIntention.kt",
    "chars": 6129,
    "preview": "package org.jetbrains.anko.idea.intentions\n\nimport com.intellij.openapi.editor.Editor\nimport com.intellij.psi.PsiElement"
  },
  {
    "path": "anko/idea-plugin/intentions/src/org/jetbrains/anko/idea/intentions/FindViewByIdIntention.kt",
    "chars": 2104,
    "preview": "package org.jetbrains.anko.idea.intentions\n\nimport com.intellij.psi.PsiElement\nimport org.jetbrains.kotlin.idea.caches.r"
  },
  {
    "path": "anko/idea-plugin/intentions/src/org/jetbrains/anko/idea/intentions/ReplaceColorGrayOpaqueIntention.kt",
    "chars": 3456,
    "preview": "package org.jetbrains.anko.idea.intentions\n\nimport org.jetbrains.kotlin.psi.*\n\nclass ReplaceColorGrayOpaqueIntention : A"
  },
  {
    "path": "anko/idea-plugin/intentions/src/org/jetbrains/anko/idea/intentions/ToastMakeTextShowIntention.kt",
    "chars": 2397,
    "preview": "/*\n * Copyright 2010-2015 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you "
  },
  {
    "path": "anko/idea-plugin/plugin-classpath/build.gradle",
    "chars": 345,
    "preview": "apply plugin: 'java'\n\ndependencies {\n    compile fileTree(dir: new File(project.rootDir, \"ideaSDK/lib\"), include: ['*.ja"
  },
  {
    "path": "anko/idea-plugin/preview/build.gradle",
    "chars": 715,
    "preview": "apply plugin: 'com.github.johnrengelman.shadow'\napply plugin: 'kotlin'\n\nsourceSets {\n    main {\n        java.srcDirs = ["
  },
  {
    "path": "anko/idea-plugin/preview/resources/META-INF/plugin.xml",
    "chars": 2015,
    "preview": "<idea-plugin>\n    <id>org.jetbrains.kotlin.android.dsl</id>\n    <name>Anko Support</name>\n    <description>Anko Android "
  },
  {
    "path": "anko/idea-plugin/preview/resources/intentionDescriptions/FindViewByIdIntention/after.kt.template",
    "chars": 25,
    "preview": "find<TextView>(R.id.name)"
  },
  {
    "path": "anko/idea-plugin/preview/resources/intentionDescriptions/FindViewByIdIntention/before.kt.template",
    "chars": 35,
    "preview": "findViewById(R.id.name) as TextView"
  },
  {
    "path": "anko/idea-plugin/preview/resources/intentionDescriptions/FindViewByIdIntention/description.html",
    "chars": 129,
    "preview": "<html>\n<body>\nThis intention replaces 'findViewById() as T' method call with 'find<T>' that is available in Anko.\n</body"
  },
  {
    "path": "anko/idea-plugin/preview/resources/intentionDescriptions/ReplaceColorGrayOpaqueIntention/after.kt.template",
    "chars": 16,
    "preview": "0xCC.gray.opaque"
  },
  {
    "path": "anko/idea-plugin/preview/resources/intentionDescriptions/ReplaceColorGrayOpaqueIntention/before.kt.template",
    "chars": 18,
    "preview": "0xFFCCCCCC.toInt()"
  },
  {
    "path": "anko/idea-plugin/preview/resources/intentionDescriptions/ReplaceColorGrayOpaqueIntention/description.html",
    "chars": 164,
    "preview": "<html>\n<body>\nThis intention replaces numeric literals representing Android colors with ones that use Anko `gray` and `o"
  },
  {
    "path": "anko/idea-plugin/preview/resources/intentionDescriptions/ToastMakeTextShowIntention/after.kt.template",
    "chars": 16,
    "preview": "toast(\"Message\")"
  },
  {
    "path": "anko/idea-plugin/preview/resources/intentionDescriptions/ToastMakeTextShowIntention/before.kt.template",
    "chars": 58,
    "preview": "Toast.makeText(this, \"Message\", Toast.LENGTH_SHORT).show()"
  },
  {
    "path": "anko/idea-plugin/preview/resources/intentionDescriptions/ToastMakeTextShowIntention/description.html",
    "chars": 175,
    "preview": "<html>\n<body>\nThis intention replaces 'Toast.makeText(ctx, text, length).show()' method call with 'toast(text)' or 'long"
  },
  {
    "path": "anko/idea-plugin/preview/src/org/jetbrains/kotlin/android/dslpreview/AnkoNlPreviewManager.kt",
    "chars": 7970,
    "preview": "package org.jetbrains.kotlin.android.dslpreview\n\nimport com.android.tools.idea.common.model.NlModel\nimport com.android.t"
  },
  {
    "path": "anko/idea-plugin/preview/src/org/jetbrains/kotlin/android/dslpreview/AnkoViewLoaderExtension.kt",
    "chars": 4972,
    "preview": "package org.jetbrains.kotlin.android.dslpreview\n\nimport org.jetbrains.android.uipreview.ViewLoaderExtension\nimport org.j"
  },
  {
    "path": "anko/idea-plugin/preview/src/org/jetbrains/kotlin/android/dslpreview/DslPreviewClassResolver.kt",
    "chars": 7646,
    "preview": "package org.jetbrains.kotlin.android.dslpreview\n\nimport com.intellij.openapi.application.ApplicationManager\nimport com.i"
  },
  {
    "path": "anko/idea-plugin/preview/src/org/jetbrains/kotlin/android/dslpreview/LayoutPsiFile.kt",
    "chars": 28183,
    "preview": "/*\n * Copyright 2016 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may n"
  },
  {
    "path": "anko/idea-plugin/preview/src/org/jetbrains/kotlin/android/dslpreview/PreviewClassDescription.kt",
    "chars": 1566,
    "preview": "/*\n * Copyright 2016 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may n"
  },
  {
    "path": "anko/idea-plugin/preview/src/org/jetbrains/kotlin/android/dslpreview/SourceFileModificationTracker.kt",
    "chars": 1760,
    "preview": "/*\n * Copyright 2016 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may n"
  },
  {
    "path": "anko/idea-plugin/preview/src/org/jetbrains/kotlin/android/dslpreview/UpdateActivityNameTask.kt",
    "chars": 2753,
    "preview": "package org.jetbrains.kotlin.android.dslpreview\n\nimport com.intellij.openapi.fileEditor.FileEditorManager\nimport com.int"
  },
  {
    "path": "anko/idea-plugin/xml-converter/build.gradle",
    "chars": 434,
    "preview": "apply plugin: 'kotlin'\n\nsourceSets {\n    main {\n        java.srcDirs = ['src']\n        kotlin.srcDirs = ['src']\n    }\n  "
  },
  {
    "path": "anko/idea-plugin/xml-converter/resources/attrs.json",
    "chars": 222026,
    "preview": "{\n  \"free\": [\n    {\n      \"name\": \"textSize\",\n      \"format\": [\n        \"dimension\"\n      ]\n    },\n    {\n      \"name\": \""
  },
  {
    "path": "anko/idea-plugin/xml-converter/resources/views.json",
    "chars": 2488,
    "preview": "{\"DigitalClock\":[\"TextView\"],\"Chronometer\":[\"TextView\"],\"EditText\":[\"TextView\"],\"Button\":[\"TextView\"],\"CheckedTextView\":"
  },
  {
    "path": "anko/idea-plugin/xml-converter/src/org/jetbrains/kotlin/android/xmlconverter/AttributeOptimizer.kt",
    "chars": 1656,
    "preview": "/*\n * Copyright 2016 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may n"
  },
  {
    "path": "anko/idea-plugin/xml-converter/src/org/jetbrains/kotlin/android/xmlconverter/AttributeParser.kt",
    "chars": 4439,
    "preview": "/*\n * Copyright 2016 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may n"
  },
  {
    "path": "anko/idea-plugin/xml-converter/src/org/jetbrains/kotlin/android/xmlconverter/ConvertAction.kt",
    "chars": 6412,
    "preview": "/*\n * Copyright 2016 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may n"
  },
  {
    "path": "anko/idea-plugin/xml-converter/src/org/jetbrains/kotlin/android/xmlconverter/LayoutAttributeRenderer.kt",
    "chars": 3512,
    "preview": "/*\n * Copyright 2016 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may n"
  },
  {
    "path": "anko/idea-plugin/xml-converter/src/org/jetbrains/kotlin/android/xmlconverter/Util.kt",
    "chars": 2060,
    "preview": "/*\n * Copyright 2016 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may n"
  },
  {
    "path": "anko/idea-plugin/xml-converter/src/org/jetbrains/kotlin/android/xmlconverter/ViewAttributeRenderer.kt",
    "chars": 5626,
    "preview": "/*\n * Copyright 2016 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may n"
  },
  {
    "path": "anko/idea-plugin/xml-converter/src/org/jetbrains/kotlin/android/xmlconverter/XmlConverter.kt",
    "chars": 5569,
    "preview": "/*\n * Copyright 2016 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may n"
  },
  {
    "path": "anko/idea-plugin/xml-converter/test/org/jetbrains/kotlin/android/xmlconverter/BaseXmlConverterTest.java",
    "chars": 1476,
    "preview": "package org.jetbrains.kotlin.android.xmlconverter;\n\nimport static kotlin.collections.SetsKt.setOf;\nimport static kotlin."
  },
  {
    "path": "anko/idea-plugin/xml-converter/test/org/jetbrains/kotlin/android/xmlconverter/XmlConverterTest.kt",
    "chars": 369,
    "preview": "package org.jetbrains.kotlin.android.xmlconverter\n\nimport org.junit.Test\n\nclass XmlConverterTest : BaseXmlConverterTest("
  },
  {
    "path": "anko/idea-plugin/xml-converter/testData/attributes/layout.kt",
    "chars": 758,
    "preview": "frameLayout {\n    textView(\"Text\") {\n        backgroundColor = 0xff0000.opaque\n        enabled = false\n        hint = \"H"
  },
  {
    "path": "anko/idea-plugin/xml-converter/testData/attributes/layout.xml",
    "chars": 1301,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n         "
  },
  {
    "path": "anko/idea-plugin/xml-converter/testData/dimensions/layout.kt",
    "chars": 263,
    "preview": "linearLayout {\n    button.lparams(width = wrapContent, height = wrapContent) {\n        leftMargin = dip(0.5f)\n        to"
  },
  {
    "path": "anko/idea-plugin/xml-converter/testData/dimensions/layout.xml",
    "chars": 767,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        "
  },
  {
    "path": "anko/idea-plugin/xml-converter/testData/linearLayout/layout.kt",
    "chars": 295,
    "preview": "linearLayout {\n    button.lparams(width = matchParent, height = wrapContent) {\n        gravity = Gravity.END\n        bot"
  },
  {
    "path": "anko/idea-plugin/xml-converter/testData/linearLayout/layout.xml",
    "chars": 665,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        "
  },
  {
    "path": "anko/idea-plugin/xml-converter/testData/relativeLayout/layout.kt",
    "chars": 370,
    "preview": "relativeLayout {\n    button {\n        id = Ids.button1\n    }.lparams(width = matchParent, height = wrapContent) {\n      "
  },
  {
    "path": "anko/idea-plugin/xml-converter/testData/relativeLayout/layout.xml",
    "chars": 821,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      "
  },
  {
    "path": "anko/idea-plugin/xml-converter/testData/simple/layout.kt",
    "chars": 136,
    "preview": "linearLayout {\n    orientation = LinearLayout.VERTICAL\n\n    textView(\"Hello World\").lparams(width = matchParent, height "
  },
  {
    "path": "anko/idea-plugin/xml-converter/testData/simple/layout.xml",
    "chars": 423,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        "
  },
  {
    "path": "anko/library/generated/anko/build.gradle",
    "chars": 384,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':generated:anko-commons')\n    api project(':generate"
  },
  {
    "path": "anko/library/generated/anko/src/main/AndroidManifest.xml",
    "chars": 124,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.anko\">\n    <application/>\n</manif"
  },
  {
    "path": "anko/library/generated/appcompat-v7/build.gradle",
    "chars": 224,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"com.android.support:appcompat-v7:$SUPPORT_ARTIFACT_VERSION\"\n"
  },
  {
    "path": "anko/library/generated/appcompat-v7/src/main/AndroidManifest.xml",
    "chars": 131,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.appcompatV7\">\n    <application/>\n"
  },
  {
    "path": "anko/library/generated/appcompat-v7/src/main/java/Layouts.kt",
    "chars": 34378,
    "preview": "@file:JvmName(\"AppcompatV7LayoutsKt\")\npackage org.jetbrains.anko.appcompat.v7\n\n\nimport android.content.Context\nimport an"
  },
  {
    "path": "anko/library/generated/appcompat-v7/src/main/java/Properties.kt",
    "chars": 1415,
    "preview": "@file:JvmName(\"AppcompatV7PropertiesKt\")\npackage org.jetbrains.anko.appcompat.v7\n\nimport org.jetbrains.anko.*\n\nimport or"
  },
  {
    "path": "anko/library/generated/appcompat-v7/src/main/java/Views.kt",
    "chars": 67975,
    "preview": "@file:JvmName(\"AppcompatV7ViewsKt\")\npackage org.jetbrains.anko.appcompat.v7\n\nimport org.jetbrains.anko.custom.*\nimport o"
  },
  {
    "path": "anko/library/generated/appcompat-v7-commons/build.gradle",
    "chars": 218,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"com.android.support:support-v4:$SUPPORT_ARTIFACT_VERSION\"\n  "
  },
  {
    "path": "anko/library/generated/appcompat-v7-commons/src/main/AndroidManifest.xml",
    "chars": 137,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.appcompatV7Common\">\n    <applicat"
  },
  {
    "path": "anko/library/generated/appcompat-v7-coroutines/build.gradle",
    "chars": 319,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_co"
  },
  {
    "path": "anko/library/generated/appcompat-v7-coroutines/src/main/AndroidManifest.xml",
    "chars": 142,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.appcompatV7.coroutines\">\n    <app"
  },
  {
    "path": "anko/library/generated/appcompat-v7-coroutines/src/main/java/ListenersWithCoroutines.kt",
    "chars": 6889,
    "preview": "@file:JvmName(\"AppcompatV7CoroutinesListenersWithCoroutinesKt\")\npackage org.jetbrains.anko.appcompat.v7.coroutines\n\n\nimp"
  },
  {
    "path": "anko/library/generated/appcompat-v7-listeners/build.gradle",
    "chars": 232,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"com.android.support:appcompat-v7:$SUPPORT_ARTIFACT_VERSION\"\n"
  },
  {
    "path": "anko/library/generated/appcompat-v7-listeners/src/main/AndroidManifest.xml",
    "chars": 141,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.appcompatV7.listeners\">\n    <appl"
  },
  {
    "path": "anko/library/generated/appcompat-v7-listeners/src/main/java/Listeners.kt",
    "chars": 3097,
    "preview": "@file:JvmName(\"AppcompatV7ListenersListenersKt\")\npackage org.jetbrains.anko.appcompat.v7.listeners\n\n\ninline fun android."
  },
  {
    "path": "anko/library/generated/cardview-v7/build.gradle",
    "chars": 164,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"com.android.support:cardview-v7:$SUPPORT_ARTIFACT_VERSION\"\n "
  },
  {
    "path": "anko/library/generated/cardview-v7/src/main/AndroidManifest.xml",
    "chars": 130,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.cardviewV7\">\n    <application/>\n<"
  },
  {
    "path": "anko/library/generated/cardview-v7/src/main/java/Layouts.kt",
    "chars": 4142,
    "preview": "@file:JvmName(\"CardviewV7LayoutsKt\")\npackage org.jetbrains.anko.cardview.v7\n\n\nimport android.content.Context\nimport andr"
  },
  {
    "path": "anko/library/generated/cardview-v7/src/main/java/Views.kt",
    "chars": 2401,
    "preview": "@file:JvmName(\"CardviewV7ViewsKt\")\npackage org.jetbrains.anko.cardview.v7\n\nimport org.jetbrains.anko.custom.*\nimport org"
  },
  {
    "path": "anko/library/generated/common/build.gradle",
    "chars": 96,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':generated:anko-commons')\n}\n"
  },
  {
    "path": "anko/library/generated/common/src/main/AndroidManifest.xml",
    "chars": 126,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.common\">\n    <application/>\n</man"
  },
  {
    "path": "anko/library/generated/commons/build.gradle",
    "chars": 93,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':static:commons-base')\n}\n"
  },
  {
    "path": "anko/library/generated/commons/src/main/AndroidManifest.xml",
    "chars": 127,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.commons\">\n    <application/>\n</ma"
  },
  {
    "path": "anko/library/generated/constraint-layout/build.gradle",
    "chars": 241,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"com.android.support.constraint:constraint-layout:$CONSTRAINT"
  },
  {
    "path": "anko/library/generated/constraint-layout/src/main/AndroidManifest.xml",
    "chars": 138,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.constraint.layout\">\n    <applicat"
  },
  {
    "path": "anko/library/generated/constraint-layout/src/main/java/Layouts.kt",
    "chars": 2957,
    "preview": "@file:JvmName(\"ConstraintLayoutLayoutsKt\")\npackage org.jetbrains.anko.constraint.layout\n\n\nimport android.support.constra"
  },
  {
    "path": "anko/library/generated/constraint-layout/src/main/java/Views.kt",
    "chars": 6018,
    "preview": "@file:JvmName(\"ConstraintLayoutViewsKt\")\npackage org.jetbrains.anko.constraint.layout\n\nimport org.jetbrains.anko.custom."
  },
  {
    "path": "anko/library/generated/coroutines/build.gradle",
    "chars": 205,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_co"
  },
  {
    "path": "anko/library/generated/coroutines/src/main/AndroidManifest.xml",
    "chars": 130,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.coroutines\">\n    <application/>\n<"
  },
  {
    "path": "anko/library/generated/coroutines/src/main/java/bg.kt",
    "chars": 1122,
    "preview": "/**\n * Created by yan on 15/03/2017.\n */\n/*\n * Copyright 2016 JetBrains s.r.o.\n *\n * Licensed under the Apache License, "
  },
  {
    "path": "anko/library/generated/coroutines/src/main/java/weakReferenceSupport.kt",
    "chars": 1200,
    "preview": "/*\n * Copyright 2016 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may n"
  },
  {
    "path": "anko/library/generated/design/build.gradle",
    "chars": 198,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"com.android.support:design:$SUPPORT_ARTIFACT_VERSION\"\n    ap"
  },
  {
    "path": "anko/library/generated/design/src/main/AndroidManifest.xml",
    "chars": 126,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.design\">\n    <application/>\n</man"
  },
  {
    "path": "anko/library/generated/design/src/main/java/Layouts.kt",
    "chars": 23246,
    "preview": "@file:JvmName(\"DesignLayoutsKt\")\npackage org.jetbrains.anko.design\n\n\nimport android.content.Context\nimport android.util."
  },
  {
    "path": "anko/library/generated/design/src/main/java/Properties.kt",
    "chars": 712,
    "preview": "@file:JvmName(\"DesignPropertiesKt\")\npackage org.jetbrains.anko.design\n\nimport org.jetbrains.anko.*\n\nimport org.jetbrains"
  },
  {
    "path": "anko/library/generated/design/src/main/java/Views.kt",
    "chars": 19654,
    "preview": "@file:JvmName(\"DesignViewsKt\")\npackage org.jetbrains.anko.design\n\nimport org.jetbrains.anko.custom.*\nimport org.jetbrain"
  },
  {
    "path": "anko/library/generated/design-coroutines/build.gradle",
    "chars": 246,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_co"
  },
  {
    "path": "anko/library/generated/design-coroutines/src/main/AndroidManifest.xml",
    "chars": 137,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.design.coroutines\">\n    <applicat"
  },
  {
    "path": "anko/library/generated/design-coroutines/src/main/java/ListenersWithCoroutines.kt",
    "chars": 4754,
    "preview": "@file:JvmName(\"DesignCoroutinesListenersWithCoroutinesKt\")\npackage org.jetbrains.anko.design.coroutines\n\n\nimport kotlin."
  },
  {
    "path": "anko/library/generated/design-listeners/build.gradle",
    "chars": 159,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"com.android.support:design:$SUPPORT_ARTIFACT_VERSION\"\n    ap"
  },
  {
    "path": "anko/library/generated/design-listeners/src/main/AndroidManifest.xml",
    "chars": 136,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.design.listeners\">\n    <applicati"
  },
  {
    "path": "anko/library/generated/design-listeners/src/main/java/Listeners.kt",
    "chars": 3044,
    "preview": "@file:JvmName(\"DesignListenersListenersKt\")\npackage org.jetbrains.anko.design.listeners\n\n\ninline fun android.support.des"
  },
  {
    "path": "anko/library/generated/gridlayout-v7/build.gradle",
    "chars": 166,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"com.android.support:gridlayout-v7:$SUPPORT_ARTIFACT_VERSION\""
  },
  {
    "path": "anko/library/generated/gridlayout-v7/src/main/AndroidManifest.xml",
    "chars": 132,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.gridlayoutV7\">\n    <application/>"
  },
  {
    "path": "anko/library/generated/gridlayout-v7/src/main/java/Layouts.kt",
    "chars": 3618,
    "preview": "@file:JvmName(\"GridlayoutV7LayoutsKt\")\npackage org.jetbrains.anko.gridlayout.v7\n\n\nimport android.support.v7.widget.GridL"
  },
  {
    "path": "anko/library/generated/gridlayout-v7/src/main/java/Views.kt",
    "chars": 2507,
    "preview": "@file:JvmName(\"GridlayoutV7ViewsKt\")\npackage org.jetbrains.anko.gridlayout.v7\n\nimport org.jetbrains.anko.custom.*\nimport"
  },
  {
    "path": "anko/library/generated/percent/build.gradle",
    "chars": 160,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"com.android.support:percent:$SUPPORT_ARTIFACT_VERSION\"\n    a"
  },
  {
    "path": "anko/library/generated/percent/src/main/AndroidManifest.xml",
    "chars": 127,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.percent\">\n    <application/>\n</ma"
  },
  {
    "path": "anko/library/generated/percent/src/main/java/Layouts.kt",
    "chars": 7558,
    "preview": "@file:JvmName(\"PercentLayoutsKt\")\npackage org.jetbrains.anko.percent\n\n\nimport android.content.Context\nimport android.uti"
  },
  {
    "path": "anko/library/generated/percent/src/main/java/Views.kt",
    "chars": 5295,
    "preview": "@file:JvmName(\"PercentViewsKt\")\npackage org.jetbrains.anko.percent\n\nimport org.jetbrains.anko.custom.*\nimport org.jetbra"
  },
  {
    "path": "anko/library/generated/recyclerview-v7/build.gradle",
    "chars": 168,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"com.android.support:recyclerview-v7:$SUPPORT_ARTIFACT_VERSIO"
  },
  {
    "path": "anko/library/generated/recyclerview-v7/src/main/AndroidManifest.xml",
    "chars": 134,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.recyclerviewV7\">\n    <application"
  },
  {
    "path": "anko/library/generated/recyclerview-v7/src/main/java/Layouts.kt",
    "chars": 3312,
    "preview": "@file:JvmName(\"RecyclerviewV7LayoutsKt\")\npackage org.jetbrains.anko.recyclerview.v7\n\n\nimport android.content.Context\nimp"
  },
  {
    "path": "anko/library/generated/recyclerview-v7/src/main/java/Views.kt",
    "chars": 2613,
    "preview": "@file:JvmName(\"RecyclerviewV7ViewsKt\")\npackage org.jetbrains.anko.recyclerview.v7\n\nimport org.jetbrains.anko.custom.*\nim"
  },
  {
    "path": "anko/library/generated/recyclerview-v7-coroutines/build.gradle",
    "chars": 255,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_co"
  },
  {
    "path": "anko/library/generated/recyclerview-v7-coroutines/src/main/AndroidManifest.xml",
    "chars": 145,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.recyclerviewV7.coroutines\">\n    <"
  },
  {
    "path": "anko/library/generated/recyclerview-v7-coroutines/src/main/java/ListenersWithCoroutines.kt",
    "chars": 4322,
    "preview": "@file:JvmName(\"RecyclerviewV7CoroutinesListenersWithCoroutinesKt\")\npackage org.jetbrains.anko.recyclerview.v7.coroutines"
  },
  {
    "path": "anko/library/generated/recyclerview-v7-listeners/build.gradle",
    "chars": 168,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"com.android.support:recyclerview-v7:$SUPPORT_ARTIFACT_VERSIO"
  },
  {
    "path": "anko/library/generated/recyclerview-v7-listeners/src/main/AndroidManifest.xml",
    "chars": 144,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.recyclerviewV7.listeners\">\n    <a"
  },
  {
    "path": "anko/library/generated/recyclerview-v7-listeners/src/main/java/Listeners.kt",
    "chars": 2855,
    "preview": "@file:JvmName(\"RecyclerviewV7ListenersListenersKt\")\npackage org.jetbrains.anko.recyclerview.v7.listeners\n\n\nfun android.s"
  },
  {
    "path": "anko/library/generated/sdk15/build.gradle",
    "chars": 137,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':generated:anko-commons')\n    api project(':static:p"
  },
  {
    "path": "anko/library/generated/sdk15/src/main/AndroidManifest.xml",
    "chars": 125,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk15\">\n    <application/>\n</mani"
  },
  {
    "path": "anko/library/generated/sdk15/src/main/java/Layouts.kt",
    "chars": 54733,
    "preview": "@file:JvmName(\"Sdk15LayoutsKt\")\npackage org.jetbrains.anko\n\n\nimport android.content.Context\nimport android.util.Attribut"
  },
  {
    "path": "anko/library/generated/sdk15/src/main/java/Properties.kt",
    "chars": 6124,
    "preview": "@file:JvmName(\"Sdk15PropertiesKt\")\npackage org.jetbrains.anko\n\nimport org.jetbrains.anko.*\n\nimport org.jetbrains.anko.in"
  },
  {
    "path": "anko/library/generated/sdk15/src/main/java/Services.kt",
    "chars": 5173,
    "preview": "@file:JvmName(\"Sdk15ServicesKt\")\npackage org.jetbrains.anko\n\n\nimport android.content.Context\nimport android.view.accessi"
  },
  {
    "path": "anko/library/generated/sdk15/src/main/java/Views.kt",
    "chars": 106313,
    "preview": "@file:JvmName(\"Sdk15ViewsKt\")\npackage org.jetbrains.anko\n\nimport org.jetbrains.anko.custom.*\nimport org.jetbrains.anko.A"
  },
  {
    "path": "anko/library/generated/sdk15-coroutines/build.gradle",
    "chars": 183,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_co"
  },
  {
    "path": "anko/library/generated/sdk15-coroutines/src/main/AndroidManifest.xml",
    "chars": 136,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk15.coroutines\">\n    <applicati"
  },
  {
    "path": "anko/library/generated/sdk15-coroutines/src/main/java/ListenersWithCoroutines.kt",
    "chars": 34113,
    "preview": "@file:JvmName(\"Sdk15CoroutinesListenersWithCoroutinesKt\")\npackage org.jetbrains.anko.sdk15.coroutines\n\n\nimport kotlin.co"
  },
  {
    "path": "anko/library/generated/sdk15-listeners/build.gradle",
    "chars": 96,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':generated:anko-commons')\n}\n"
  },
  {
    "path": "anko/library/generated/sdk15-listeners/src/main/AndroidManifest.xml",
    "chars": 135,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk15.listeners\">\n    <applicatio"
  },
  {
    "path": "anko/library/generated/sdk15-listeners/src/main/java/Listeners.kt",
    "chars": 18977,
    "preview": "@file:JvmName(\"Sdk15ListenersListenersKt\")\npackage org.jetbrains.anko.sdk15.listeners\n\n\ninline fun android.view.View.onL"
  },
  {
    "path": "anko/library/generated/sdk19/build.gradle",
    "chars": 137,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':generated:anko-commons')\n    api project(':static:p"
  },
  {
    "path": "anko/library/generated/sdk19/src/main/AndroidManifest.xml",
    "chars": 125,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk19\">\n    <application/>\n</mani"
  },
  {
    "path": "anko/library/generated/sdk19/src/main/java/Layouts.kt",
    "chars": 60211,
    "preview": "@file:JvmName(\"Sdk19LayoutsKt\")\npackage org.jetbrains.anko\n\n\nimport android.content.Context\nimport android.util.Attribut"
  },
  {
    "path": "anko/library/generated/sdk19/src/main/java/Properties.kt",
    "chars": 4159,
    "preview": "@file:JvmName(\"Sdk19PropertiesKt\")\npackage org.jetbrains.anko\n\nimport org.jetbrains.anko.*\n\nimport org.jetbrains.anko.in"
  },
  {
    "path": "anko/library/generated/sdk19/src/main/java/Services.kt",
    "chars": 6970,
    "preview": "@file:JvmName(\"Sdk19ServicesKt\")\npackage org.jetbrains.anko\n\n\nimport android.content.Context\nimport android.view.accessi"
  },
  {
    "path": "anko/library/generated/sdk19/src/main/java/Views.kt",
    "chars": 107795,
    "preview": "@file:JvmName(\"Sdk19ViewsKt\")\npackage org.jetbrains.anko\n\nimport org.jetbrains.anko.custom.*\nimport org.jetbrains.anko.A"
  },
  {
    "path": "anko/library/generated/sdk19-coroutines/build.gradle",
    "chars": 183,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_co"
  },
  {
    "path": "anko/library/generated/sdk19-coroutines/src/main/AndroidManifest.xml",
    "chars": 136,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk19.coroutines\">\n    <applicati"
  },
  {
    "path": "anko/library/generated/sdk19-coroutines/src/main/java/ListenersWithCoroutines.kt",
    "chars": 34808,
    "preview": "@file:JvmName(\"Sdk19CoroutinesListenersWithCoroutinesKt\")\npackage org.jetbrains.anko.sdk19.coroutines\n\n\nimport kotlin.co"
  },
  {
    "path": "anko/library/generated/sdk19-listeners/build.gradle",
    "chars": 96,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':generated:anko-commons')\n}\n"
  },
  {
    "path": "anko/library/generated/sdk19-listeners/src/main/AndroidManifest.xml",
    "chars": 135,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk19.listeners\">\n    <applicatio"
  },
  {
    "path": "anko/library/generated/sdk19-listeners/src/main/java/Listeners.kt",
    "chars": 19244,
    "preview": "@file:JvmName(\"Sdk19ListenersListenersKt\")\npackage org.jetbrains.anko.sdk19.listeners\n\n\ninline fun android.view.View.onL"
  },
  {
    "path": "anko/library/generated/sdk21/build.gradle",
    "chars": 137,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':generated:anko-commons')\n    api project(':static:p"
  },
  {
    "path": "anko/library/generated/sdk21/src/main/AndroidManifest.xml",
    "chars": 125,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk21\">\n    <application/>\n</mani"
  },
  {
    "path": "anko/library/generated/sdk21/src/main/java/Layouts.kt",
    "chars": 67639,
    "preview": "@file:JvmName(\"Sdk21LayoutsKt\")\npackage org.jetbrains.anko\n\n\nimport android.content.Context\nimport android.util.Attribut"
  },
  {
    "path": "anko/library/generated/sdk21/src/main/java/Properties.kt",
    "chars": 5315,
    "preview": "@file:JvmName(\"Sdk21PropertiesKt\")\npackage org.jetbrains.anko\n\nimport org.jetbrains.anko.*\n\nimport org.jetbrains.anko.in"
  },
  {
    "path": "anko/library/generated/sdk21/src/main/java/Services.kt",
    "chars": 8495,
    "preview": "@file:JvmName(\"Sdk21ServicesKt\")\npackage org.jetbrains.anko\n\n\nimport android.content.Context\nimport android.view.accessi"
  },
  {
    "path": "anko/library/generated/sdk21/src/main/java/Views.kt",
    "chars": 113433,
    "preview": "@file:JvmName(\"Sdk21ViewsKt\")\npackage org.jetbrains.anko\n\nimport org.jetbrains.anko.custom.*\nimport org.jetbrains.anko.A"
  },
  {
    "path": "anko/library/generated/sdk21-coroutines/build.gradle",
    "chars": 183,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_co"
  },
  {
    "path": "anko/library/generated/sdk21-coroutines/src/main/AndroidManifest.xml",
    "chars": 136,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk21.coroutines\">\n    <applicati"
  },
  {
    "path": "anko/library/generated/sdk21-coroutines/src/main/java/ListenersWithCoroutines.kt",
    "chars": 36453,
    "preview": "@file:JvmName(\"Sdk21CoroutinesListenersWithCoroutinesKt\")\npackage org.jetbrains.anko.sdk21.coroutines\n\n\nimport kotlin.co"
  },
  {
    "path": "anko/library/generated/sdk21-listeners/build.gradle",
    "chars": 96,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':generated:anko-commons')\n}\n"
  },
  {
    "path": "anko/library/generated/sdk21-listeners/src/main/AndroidManifest.xml",
    "chars": 135,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk21.listeners\">\n    <applicatio"
  },
  {
    "path": "anko/library/generated/sdk21-listeners/src/main/java/Listeners.kt",
    "chars": 19894,
    "preview": "@file:JvmName(\"Sdk21ListenersListenersKt\")\npackage org.jetbrains.anko.sdk21.listeners\n\n\ninline fun android.view.View.onL"
  },
  {
    "path": "anko/library/generated/sdk23/build.gradle",
    "chars": 137,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':generated:anko-commons')\n    api project(':static:p"
  },
  {
    "path": "anko/library/generated/sdk23/src/main/AndroidManifest.xml",
    "chars": 125,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk23\">\n    <application/>\n</mani"
  },
  {
    "path": "anko/library/generated/sdk23/src/main/java/Layouts.kt",
    "chars": 67639,
    "preview": "@file:JvmName(\"Sdk23LayoutsKt\")\npackage org.jetbrains.anko\n\n\nimport android.content.Context\nimport android.util.Attribut"
  },
  {
    "path": "anko/library/generated/sdk23/src/main/java/Properties.kt",
    "chars": 5518,
    "preview": "@file:JvmName(\"Sdk23PropertiesKt\")\npackage org.jetbrains.anko\n\nimport org.jetbrains.anko.*\n\nimport org.jetbrains.anko.in"
  },
  {
    "path": "anko/library/generated/sdk23/src/main/java/Services.kt",
    "chars": 9610,
    "preview": "@file:JvmName(\"Sdk23ServicesKt\")\npackage org.jetbrains.anko\n\n\nimport android.content.Context\nimport android.view.accessi"
  },
  {
    "path": "anko/library/generated/sdk23/src/main/java/Views.kt",
    "chars": 113433,
    "preview": "@file:JvmName(\"Sdk23ViewsKt\")\npackage org.jetbrains.anko\n\nimport org.jetbrains.anko.custom.*\nimport org.jetbrains.anko.A"
  },
  {
    "path": "anko/library/generated/sdk23-coroutines/build.gradle",
    "chars": 183,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_co"
  },
  {
    "path": "anko/library/generated/sdk23-coroutines/src/main/AndroidManifest.xml",
    "chars": 136,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk23.coroutines\">\n    <applicati"
  },
  {
    "path": "anko/library/generated/sdk23-coroutines/src/main/java/ListenersWithCoroutines.kt",
    "chars": 37275,
    "preview": "@file:JvmName(\"Sdk23CoroutinesListenersWithCoroutinesKt\")\npackage org.jetbrains.anko.sdk23.coroutines\n\n\nimport kotlin.co"
  },
  {
    "path": "anko/library/generated/sdk23-listeners/build.gradle",
    "chars": 96,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':generated:anko-commons')\n}\n"
  },
  {
    "path": "anko/library/generated/sdk23-listeners/src/main/AndroidManifest.xml",
    "chars": 135,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk23.listeners\">\n    <applicatio"
  },
  {
    "path": "anko/library/generated/sdk23-listeners/src/main/java/Listeners.kt",
    "chars": 20213,
    "preview": "@file:JvmName(\"Sdk23ListenersListenersKt\")\npackage org.jetbrains.anko.sdk23.listeners\n\n\ninline fun android.view.View.onL"
  },
  {
    "path": "anko/library/generated/sdk25/build.gradle",
    "chars": 137,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':generated:anko-commons')\n    api project(':static:p"
  },
  {
    "path": "anko/library/generated/sdk25/src/main/AndroidManifest.xml",
    "chars": 125,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk25\">\n    <application/>\n</mani"
  },
  {
    "path": "anko/library/generated/sdk25/src/main/java/Layouts.kt",
    "chars": 67639,
    "preview": "@file:JvmName(\"Sdk25LayoutsKt\")\npackage org.jetbrains.anko\n\n\nimport android.content.Context\nimport android.util.Attribut"
  },
  {
    "path": "anko/library/generated/sdk25/src/main/java/Properties.kt",
    "chars": 5749,
    "preview": "@file:JvmName(\"Sdk25PropertiesKt\")\npackage org.jetbrains.anko\n\nimport org.jetbrains.anko.*\n\nimport org.jetbrains.anko.in"
  },
  {
    "path": "anko/library/generated/sdk25/src/main/java/Services.kt",
    "chars": 10314,
    "preview": "@file:JvmName(\"Sdk25ServicesKt\")\npackage org.jetbrains.anko\n\n\nimport android.content.Context\nimport android.view.accessi"
  },
  {
    "path": "anko/library/generated/sdk25/src/main/java/Views.kt",
    "chars": 113433,
    "preview": "@file:JvmName(\"Sdk25ViewsKt\")\npackage org.jetbrains.anko\n\nimport org.jetbrains.anko.custom.*\nimport org.jetbrains.anko.A"
  },
  {
    "path": "anko/library/generated/sdk25-coroutines/build.gradle",
    "chars": 183,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_co"
  },
  {
    "path": "anko/library/generated/sdk25-coroutines/src/main/AndroidManifest.xml",
    "chars": 136,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk25.coroutines\">\n    <applicati"
  },
  {
    "path": "anko/library/generated/sdk25-coroutines/src/main/java/ListenersWithCoroutines.kt",
    "chars": 37275,
    "preview": "@file:JvmName(\"Sdk25CoroutinesListenersWithCoroutinesKt\")\npackage org.jetbrains.anko.sdk25.coroutines\n\n\nimport kotlin.co"
  },
  {
    "path": "anko/library/generated/sdk25-listeners/build.gradle",
    "chars": 96,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':generated:anko-commons')\n}\n"
  },
  {
    "path": "anko/library/generated/sdk25-listeners/src/main/AndroidManifest.xml",
    "chars": 135,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk25.listeners\">\n    <applicatio"
  },
  {
    "path": "anko/library/generated/sdk25-listeners/src/main/java/Listeners.kt",
    "chars": 20213,
    "preview": "@file:JvmName(\"Sdk25ListenersListenersKt\")\npackage org.jetbrains.anko.sdk25.listeners\n\n\ninline fun android.view.View.onL"
  },
  {
    "path": "anko/library/generated/sdk27/build.gradle",
    "chars": 137,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':generated:anko-commons')\n    api project(':static:p"
  },
  {
    "path": "anko/library/generated/sdk27/src/main/AndroidManifest.xml",
    "chars": 125,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk27\">\n    <application/>\n</mani"
  },
  {
    "path": "anko/library/generated/sdk27/src/main/java/Layouts.kt",
    "chars": 67639,
    "preview": "@file:JvmName(\"Sdk27LayoutsKt\")\npackage org.jetbrains.anko\n\n\nimport android.content.Context\nimport android.util.Attribut"
  },
  {
    "path": "anko/library/generated/sdk27/src/main/java/Properties.kt",
    "chars": 5749,
    "preview": "@file:JvmName(\"Sdk27PropertiesKt\")\npackage org.jetbrains.anko\n\nimport org.jetbrains.anko.*\n\nimport org.jetbrains.anko.in"
  },
  {
    "path": "anko/library/generated/sdk27/src/main/java/Services.kt",
    "chars": 11297,
    "preview": "@file:JvmName(\"Sdk27ServicesKt\")\npackage org.jetbrains.anko\n\n\nimport android.content.Context\nimport android.view.accessi"
  },
  {
    "path": "anko/library/generated/sdk27/src/main/java/Views.kt",
    "chars": 113433,
    "preview": "@file:JvmName(\"Sdk27ViewsKt\")\npackage org.jetbrains.anko\n\nimport org.jetbrains.anko.custom.*\nimport org.jetbrains.anko.A"
  },
  {
    "path": "anko/library/generated/sdk27-coroutines/build.gradle",
    "chars": 183,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_co"
  },
  {
    "path": "anko/library/generated/sdk27-coroutines/src/main/AndroidManifest.xml",
    "chars": 136,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk27.coroutines\">\n    <applicati"
  },
  {
    "path": "anko/library/generated/sdk27-coroutines/src/main/java/ListenersWithCoroutines.kt",
    "chars": 38145,
    "preview": "@file:JvmName(\"Sdk27CoroutinesListenersWithCoroutinesKt\")\npackage org.jetbrains.anko.sdk27.coroutines\n\n\nimport kotlin.co"
  },
  {
    "path": "anko/library/generated/sdk27-listeners/build.gradle",
    "chars": 96,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':generated:anko-commons')\n}\n"
  },
  {
    "path": "anko/library/generated/sdk27-listeners/src/main/AndroidManifest.xml",
    "chars": 135,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk27.listeners\">\n    <applicatio"
  },
  {
    "path": "anko/library/generated/sdk27-listeners/src/main/java/Listeners.kt",
    "chars": 20576,
    "preview": "@file:JvmName(\"Sdk27ListenersListenersKt\")\npackage org.jetbrains.anko.sdk27.listeners\n\n\ninline fun android.view.View.onL"
  },
  {
    "path": "anko/library/generated/sdk28/build.gradle",
    "chars": 137,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':generated:anko-commons')\n    api project(':static:p"
  },
  {
    "path": "anko/library/generated/sdk28/src/main/AndroidManifest.xml",
    "chars": 125,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk28\">\n    <application/>\n</mani"
  },
  {
    "path": "anko/library/generated/sdk28/src/main/java/Layouts.kt",
    "chars": 67639,
    "preview": "@file:JvmName(\"Sdk28LayoutsKt\")\npackage org.jetbrains.anko\n\n\nimport android.content.Context\nimport android.util.Attribut"
  },
  {
    "path": "anko/library/generated/sdk28/src/main/java/Properties.kt",
    "chars": 5749,
    "preview": "@file:JvmName(\"Sdk28PropertiesKt\")\npackage org.jetbrains.anko\n\nimport org.jetbrains.anko.*\n\nimport org.jetbrains.anko.in"
  },
  {
    "path": "anko/library/generated/sdk28/src/main/java/Services.kt",
    "chars": 11493,
    "preview": "@file:JvmName(\"Sdk28ServicesKt\")\npackage org.jetbrains.anko\n\n\nimport android.content.Context\nimport android.view.accessi"
  },
  {
    "path": "anko/library/generated/sdk28/src/main/java/Views.kt",
    "chars": 113433,
    "preview": "@file:JvmName(\"Sdk28ViewsKt\")\npackage org.jetbrains.anko\n\nimport org.jetbrains.anko.custom.*\nimport org.jetbrains.anko.A"
  },
  {
    "path": "anko/library/generated/sdk28-coroutines/build.gradle",
    "chars": 183,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api \"org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_co"
  },
  {
    "path": "anko/library/generated/sdk28-coroutines/src/main/AndroidManifest.xml",
    "chars": 136,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk28.coroutines\">\n    <applicati"
  },
  {
    "path": "anko/library/generated/sdk28-coroutines/src/main/java/ListenersWithCoroutines.kt",
    "chars": 38561,
    "preview": "@file:JvmName(\"Sdk28CoroutinesListenersWithCoroutinesKt\")\npackage org.jetbrains.anko.sdk28.coroutines\n\n\nimport kotlin.co"
  },
  {
    "path": "anko/library/generated/sdk28-listeners/build.gradle",
    "chars": 96,
    "preview": "apply from: '../../library.gradle'\n\ndependencies {\n    api project(':generated:anko-commons')\n}\n"
  },
  {
    "path": "anko/library/generated/sdk28-listeners/src/main/AndroidManifest.xml",
    "chars": 135,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"org.jetbrains.anko.generated.sdk28.listeners\">\n    <applicatio"
  },
  {
    "path": "anko/library/generated/sdk28-listeners/src/main/java/Listeners.kt",
    "chars": 20745,
    "preview": "@file:JvmName(\"Sdk28ListenersListenersKt\")\npackage org.jetbrains.anko.sdk28.listeners\n\n\ninline fun android.view.View.onL"
  }
]

// ... and 196 more files (download for full content)

About this extraction

This page contains the full source code of the Kotlin/anko GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 396 files (2.8 MB), approximately 754.4k tokens, and a symbol index with 23 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!