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