diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index d4c59968fef..e59dd7103e3 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -1888,6 +1888,22 @@ public class ExpressionCodegen extends JetVisitor implem if (descriptor instanceof PropertyDescriptor) { PropertyDescriptor propertyDescriptor = (PropertyDescriptor) descriptor; + JetFile file = DescriptorToSourceUtils.getContainingFile(propertyDescriptor); + if (file != null && file.getName() == "ANDROIDXML.kt") { + + String userData = (String) file.getUserData(AndroidConst.ANDROID_SYNTHETIC); + String androidPackage = file.getUserData(AndroidConst.ANDROID_USER_PACKAGE); + + Type retType = typeMapper.mapType(propertyDescriptor.getReturnType()); + v.load(0, Type.getType("Landroid/app/Activity;")); + v.getstatic(androidPackage.replace(".", "/") + "/R$id", + propertyDescriptor.getName().asString(), "I"); + v.invokevirtual("android/app/Activity", "findViewById", "(I)" + "Landroid/view/View;"); + v.checkcast(retType); + + return StackValue.onStack(retType); + } + boolean directToField = expression.getReferencedNameElementType() == JetTokens.FIELD_IDENTIFIER && contextKind() != OwnerKind.TRAIT_IMPL; JetExpression r = getReceiverForSelector(expression); diff --git a/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidConst.java b/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidConst.java new file mode 100644 index 00000000000..ed532431621 --- /dev/null +++ b/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidConst.java @@ -0,0 +1,8 @@ +package org.jetbrains.jet.lang.resolve.android; + +import com.intellij.openapi.util.Key; + +public class AndroidConst { + public static final Key ANDROID_SYNTHETIC = Key.create("ANDROID_SYNTHETIC"); + public static final Key ANDROID_USER_PACKAGE = Key.create("ANDROID_USER_PACKAGE"); +} diff --git a/compiler/testData/android/converter/AndroidManifest.xml b/compiler/testData/android/converter/AndroidManifest.xml new file mode 100644 index 00000000000..580c474f5de --- /dev/null +++ b/compiler/testData/android/converter/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file