diff --git a/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidXmlHandler.kt b/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidXmlHandler.kt
index 5a16f22a894..c2485cffa31 100644
--- a/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidXmlHandler.kt
+++ b/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidXmlHandler.kt
@@ -31,10 +31,10 @@ class AndroidXmlHandler(private val resourceManager: AndroidResourceManager, pri
}
override fun startElement(uri: String, localName: String, qName: String, attributes: Attributes) {
- val hashMap = attributes.toMap()
- val s = hashMap[resourceManager.idAttributeNoNamespace]
- val className = hashMap[resourceManager.classAttributeNoNamespace] ?: localName
- if (resourceManager.isResourceDeclarationOrUsage(s)) elementCallback(resourceManager.idToName(s), className)
+ val attributesMap = attributes.toMap()
+ val idAttr = attributesMap[resourceManager.idAttributeNoNamespace]
+ val classNameAttr = attributesMap[resourceManager.classAttributeNoNamespace] ?: localName
+ if (resourceManager.isResourceDeclarationOrUsage(idAttr)) elementCallback(resourceManager.idToName(idAttr), classNameAttr)
}
override fun endElement(uri: String?, localName: String, qName: String) {
diff --git a/idea/src/org/jetbrains/jet/plugin/android/AndroidXmlVisitor.kt b/idea/src/org/jetbrains/jet/plugin/android/AndroidXmlVisitor.kt
index 03f2d6fd314..77a16c5bda9 100644
--- a/idea/src/org/jetbrains/jet/plugin/android/AndroidXmlVisitor.kt
+++ b/idea/src/org/jetbrains/jet/plugin/android/AndroidXmlVisitor.kt
@@ -36,7 +36,8 @@ class AndroidXmlVisitor(val resourceManager: AndroidResourceManager, val element
override fun visitXmlTag(tag: XmlTag?) {
val attribute = tag?.getAttribute(resourceManager.idAttribute)
if (attribute != null && attribute.getValue() != null) {
- elementCallback(resourceManager.idToName(attribute.getValue()), tag!!.getLocalName(), attribute)
+ val classNameAttr = tag?.getAttribute(resourceManager.classAttributeNoNamespace)?.getValue() ?: tag?.getLocalName()
+ elementCallback(resourceManager.idToName(attribute.getValue()), classNameAttr!!, attribute)
}
tag?.acceptChildren(this)
}
diff --git a/idea/testData/android/crossParser/AndroidManifest.xml b/idea/testData/android/crossParser/AndroidManifest.xml
new file mode 100644
index 00000000000..c82007dcc87
--- /dev/null
+++ b/idea/testData/android/crossParser/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/idea/testData/android/crossParser/fqNameInAttr/AndroidManifest.xml b/idea/testData/android/crossParser/fqNameInAttr/AndroidManifest.xml
deleted file mode 100644
index 580c474f5de..00000000000
--- a/idea/testData/android/crossParser/fqNameInAttr/AndroidManifest.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/idea/testData/android/crossParser/fqNameInAttr/layout.kt b/idea/testData/android/crossParser/fqNameInAttr/layout.kt
deleted file mode 100644
index 5ec16eef328..00000000000
--- a/idea/testData/android/crossParser/fqNameInAttr/layout.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.myapp
-
-import android.app.Activity
-import android.view.View
-import android.widget.*
-
-val Activity.MyButton: org.my.cool.Button
- get() = findViewById(0) as org.my.cool.Button
-
diff --git a/idea/testData/android/crossParser/fqNameInAttr/layout/layout.xml b/idea/testData/android/crossParser/fqNameInAttr/res/layout/layout.xml
similarity index 100%
rename from idea/testData/android/crossParser/fqNameInAttr/layout/layout.xml
rename to idea/testData/android/crossParser/fqNameInAttr/res/layout/layout.xml
diff --git a/idea/testData/android/crossParser/fqNameInTag/AndroidManifest.xml b/idea/testData/android/crossParser/fqNameInTag/AndroidManifest.xml
deleted file mode 100644
index 580c474f5de..00000000000
--- a/idea/testData/android/crossParser/fqNameInTag/AndroidManifest.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/idea/testData/android/crossParser/fqNameInTag/layout.kt b/idea/testData/android/crossParser/fqNameInTag/layout.kt
deleted file mode 100644
index 5ec16eef328..00000000000
--- a/idea/testData/android/crossParser/fqNameInTag/layout.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.myapp
-
-import android.app.Activity
-import android.view.View
-import android.widget.*
-
-val Activity.MyButton: org.my.cool.Button
- get() = findViewById(0) as org.my.cool.Button
-
diff --git a/idea/testData/android/crossParser/fqNameInTag/layout/layout.xml b/idea/testData/android/crossParser/fqNameInTag/res/layout/layout.xml
similarity index 100%
rename from idea/testData/android/crossParser/fqNameInTag/layout/layout.xml
rename to idea/testData/android/crossParser/fqNameInTag/res/layout/layout.xml
diff --git a/idea/testData/android/crossParser/multiFile/AndroidManifest.xml b/idea/testData/android/crossParser/multiFile/AndroidManifest.xml
deleted file mode 100644
index 580c474f5de..00000000000
--- a/idea/testData/android/crossParser/multiFile/AndroidManifest.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/idea/testData/android/crossParser/multiFile/layout.kt b/idea/testData/android/crossParser/multiFile/layout.kt
deleted file mode 100644
index 313d0b13d16..00000000000
--- a/idea/testData/android/crossParser/multiFile/layout.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.myapp
-
-import android.app.Activity
-import android.view.View
-import android.widget.*
-
-val Activity.item_detail_container: FrameLayout
- get() = findViewById(0) as FrameLayout
-
-val Activity.textView1: TextView
- get() = findViewById(0) as TextView
-
-val Activity.password: EditText
- get() = findViewById(0) as EditText
-
-val Activity.login: Button
- get() = findViewById(0) as Button
-
-val Activity.frameLayout: FrameLayout
- get() = findViewById(0) as FrameLayout
-
-val Activity.passwordField: TextView
- get() = findViewById(0) as TextView
-
-val Activity.passwordCaption: EditText
- get() = findViewById(0) as EditText
-
-val Activity.loginButton: Button
- get() = findViewById(0) as Button
-
diff --git a/idea/testData/android/crossParser/multiFile/layout/layout.xml b/idea/testData/android/crossParser/multiFile/res/layout/layout.xml
similarity index 100%
rename from idea/testData/android/crossParser/multiFile/layout/layout.xml
rename to idea/testData/android/crossParser/multiFile/res/layout/layout.xml
diff --git a/idea/testData/android/crossParser/multiFile/layout/layout1.xml b/idea/testData/android/crossParser/multiFile/res/layout/layout1.xml
similarity index 100%
rename from idea/testData/android/crossParser/multiFile/layout/layout1.xml
rename to idea/testData/android/crossParser/multiFile/res/layout/layout1.xml
diff --git a/idea/testData/android/crossParser/noIds/AndroidManifest.xml b/idea/testData/android/crossParser/noIds/AndroidManifest.xml
deleted file mode 100644
index 580c474f5de..00000000000
--- a/idea/testData/android/crossParser/noIds/AndroidManifest.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/idea/testData/android/crossParser/noIds/layout.kt b/idea/testData/android/crossParser/noIds/layout.kt
deleted file mode 100644
index efb6ca1b54b..00000000000
--- a/idea/testData/android/crossParser/noIds/layout.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.myapp
-
-import android.app.Activity
-import android.view.View
-import android.widget.*
-
diff --git a/idea/testData/android/crossParser/noIds/layout/layout.xml b/idea/testData/android/crossParser/noIds/res/layout/layout.xml
similarity index 100%
rename from idea/testData/android/crossParser/noIds/layout/layout.xml
rename to idea/testData/android/crossParser/noIds/res/layout/layout.xml
diff --git a/idea/testData/android/crossParser/singleFile/AndroidManifest.xml b/idea/testData/android/crossParser/singleFile/AndroidManifest.xml
deleted file mode 100644
index 580c474f5de..00000000000
--- a/idea/testData/android/crossParser/singleFile/AndroidManifest.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/idea/testData/android/crossParser/singleFile/MyActivity.kt b/idea/testData/android/crossParser/singleFile/MyActivity.kt
deleted file mode 100644
index 3d61c9fb897..00000000000
--- a/idea/testData/android/crossParser/singleFile/MyActivity.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.myapp
-
-import android.app.Activity
-import android.view.View
-import android.widget.*
-
-class MyActivity(): Activity() {
- val textViewWidget = TextView()
- val editTextWidget = EditText()
- val buttonWidget = Button()
-
- override fun findViewById(id: Int): View? {
- return when (id) {
- R.id.textView1 -> textViewWidget
- R.id.password -> editTextWidget
- R.id.login -> buttonWidget
- else -> null
- }
- }
-
- fun test(): String {
- return if (password.toString() == "EditText" &&
- textView1.toString() == "TextView" &&
- login.toString() == "Button" )
- "OK" else "NOTOK"
- }
-}
\ No newline at end of file
diff --git a/idea/testData/android/crossParser/singleFile/R.kt b/idea/testData/android/crossParser/singleFile/R.kt
deleted file mode 100644
index 3e9f1eb1b9f..00000000000
--- a/idea/testData/android/crossParser/singleFile/R.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.myapp
-
-class R {
- class id {
- class object {
- val item_detail_container = 0
- val textView1 = 1
- val password = 2
- val textView2 = 3
- val passwordConfirmation = 4
- val login = 5
- }
- }
-}
\ No newline at end of file
diff --git a/idea/testData/android/crossParser/singleFile/layout.kt b/idea/testData/android/crossParser/singleFile/layout.kt
deleted file mode 100644
index c8ebd646620..00000000000
--- a/idea/testData/android/crossParser/singleFile/layout.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.myapp
-
-import android.app.Activity
-import android.view.View
-import android.widget.*
-
-val Activity.item_detail_container: FrameLayout
- get() = findViewById(0) as FrameLayout
-
-val Activity.textView1: TextView
- get() = findViewById(0) as TextView
-
-val Activity.password: EditText
- get() = findViewById(0) as EditText
-
-val Activity.login: Button
- get() = findViewById(0) as Button
-
diff --git a/idea/testData/android/crossParser/singleFile/layout/layout.xml b/idea/testData/android/crossParser/singleFile/res/layout/layout.xml
similarity index 100%
rename from idea/testData/android/crossParser/singleFile/layout/layout.xml
rename to idea/testData/android/crossParser/singleFile/res/layout/layout.xml
diff --git a/idea/tests/org/jetbrains/jet/android/AbstractCrossParserTest.kt b/idea/tests/org/jetbrains/jet/android/AbstractCrossParserTest.kt
index 8343baf6820..beaa0ae5c57 100644
--- a/idea/tests/org/jetbrains/jet/android/AbstractCrossParserTest.kt
+++ b/idea/tests/org/jetbrains/jet/android/AbstractCrossParserTest.kt
@@ -36,13 +36,15 @@ import com.intellij.ide.startup.impl.StartupManagerImpl
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess
import org.jetbrains.jet.JetTestCaseBuilder
import com.intellij.openapi.startup.StartupManager
+import com.android.SdkConstants
+import com.intellij.openapi.application.PathManager
-public abstract class AbstractCrossParserTest : LightCodeInsightFixtureTestCase() {
+public abstract class AbstractCrossParserTest : KotlinAndroidTestCase() {
public fun doTest(path: String) {
- val project = myFixture.getProject()
+ val project = myFixture!!.getProject()
project.putUserData(TestConst.TESTDATA_PATH, path)
- myFixture.copyDirectoryToProject(getTestName(true), "")
- val cliParser = CliAndroidUIXmlProcessor(project, path + "/layout", path + "AndroidManifest.xml")
+ myFixture!!.copyDirectoryToProject(getResDir()!!, "res")
+ val cliParser = CliAndroidUIXmlProcessor(project, path + getResDir() + "/layout/", path + "../AndroidManifest.xml")
val ideParser = IDEAndroidUIXmlProcessor(project)
val cliResult = cliParser.parseToPsi(project)!!.getText()
@@ -51,10 +53,9 @@ public abstract class AbstractCrossParserTest : LightCodeInsightFixtureTestCase(
assertEquals(cliResult, ideResult)
}
override fun setUp() {
+ System.setProperty(KotlinAndroidTestCaseBase.SDK_PATH_PROPERTY, PathManager.getHomePath() + "/androidSDK/")
+ System.setProperty(KotlinAndroidTestCaseBase.PLATFORM_DIR_PROPERTY, "android-17")
super.setUp()
- myFixture.setTestDataPath(PluginTestCaseBase.getTestDataPathBase() + "/android/crossParser")
- (StartupManager.getInstance(getProject()) as StartupManagerImpl).runPostStartupActivities()
- VfsRootAccess.allowRootAccess(JetTestCaseBuilder.getHomeDirectory())
}
private fun getEnvironment(testPath: String): JetCoreEnvironment {
@@ -63,7 +64,14 @@ public abstract class AbstractCrossParserTest : LightCodeInsightFixtureTestCase(
configuration.put(JVMConfigurationKeys.ANDROID_MANIFEST, testPath + "/AndroidManifest.xml")
return JetCoreEnvironment.createForTests(getTestRootDisposable()!!, configuration)
}
+
override fun getTestDataPath(): String? {
- return PluginTestCaseBase.getTestDataPathBase() + "/android/crossParser/"
+ return PluginTestCaseBase.getTestDataPathBase() + "/android/crossParser/" + getTestName(true) + "/"
}
+
+ override fun createManifest() {
+ myFixture!!.copyFileToProject("idea/testData/android/AndroidManifest.xml", SdkConstants.FN_ANDROID_MANIFEST_XML)
+ }
+
+ override fun requireRecentSdk() = true
}
\ No newline at end of file
diff --git a/idea/tests/org/jetbrains/jet/android/KotlinAndroidTestCase.java b/idea/tests/org/jetbrains/jet/android/KotlinAndroidTestCase.java
index 8b49044e4e5..6e4b3101ef3 100644
--- a/idea/tests/org/jetbrains/jet/android/KotlinAndroidTestCase.java
+++ b/idea/tests/org/jetbrains/jet/android/KotlinAndroidTestCase.java
@@ -114,7 +114,6 @@ public abstract class KotlinAndroidTestCase extends KotlinAndroidTestCaseBase {
createManifest();
myFacet = addAndroidFacet(myModule, sdkPath, getPlatformDir(), isToAddSdk());
- myFixture.copyDirectoryToProject(getResDir(), "res");
myAdditionalModules = new ArrayList();