diff --git a/.idea/artifacts/KotlinPlugin.xml b/.idea/artifacts/KotlinPlugin.xml
index b5adfe25356..d2d050547b6 100644
--- a/.idea/artifacts/KotlinPlugin.xml
+++ b/.idea/artifacts/KotlinPlugin.xml
@@ -38,6 +38,7 @@
+
diff --git a/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidUIXmlParser.kt b/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidUIXmlParser.kt
index 48e5f073dc3..068774ce15f 100644
--- a/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidUIXmlParser.kt
+++ b/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidUIXmlParser.kt
@@ -1,13 +1,12 @@
package org.jetbrains.jet.lang.resolve.android
-import java.nio.file.Path
-import org.jetbrains.jet.lang.psi.JetFile
import java.util.ArrayList
import javax.xml.parsers.SAXParserFactory
import java.io.File
import java.io.FileInputStream
import com.intellij.openapi.project.Project
-import org.jetbrains.jet.lang.psi.JetPsiFactory
+import org.jetbrains.kotlin.psi.JetPsiFactory
+import org.jetbrains.kotlin.psi.JetFile
class AndroidUIXmlParser(val project: Project?, val searchPaths: Collection) {
@@ -23,7 +22,7 @@ class AndroidUIXmlParser(val project: Project?, val searchPaths: Collection())!!
+ }
+ public fun getPaths(): Collection
+}
diff --git a/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/CliAndroidUIXmlPathProvider.kt b/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/CliAndroidUIXmlPathProvider.kt
new file mode 100644
index 00000000000..37001c1c786
--- /dev/null
+++ b/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/CliAndroidUIXmlPathProvider.kt
@@ -0,0 +1,11 @@
+package org.jetbrains.jet.lang.resolve.android
+
+import java.io.File
+
+class CliAndroidUIXmlPathProvider: AndroidUIXmlPathProvider {
+
+ override fun getPaths(): MutableCollection {
+ throw UnsupportedOperationException()
+ }
+}
+
diff --git a/compiler/frontend.java/frontend.java.iml b/compiler/frontend.java/frontend.java.iml
index a93d520b9c6..4cc0eaa8b4b 100644
--- a/compiler/frontend.java/frontend.java.iml
+++ b/compiler/frontend.java/frontend.java.iml
@@ -14,5 +14,6 @@
+
-
\ No newline at end of file
+
diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.java
index ed8a1093514..2aab0e43e73 100644
--- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.java
+++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.java
@@ -17,11 +17,14 @@
package org.jetbrains.kotlin.resolve.jvm;
import com.google.common.base.Predicate;
+import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiFile;
import com.intellij.psi.search.GlobalSearchScope;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlParser;
+import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlPathProvider;
import org.jetbrains.kotlin.analyzer.AnalysisResult;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.context.GlobalContext;
@@ -42,6 +45,7 @@ import org.jetbrains.kotlin.resolve.ImportPath;
import org.jetbrains.kotlin.resolve.TopDownAnalysisParameters;
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
+import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -116,8 +120,11 @@ public enum TopDownAnalyzerFacadeForJVM {
@Nullable List moduleIds,
@Nullable IncrementalCacheProvider incrementalCacheProvider
) {
+ List filesToAnalyze = new ArrayList(files);
+ filesToAnalyze.add(searchForAndroidDeclarations(project));
+
FileBasedDeclarationProviderFactory providerFactory =
- new FileBasedDeclarationProviderFactory(topDownAnalysisParameters.getStorageManager(), files);
+ new FileBasedDeclarationProviderFactory(topDownAnalysisParameters.getStorageManager(), filesToAnalyze);
InjectorForTopDownAnalyzerForJvm injector = new InjectorForTopDownAnalyzerForJvm(
project,
@@ -146,7 +153,7 @@ public enum TopDownAnalyzerFacadeForJVM {
}
additionalProviders.add(injector.getJavaDescriptorResolver().getPackageFragmentProvider());
- injector.getLazyTopDownAnalyzerForTopLevel().analyzeFiles(topDownAnalysisParameters, files, additionalProviders);
+ injector.getLazyTopDownAnalyzerForTopLevel().analyzeFiles(topDownAnalysisParameters, filesToAnalyze, additionalProviders);
return AnalysisResult.success(trace.getBindingContext(), module);
}
finally {
@@ -169,4 +176,10 @@ public enum TopDownAnalyzerFacadeForJVM {
module.seal();
return module;
}
+
+ private static JetFile searchForAndroidDeclarations(Project project) {
+ AndroidUIXmlPathProvider provider = ServiceManager.getService(project, AndroidUIXmlPathProvider.class);
+ Collection paths = provider.getPaths();
+ return new AndroidUIXmlParser(project, paths).parseToPsi();
+ }
}
diff --git a/idea/idea.iml b/idea/idea.iml
index 2c4e2596be1..dd7c72a89d8 100644
--- a/idea/idea.iml
+++ b/idea/idea.iml
@@ -39,10 +39,11 @@
+
-
\ No newline at end of file
+
diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml
index a1830afacb4..4d9600e5a91 100644
--- a/idea/src/META-INF/plugin.xml
+++ b/idea/src/META-INF/plugin.xml
@@ -192,6 +192,9 @@
+
+
diff --git a/idea/src/org/jetbrains/jet/plugin/android/IDEAndroidUIXmlPathProvider.kt b/idea/src/org/jetbrains/jet/plugin/android/IDEAndroidUIXmlPathProvider.kt
new file mode 100644
index 00000000000..9d630471e0b
--- /dev/null
+++ b/idea/src/org/jetbrains/jet/plugin/android/IDEAndroidUIXmlPathProvider.kt
@@ -0,0 +1,12 @@
+package org.jetbrains.jet.plugin.android
+
+import com.intellij.openapi.project.Project
+import org.jetbrains.jet.lang.resolve.android.AndroidUIXmlPathProvider
+import java.io.File
+
+class IDEAndroidUIXmlPathProvider(val project: Project): AndroidUIXmlPathProvider {
+
+ override fun getPaths(): MutableCollection {
+ return arrayListOf(File("/tmp/android/"))
+ }
+}
\ No newline at end of file