Support View in android-compiler-plugin

This commit is contained in:
Yan Zhulanow
2015-03-04 21:19:28 +03:00
parent 33a1aa342f
commit 4cc5e9248a
41 changed files with 637 additions and 60 deletions
@@ -3,6 +3,6 @@ package android.app
import android.view.View
import android.content.Context
abstract class Activity: Context {
abstract fun findViewById(id: Int): View?
open class Activity: Context {
open fun findViewById(id: Int): View? = null
}
@@ -1,8 +1,9 @@
package android.app
import android.view.View
import android.content.Context
import android.app.Activity
abstract class Fragment {
abstract fun getView(): View
open fun getActivity(): Activity = throw Exception("Function getActivity() is not overridden")
open fun getView(): View = throw Exception("Function getView() is not overridden")
}
@@ -0,0 +1,45 @@
package com.myapp
import android.app.Activity
import android.app.Fragment
import android.content.Context
import android.view.View
import android.widget.*
import org.my.cool.MyButton
import kotlinx.android.synthetic.layout.*
class R {
class id {
class object {
val login = 5
}
}
}
class BaseView(ctx: Context) : View(ctx) {
val buttonWidget = MyButton(ctx)
override fun findViewById(id: Int): View? {
return when (id) {
R.id.login -> buttonWidget
else -> null
}
}
}
class MyFragment(): Fragment() {
val baseActivity = Activity()
val baseView = BaseView(baseActivity)
override fun getActivity(): Activity = baseActivity
override fun getView(): View = baseView
public fun box(): String {
return if (login.toString() == "MyButton") "OK" else ""
}
}
fun box(): String {
return MyFragment().box()
}
@@ -0,0 +1,32 @@
package com.myapp
import android.app.Activity
import android.app.Fragment
import android.content.Context
import android.view.View
import android.widget.*
import org.my.cool.MyButton
import kotlinx.android.synthetic.layout.*
class R {
class id {
class object {
val login = 5
}
}
}
class BaseView(ctx: Context) : View(ctx) {
val buttonWidget = MyButton(ctx)
}
class MyFragment(): Fragment() {
val baseActivity = Activity()
val baseView = BaseView(baseActivity)
override fun getView(): View = baseView
}
fun box(): String {
return "OK"
}
@@ -0,0 +1,33 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-sdk
android:minSdkVersion="18"
android:targetSdkVersion="18" />
<permission android:name="android"></permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Sample" >
<activity
android:name="com.example.android.basiccontactables.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTop">
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
@@ -0,0 +1,8 @@
package org.my.cool
import android.widget.Button
import android.content.Context
class MyButton(ctx: Context): Button(ctx) {
override fun toString(): String {return "MyButton"}
}
@@ -0,0 +1,15 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ItemDetailActivity"
tools:ignore="MergeRootFrame" >
<view
class="org.my.cool.MyButton"
android:id="@+id/login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Sign in" />
</FrameLayout>
@@ -0,0 +1,44 @@
package com.myapp
import android.app.Activity
import android.view.View
import android.widget.*
import kotlinx.android.synthetic.layout.*
import kotlinx.android.synthetic.layout.view.*
class R {
class id {
class object {
val container = 0
val login = 1
}
}
}
class MyActivity(): Activity() {
val containerWidget = object : FrameLayout(this) {
val loginWidget = Button(this@MyActivity)
override fun findViewById(id: Int): View? {
return when (id) {
R.id.login -> loginWidget
else -> null
}
}
}
override fun findViewById(id: Int): View? {
return when (id) {
R.id.container -> containerWidget
else -> null
}
}
public fun box(): String{
return if (container.login.toString() == "Button") "OK" else ""
}
}
fun box(): String {
return MyActivity().box()
}
@@ -0,0 +1,34 @@
package com.myapp
import android.app.Activity
import android.view.View
import android.widget.*
import kotlinx.android.synthetic.layout.*
import kotlinx.android.synthetic.layout.view.*
class R {
class id {
class object {
val container = 0
val login = 1
}
}
}
class MyActivity(): Activity() {
val containerWidget = object : FrameLayout(this) {
val loginWidget = Button(this@MyActivity)
}
override fun findViewById(id: Int): View? {
return when (id) {
R.id.container -> containerWidget
else -> null
}
}
}
fun box(): String {
return "OK"
}
@@ -0,0 +1,33 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-sdk
android:minSdkVersion="18"
android:targetSdkVersion="18" />
<permission android:name="android"></permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Sample" >
<activity
android:name="com.example.android.basiccontactables.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTop">
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
@@ -0,0 +1,23 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/item_detail_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ItemDetailActivity"
tools:ignore="MergeRootFrame" >
<FrameLayout
android:id="@+id/container"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Sign in" />
</FrameLayout>
</FrameLayout>