PackageFacadeProvider refactoring

This commit is contained in:
Michael Bogdanov
2015-08-27 15:13:42 +03:00
parent 843241848f
commit c274ceffe8
36 changed files with 130 additions and 150 deletions
@@ -14,27 +14,35 @@
* limitations under the License.
*/
package org.jetbrains.kotlin.resolve.lazy
package org.jetbrains.kotlin.cli.jvm.compiler
import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.load.java.lazy.PackageMappingProvider
import org.jetbrains.kotlin.descriptors.PackageFacadeProvider
import org.jetbrains.kotlin.load.kotlin.ModuleMapping
public class JvmPackageMappingProvider(val env: KotlinCoreEnvironment) : PackageMappingProvider {
override fun findPackageMembers(packageName: String): List<String> {
val res = env.configuration.getList(CommonConfigurationKeys.CONTENT_ROOTS).
public class JvmPackageFacadeProvider(val env: KotlinCoreEnvironment) : PackageFacadeProvider {
val roots by lazy {
env.configuration.getList(CommonConfigurationKeys.CONTENT_ROOTS).
filterIsInstance<JvmClasspathRoot>().
map {
env.contentRootToVirtualFile(it);
}.filterNotNull()
}.filter { it?.findChild("META-INF") != null }.filterNotNull()
}
//TODO additional filtering by package existing
//val path = packageName.split("/")
val mappings = res.map {
override fun findPackageFacades(packageInternalName: String): List<String> {
val pathParts = packageInternalName.split('/')
val mappings = roots.filter {
//filter all roots by package path existing
pathParts.fold(it) {
parent, part ->
if (part.isEmpty()) parent
else parent.findChild(part) ?: return@filter false
}
true
}.map {
it.findChild("META-INF")
}.filterNotNull().flatMap {
it.children.filter { it.name.endsWith(ModuleMapping.MAPPING_FILE_EXT) }.toList<VirtualFile>()
@@ -42,6 +50,6 @@ public class JvmPackageMappingProvider(val env: KotlinCoreEnvironment) : Package
ModuleMapping(String(it.contentsToByteArray(), "UTF-8"))
}
return mappings.map { it.findPackageParts(packageName) }.filterNotNull().flatMap { it.parts }.distinct()
return mappings.map { it.findPackageParts(packageInternalName) }.filterNotNull().flatMap { it.parts }.distinct()
}
}
@@ -57,7 +57,6 @@ import org.jetbrains.kotlin.resolve.BindingTraceContext;
import org.jetbrains.kotlin.resolve.ScriptNameUtil;
import org.jetbrains.kotlin.resolve.jvm.JvmClassName;
import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM;
import org.jetbrains.kotlin.resolve.lazy.JvmPackageMappingProvider;
import org.jetbrains.kotlin.util.PerformanceCounter;
import org.jetbrains.kotlin.utils.KotlinPaths;
@@ -328,7 +327,7 @@ public class KotlinToJVMBytecodeCompiler {
sharedTrace,
environment.getConfiguration().get(JVMConfigurationKeys.MODULE_IDS),
environment.getConfiguration().get(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS),
new JvmPackageMappingProvider(environment)
new JvmPackageFacadeProvider(environment)
);
}
}
@@ -57,7 +57,7 @@ import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
import org.jetbrains.kotlin.resolve.jvm.JvmClassName;
import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM;
import org.jetbrains.kotlin.resolve.lazy.FileScopeProvider;
import org.jetbrains.kotlin.resolve.lazy.JvmPackageMappingProvider;
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackageFacadeProvider;
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
import org.jetbrains.kotlin.resolve.lazy.data.JetClassLikeInfo;
import org.jetbrains.kotlin.resolve.lazy.declarations.*;
@@ -127,7 +127,7 @@ public class ReplInterpreter {
scriptDeclarationFactory,
ProjectScope.getAllScope(project),
scopeProvider,
new JvmPackageMappingProvider(environment)
new JvmPackageFacadeProvider(environment)
);
this.topDownAnalysisContext = new TopDownAnalysisContext(TopDownAnalysisMode.LocalDeclarations, DataFlowInfo.EMPTY,
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.frontend.di.configureModule
import org.jetbrains.kotlin.frontend.java.di.configureJavaTopDownAnalysis
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.load.java.JavaClassFinderImpl
import org.jetbrains.kotlin.load.java.lazy.PackageMappingProvider
import org.jetbrains.kotlin.descriptors.PackageFacadeProvider
import org.jetbrains.kotlin.load.java.lazy.SingleModuleClassResolver
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.BodyResolveCache
@@ -40,9 +40,9 @@ import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
public fun createContainerForReplWithJava(
moduleContext: ModuleContext, bindingTrace: BindingTrace, declarationProviderFactory: DeclarationProviderFactory,
moduleContentScope: GlobalSearchScope, additionalFileScopeProvider: FileScopeProvider.AdditionalScopes,
packageMappingProvider: PackageMappingProvider
packageFacadeProvider: PackageFacadeProvider
): ContainerForReplWithJava = createContainer("ReplWithJava") {
useInstance(packageMappingProvider)
useInstance(packageFacadeProvider)
configureModule(moduleContext, JvmPlatform, bindingTrace)
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, LookupTracker.DO_NOTHING)