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
+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();
}
}