Pass GlobalSearchScope instance to JvmPackagePartProvider

Currently behavior is unchanged because the "all project" scope is passed,
however in the future this will allow to implement separate modules in the
compiler properly
This commit is contained in:
Alexander Udalov
2016-09-29 19:14:21 +03:00
parent 54dfe760c0
commit 3314725700
9 changed files with 43 additions and 26 deletions
@@ -39,10 +39,11 @@ object GenerationUtils {
@JvmStatic
fun compileFiles(files: List<KtFile>, environment: KotlinCoreEnvironment?): GenerationState {
val packagePartProvider = if (environment == null) PackagePartProvider.Empty else JvmPackagePartProvider(environment)
val configuration = environment?.configuration ?: KotlinTestUtils.newConfiguration()
val analysisResult = JvmResolveUtil.analyzeAndCheckForErrors(files.first().project, files, configuration, packagePartProvider)
val analysisResult = JvmResolveUtil.analyzeAndCheckForErrors(files.first().project, files, configuration) { scope ->
if (environment == null) PackagePartProvider.Empty else JvmPackagePartProvider(environment, scope)
}
analysisResult.throwIfError()
val state = GenerationState(
@@ -18,7 +18,9 @@ package org.jetbrains.kotlin.jvm.compiler;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.psi.search.GlobalSearchScope;
import junit.framework.ComparisonFailure;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.analyzer.AnalysisResult;
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport;
@@ -29,10 +31,7 @@ import org.jetbrains.kotlin.cli.jvm.config.JvmContentRootsKt;
import org.jetbrains.kotlin.config.CompilerConfiguration;
import org.jetbrains.kotlin.config.ContentRootsKt;
import org.jetbrains.kotlin.config.JVMConfigurationKeys;
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.psi.KtFile;
import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
@@ -155,12 +154,17 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir {
JvmContentRootsKt.addJavaSourceRoot(configuration, new File("compiler/testData/loadJava/include"));
JvmContentRootsKt.addJavaSourceRoot(configuration, tmpdir);
KotlinCoreEnvironment environment =
final KotlinCoreEnvironment environment =
KotlinCoreEnvironment.createForTests(getTestRootDisposable(), configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES);
AnalysisResult result = TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(
environment.getProject(), environment.getSourceFiles(), new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(),
configuration, new JvmPackagePartProvider(environment)
configuration, new Function1<GlobalSearchScope, PackagePartProvider>() {
@Override
public PackagePartProvider invoke(GlobalSearchScope scope) {
return new JvmPackagePartProvider(environment, scope);
}
}
);
PackageViewDescriptor packageView = result.getModuleDescriptor().getPackage(TEST_PACKAGE_FQNAME);
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.resolve.lazy
import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analyzer.AnalysisResult
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider
@@ -34,14 +35,16 @@ object JvmResolveUtil {
@JvmStatic
fun analyzeAndCheckForErrors(files: Collection<KtFile>, environment: KotlinCoreEnvironment): AnalysisResult =
analyzeAndCheckForErrors(environment.project, files, environment.configuration, JvmPackagePartProvider(environment))
analyzeAndCheckForErrors(environment.project, files, environment.configuration) { scope ->
JvmPackagePartProvider(environment, scope)
}
@JvmStatic
fun analyzeAndCheckForErrors(
project: Project,
files: Collection<KtFile>,
configuration: CompilerConfiguration,
packagePartProvider: PackagePartProvider
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider
): AnalysisResult {
for (file in files) {
AnalyzingUtils.checkForSyntacticErrors(file)
@@ -62,16 +65,18 @@ object JvmResolveUtil {
@JvmStatic
fun analyze(files: Collection<KtFile>, environment: KotlinCoreEnvironment): AnalysisResult =
analyze(environment.project, files, environment.configuration, JvmPackagePartProvider(environment))
analyze(environment.project, files, environment.configuration) { scope ->
JvmPackagePartProvider(environment, scope)
}
private fun analyze(
project: Project,
files: Collection<KtFile>,
configuration: CompilerConfiguration,
packagePartProvider: PackagePartProvider
packagePartProviderFactory: (GlobalSearchScope) -> PackagePartProvider
): AnalysisResult {
return TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(
project, files, CliLightClassGenerationSupport.CliBindingTrace(), configuration, packagePartProvider
project, files, CliLightClassGenerationSupport.CliBindingTrace(), configuration, packagePartProviderFactory
)
}
}