ide analyzer integration stub

- add android ui xml path providers/stubs
- add generated file injection during analysis
This commit is contained in:
Mikhail Mutcianko
2014-07-16 16:22:14 +04:00
committed by Yan Zhulanow
parent aa01d6d7cf
commit 155d2fa979
9 changed files with 61 additions and 8 deletions
+1
View File
@@ -38,6 +38,7 @@
<element id="module-output" name="idea-analysis" />
<element id="module-output" name="ide-common" />
<element id="file-copy" path="$PROJECT_DIR$/resources/kotlinManifest.properties" />
<element id="module-output" name="frontend.android" />
<element id="module-output" name="kotlin-android-plugin" />
</element>
<element id="library" level="project" name="javax.inject" />
@@ -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<File>) {
@@ -23,7 +22,7 @@ class AndroidUIXmlParser(val project: Project?, val searchPaths: Collection<File
}
public fun parseToPsi(): JetFile {
return JetPsiFactory.createFile(project, parse())
return JetPsiFactory(project).createFile(parse())
}
private fun isAndroidUIXml(file: File): Boolean {
@@ -0,0 +1,12 @@
package org.jetbrains.jet.lang.resolve.android
import java.io.File
import com.intellij.openapi.project.Project
import com.intellij.openapi.components.ServiceManager
trait AndroidUIXmlPathProvider {
class object {
fun getInstance(project: Project) = ServiceManager.getService(project, javaClass<AndroidUIXmlPathProvider>())!!
}
public fun getPaths(): Collection<File>
}
@@ -0,0 +1,11 @@
package org.jetbrains.jet.lang.resolve.android
import java.io.File
class CliAndroidUIXmlPathProvider: AndroidUIXmlPathProvider {
override fun getPaths(): MutableCollection<File> {
throw UnsupportedOperationException()
}
}
+2 -1
View File
@@ -14,5 +14,6 @@
<orderEntry type="module" module-name="serialization.jvm" />
<orderEntry type="module" module-name="descriptor.loader.java" exported="" />
<orderEntry type="module" module-name="util" />
<orderEntry type="module" module-name="frontend.android" />
</component>
</module>
</module>
@@ -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<String> moduleIds,
@Nullable IncrementalCacheProvider incrementalCacheProvider
) {
List<JetFile> filesToAnalyze = new ArrayList<JetFile>(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<File> paths = provider.getPaths();
return new AndroidUIXmlParser(project, paths).parseToPsi();
}
}
+2 -1
View File
@@ -39,10 +39,11 @@
<orderEntry type="module" module-name="serialization.jvm" />
<orderEntry type="library" scope="PROVIDED" name="maven" level="project" />
<orderEntry type="module" module-name="eval4j" />
<orderEntry type="module" module-name="frontend.android" />
<orderEntry type="module" module-name="idea-analysis" exported="" />
<orderEntry type="module" module-name="kotlin-android-plugin" />
<orderEntry type="module" module-name="js.frontend" />
<orderEntry type="library" scope="PROVIDED" name="coverage-plugin" level="project" />
<orderEntry type="module" module-name="util" />
</component>
</module>
</module>
+3
View File
@@ -192,6 +192,9 @@
<projectService serviceInterface="org.jetbrains.kotlin.idea.stubindex.SubpackagesIndexService"
serviceImplementation="org.jetbrains.kotlin.idea.stubindex.SubpackagesIndexService"/>
<projectService serviceInterface="org.jetbrains.jet.lang.resolve.android.AndroidUIXmlPathProvider"
serviceImplementation="org.jetbrains.jet.plugin.android.IDEAndroidUIXmlPathProvider"/>
<projectService serviceInterface="org.jetbrains.kotlin.idea.caches.resolve.LibraryModificationTracker"
serviceImplementation="org.jetbrains.kotlin.idea.caches.resolve.LibraryModificationTracker"/>
@@ -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<File> {
return arrayListOf(File("/tmp/android/"))
}
}