Skip to content
This repository has been archived by the owner on Jul 13, 2020. It is now read-only.

Commit

Permalink
Generate layout for ImageSwitcher
Browse files Browse the repository at this point in the history
  • Loading branch information
yanex committed Jun 10, 2015
1 parent d147238 commit ed39f2c
Show file tree
Hide file tree
Showing 13 changed files with 299 additions and 139 deletions.
3 changes: 3 additions & 0 deletions dsl/props/annotations/android/widget/annotations.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,7 @@
<item name='android.widget.TextView java.lang.CharSequence getText()'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='android.widget.ImageSwitcher'>
<annotation name='org.jetbrains.anko.GenerateLayout'/>
</item>
</root>
11 changes: 8 additions & 3 deletions dsl/src/org/jetbrains/android/anko/Generator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package org.jetbrains.android.anko

import org.jetbrains.android.anko.annotations.ExternalAnnotation
import org.jetbrains.android.anko.config.AnkoConfiguration
import org.objectweb.asm.tree.ClassNode
import org.objectweb.asm.tree.MethodNode
Expand All @@ -30,6 +31,7 @@ import org.jetbrains.android.anko.generator.*
import org.jetbrains.android.anko.utils.ClassTreeUtils
import org.jetbrains.android.anko.utils.toProperty
import org.objectweb.asm.tree.FieldNode
import org.jetbrains.android.anko.annotations.ExternalAnnotation.GenerateLayout

class Generator(
public override val classTree: ClassTree,
Expand Down Expand Up @@ -188,14 +190,17 @@ class Generator(
return if (returnTypeClass.isLayoutParams) returnTypeClass else findForParent()
}

val lpInnerClassName = viewGroup.innerClasses?.firstOrNull { it.name.contains("LayoutParams") } ?: return null
val lpInnerClass = classTree.findNode(lpInnerClassName.name)!!.data
val lpInnerClassName = viewGroup.innerClasses?.firstOrNull { it.name.contains("LayoutParams") }
val lpInnerClass = lpInnerClassName?.let { classTree.findNode(it.name)!!.data }

if (lpInnerClass == null
&& GenerateLayout !in config.annotationManager.findAnnotationsFor(viewGroup.fqName)) return null

val actualLayoutParamsClass = findActualLayoutParamsClass(viewGroup).let {
if (it != null && it.name != "android/view/ViewGroup\$LayoutParams") it else null
}

return (actualLayoutParamsClass ?: lpInnerClass).let { clazz ->
return (actualLayoutParamsClass ?: lpInnerClass)?.let { clazz ->
LayoutElement(viewGroup, clazz, clazz.getConstructors().filter { it.isPublic })
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ public fun parseAnnotations(doc: Document): Map<String, Set<ExternalAnnotation>>
private fun parseAnnotation(fqName: String): ExternalAnnotation? {
return when (fqName) {
"org.jetbrains.annotations.NotNull" -> ExternalAnnotation.NotNull
"org.jetbrains.anko.GenerateLayout" -> ExternalAnnotation.GenerateLayout
else -> null
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ import kotlin.dom.documentElement
import kotlin.properties.Delegates

public enum class ExternalAnnotation {
NotNull
NotNull,
GenerateLayout
}

public interface AnnotationProvider {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public abstract class AbstractFunctionalTest {
} catch (e: Exception) {
file.createNewFile()
val fileWriter = FileWriter(file)
fileWriter.write(data)
fileWriter.write(data.replace("\n", System.getProperty("line.separator")))
fileWriter.close()
fail("Empty expected data, creating from actual")
return data
Expand All @@ -62,8 +62,8 @@ public abstract class AbstractFunctionalTest {
fun String.trimBlank() = trim('\n', '\t', ' ', '\r')

val actual = config.getOutputFile(subsystem).readText().replace("\r", "").trimBlank()
val expectedPath = ("dsl/testData/functional/$version/$testDataFile").replace("\r", "")
val expected = loadOrCreate(File(expectedPath), actual).trimBlank()
val expectedPath = ("dsl/testData/functional/$version/$testDataFile")
val expected = loadOrCreate(File(expectedPath), actual).replace("\r", "").trimBlank()

assertTrue("Expected text is empty.", expected.length() > 0)
assertTrue("Actual text is empty.", actual.length() > 0)
Expand Down
42 changes: 39 additions & 3 deletions dsl/testData/functional/15/LayoutsTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,44 @@ public open class _HorizontalScrollView(ctx: Context): android.widget.Horizontal

}

public open class _ImageSwitcher(ctx: Context): android.widget.ImageSwitcher(ctx) {
public fun <T: View> T.layoutParams(c: android.content.Context?, attrs: android.util.AttributeSet?, imageSwitcherInit: android.widget.FrameLayout.LayoutParams.() -> Unit = defaultInit): T {
val layoutParams = android.widget.FrameLayout.LayoutParams(c!!, attrs!!)
layoutParams.imageSwitcherInit()
this@layoutParams.setLayoutParams(layoutParams)
return this
}

public fun <T: View> T.layoutParams(width: Int = android.view.ViewGroup.LayoutParams.WRAP_CONTENT, height: Int = android.view.ViewGroup.LayoutParams.WRAP_CONTENT, imageSwitcherInit: android.widget.FrameLayout.LayoutParams.() -> Unit = defaultInit): T {
val layoutParams = android.widget.FrameLayout.LayoutParams(width, height)
layoutParams.imageSwitcherInit()
this@layoutParams.setLayoutParams(layoutParams)
return this
}

public fun <T: View> T.layoutParams(width: Int = android.view.ViewGroup.LayoutParams.WRAP_CONTENT, height: Int = android.view.ViewGroup.LayoutParams.WRAP_CONTENT, gravity: Int, imageSwitcherInit: android.widget.FrameLayout.LayoutParams.() -> Unit = defaultInit): T {
val layoutParams = android.widget.FrameLayout.LayoutParams(width, height, gravity)
layoutParams.imageSwitcherInit()
this@layoutParams.setLayoutParams(layoutParams)
return this
}

public fun <T: View> T.layoutParams(source: android.view.ViewGroup.LayoutParams?, imageSwitcherInit: android.widget.FrameLayout.LayoutParams.() -> Unit = defaultInit): T {
val layoutParams = android.widget.FrameLayout.LayoutParams(source!!)
layoutParams.imageSwitcherInit()
this@layoutParams.setLayoutParams(layoutParams)
return this
}

public fun <T: View> T.layoutParams(source: android.view.ViewGroup.MarginLayoutParams?, imageSwitcherInit: android.widget.FrameLayout.LayoutParams.() -> Unit = defaultInit): T {
val layoutParams = android.widget.FrameLayout.LayoutParams(source!!)
layoutParams.imageSwitcherInit()
this@layoutParams.setLayoutParams(layoutParams)
return this
}

}

public open class _LinearLayout(ctx: Context): android.widget.LinearLayout(ctx) {
public fun <T: View> T.layoutParams(c: android.content.Context?, attrs: android.util.AttributeSet?, linearLayoutInit: android.widget.LinearLayout.LayoutParams.() -> Unit = defaultInit): T {
val layoutParams = android.widget.LinearLayout.LayoutParams(c!!, attrs!!)
Expand Down Expand Up @@ -614,6 +652,4 @@ public open class _ViewSwitcher(ctx: Context): android.widget.ViewSwitcher(ctx)
return this
}

}


}
58 changes: 28 additions & 30 deletions dsl/testData/functional/15/ViewTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -313,33 +313,6 @@ public inline fun ViewManager.imageButton(inlineOptions(InlineOption.ONLY_LOCAL_
view
}

@suppress("NOTHING_TO_INLINE")
public inline fun ViewManager.imageSwitcher(): android.widget.ImageSwitcher = imageSwitcher({})
public inline fun ViewManager.imageSwitcher(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) init: android.widget.ImageSwitcher.() -> Unit): android.widget.ImageSwitcher = addView<android.widget.ImageSwitcher> {
ctx ->
val view = android.widget.ImageSwitcher(ctx)
view.init()
view
}

@suppress("NOTHING_TO_INLINE")
public inline fun Context.imageSwitcher(): android.widget.ImageSwitcher = imageSwitcher({})
public inline fun Context.imageSwitcher(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) init: android.widget.ImageSwitcher.() -> Unit): android.widget.ImageSwitcher = addView<android.widget.ImageSwitcher> {
ctx ->
val view = android.widget.ImageSwitcher(ctx)
view.init()
view
}

@suppress("NOTHING_TO_INLINE")
public inline fun Activity.imageSwitcher(): android.widget.ImageSwitcher = imageSwitcher({})
public inline fun Activity.imageSwitcher(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) init: android.widget.ImageSwitcher.() -> Unit): android.widget.ImageSwitcher = addView<android.widget.ImageSwitcher> {
ctx ->
val view = android.widget.ImageSwitcher(ctx)
view.init()
view
}

@suppress("NOTHING_TO_INLINE")
public inline fun ViewManager.imageView(): android.widget.ImageView = imageView({})
public inline fun ViewManager.imageView(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) init: android.widget.ImageView.() -> Unit): android.widget.ImageView = addView<android.widget.ImageView> {
Expand Down Expand Up @@ -997,6 +970,33 @@ public inline fun Activity.horizontalScrollView(inlineOptions(InlineOption.ONLY_
view
}

@suppress("NOTHING_TO_INLINE")
public inline fun ViewManager.imageSwitcher(): android.widget.ImageSwitcher = imageSwitcher({})
public inline fun ViewManager.imageSwitcher(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) init: _ImageSwitcher.() -> Unit): android.widget.ImageSwitcher = addView<android.widget.ImageSwitcher> {
ctx ->
val view = _ImageSwitcher(ctx)
view.init()
view
}

@suppress("NOTHING_TO_INLINE")
public inline fun Context.imageSwitcher(): android.widget.ImageSwitcher = imageSwitcher({})
public inline fun Context.imageSwitcher(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) init: _ImageSwitcher.() -> Unit): android.widget.ImageSwitcher = addView<android.widget.ImageSwitcher> {
ctx ->
val view = _ImageSwitcher(ctx)
view.init()
view
}

@suppress("NOTHING_TO_INLINE")
public inline fun Activity.imageSwitcher(): android.widget.ImageSwitcher = imageSwitcher({})
public inline fun Activity.imageSwitcher(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) init: _ImageSwitcher.() -> Unit): android.widget.ImageSwitcher = addView<android.widget.ImageSwitcher> {
ctx ->
val view = _ImageSwitcher(ctx)
view.init()
view
}

@suppress("NOTHING_TO_INLINE")
public inline fun ViewManager.linearLayout(): android.widget.LinearLayout = linearLayout({})
public inline fun ViewManager.linearLayout(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) init: _LinearLayout.() -> Unit): android.widget.LinearLayout = addView<android.widget.LinearLayout> {
Expand Down Expand Up @@ -1238,6 +1238,4 @@ public inline fun Activity.viewSwitcher(inlineOptions(InlineOption.ONLY_LOCAL_RE
val view = _ViewSwitcher(ctx)
view.init()
view
}


}
42 changes: 39 additions & 3 deletions dsl/testData/functional/15s/LayoutsTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -540,6 +540,44 @@ public open class _HorizontalScrollView(ctx: Context): android.widget.Horizontal

}

public open class _ImageSwitcher(ctx: Context): android.widget.ImageSwitcher(ctx) {
public fun <T: View> T.layoutParams(c: android.content.Context?, attrs: android.util.AttributeSet?, imageSwitcherInit: android.widget.FrameLayout.LayoutParams.() -> Unit = defaultInit): T {
val layoutParams = android.widget.FrameLayout.LayoutParams(c!!, attrs!!)
layoutParams.imageSwitcherInit()
this@layoutParams.setLayoutParams(layoutParams)
return this
}

public fun <T: View> T.layoutParams(width: Int = android.view.ViewGroup.LayoutParams.WRAP_CONTENT, height: Int = android.view.ViewGroup.LayoutParams.WRAP_CONTENT, imageSwitcherInit: android.widget.FrameLayout.LayoutParams.() -> Unit = defaultInit): T {
val layoutParams = android.widget.FrameLayout.LayoutParams(width, height)
layoutParams.imageSwitcherInit()
this@layoutParams.setLayoutParams(layoutParams)
return this
}

public fun <T: View> T.layoutParams(width: Int = android.view.ViewGroup.LayoutParams.WRAP_CONTENT, height: Int = android.view.ViewGroup.LayoutParams.WRAP_CONTENT, gravity: Int, imageSwitcherInit: android.widget.FrameLayout.LayoutParams.() -> Unit = defaultInit): T {
val layoutParams = android.widget.FrameLayout.LayoutParams(width, height, gravity)
layoutParams.imageSwitcherInit()
this@layoutParams.setLayoutParams(layoutParams)
return this
}

public fun <T: View> T.layoutParams(source: android.view.ViewGroup.LayoutParams?, imageSwitcherInit: android.widget.FrameLayout.LayoutParams.() -> Unit = defaultInit): T {
val layoutParams = android.widget.FrameLayout.LayoutParams(source!!)
layoutParams.imageSwitcherInit()
this@layoutParams.setLayoutParams(layoutParams)
return this
}

public fun <T: View> T.layoutParams(source: android.view.ViewGroup.MarginLayoutParams?, imageSwitcherInit: android.widget.FrameLayout.LayoutParams.() -> Unit = defaultInit): T {
val layoutParams = android.widget.FrameLayout.LayoutParams(source!!)
layoutParams.imageSwitcherInit()
this@layoutParams.setLayoutParams(layoutParams)
return this
}

}

public open class _LinearLayout(ctx: Context): android.widget.LinearLayout(ctx) {
public fun <T: View> T.layoutParams(c: android.content.Context?, attrs: android.util.AttributeSet?, linearLayoutInit: android.widget.LinearLayout.LayoutParams.() -> Unit = defaultInit): T {
val layoutParams = android.widget.LinearLayout.LayoutParams(c!!, attrs!!)
Expand Down Expand Up @@ -894,6 +932,4 @@ public open class _ViewSwitcher(ctx: Context): android.widget.ViewSwitcher(ctx)
return this
}

}


}
58 changes: 28 additions & 30 deletions dsl/testData/functional/15s/ViewTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -439,33 +439,6 @@ public inline fun ViewManager.imageButton(inlineOptions(InlineOption.ONLY_LOCAL_
view
}

@suppress("NOTHING_TO_INLINE")
public inline fun ViewManager.imageSwitcher(): android.widget.ImageSwitcher = imageSwitcher({})
public inline fun ViewManager.imageSwitcher(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) init: android.widget.ImageSwitcher.() -> Unit): android.widget.ImageSwitcher = addView<android.widget.ImageSwitcher> {
ctx ->
val view = android.widget.ImageSwitcher(ctx)
view.init()
view
}

@suppress("NOTHING_TO_INLINE")
public inline fun Context.imageSwitcher(): android.widget.ImageSwitcher = imageSwitcher({})
public inline fun Context.imageSwitcher(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) init: android.widget.ImageSwitcher.() -> Unit): android.widget.ImageSwitcher = addView<android.widget.ImageSwitcher> {
ctx ->
val view = android.widget.ImageSwitcher(ctx)
view.init()
view
}

@suppress("NOTHING_TO_INLINE")
public inline fun Activity.imageSwitcher(): android.widget.ImageSwitcher = imageSwitcher({})
public inline fun Activity.imageSwitcher(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) init: android.widget.ImageSwitcher.() -> Unit): android.widget.ImageSwitcher = addView<android.widget.ImageSwitcher> {
ctx ->
val view = android.widget.ImageSwitcher(ctx)
view.init()
view
}

@suppress("NOTHING_TO_INLINE")
public inline fun ViewManager.imageView(): android.widget.ImageView = imageView({})
public inline fun ViewManager.imageView(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) init: android.widget.ImageView.() -> Unit): android.widget.ImageView = addView<android.widget.ImageView> {
Expand Down Expand Up @@ -1312,6 +1285,33 @@ public inline fun Activity.horizontalScrollView(inlineOptions(InlineOption.ONLY_
view
}

@suppress("NOTHING_TO_INLINE")
public inline fun ViewManager.imageSwitcher(): android.widget.ImageSwitcher = imageSwitcher({})
public inline fun ViewManager.imageSwitcher(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) init: _ImageSwitcher.() -> Unit): android.widget.ImageSwitcher = addView<android.widget.ImageSwitcher> {
ctx ->
val view = _ImageSwitcher(ctx)
view.init()
view
}

@suppress("NOTHING_TO_INLINE")
public inline fun Context.imageSwitcher(): android.widget.ImageSwitcher = imageSwitcher({})
public inline fun Context.imageSwitcher(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) init: _ImageSwitcher.() -> Unit): android.widget.ImageSwitcher = addView<android.widget.ImageSwitcher> {
ctx ->
val view = _ImageSwitcher(ctx)
view.init()
view
}

@suppress("NOTHING_TO_INLINE")
public inline fun Activity.imageSwitcher(): android.widget.ImageSwitcher = imageSwitcher({})
public inline fun Activity.imageSwitcher(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) init: _ImageSwitcher.() -> Unit): android.widget.ImageSwitcher = addView<android.widget.ImageSwitcher> {
ctx ->
val view = _ImageSwitcher(ctx)
view.init()
view
}

@suppress("NOTHING_TO_INLINE")
public inline fun ViewManager.linearLayout(): android.widget.LinearLayout = linearLayout({})
public inline fun ViewManager.linearLayout(inlineOptions(InlineOption.ONLY_LOCAL_RETURN) init: _LinearLayout.() -> Unit): android.widget.LinearLayout = addView<android.widget.LinearLayout> {
Expand Down Expand Up @@ -1553,6 +1553,4 @@ public inline fun Activity.viewSwitcher(inlineOptions(InlineOption.ONLY_LOCAL_RE
val view = _ViewSwitcher(ctx)
view.init()
view
}


}
Loading

0 comments on commit ed39f2c

Please sign in to comment.