ide analyzer integration stub
- add android ui xml path providers/stubs - add generated file injection during analysis
This commit is contained in:
committed by
Yan Zhulanow
parent
aa01d6d7cf
commit
155d2fa979
Generated
+1
@@ -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" />
|
||||
|
||||
+3
-4
@@ -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 {
|
||||
|
||||
+12
@@ -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>
|
||||
}
|
||||
+11
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
+15
-2
@@ -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
@@ -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>
|
||||
|
||||
@@ -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/"))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user