Dropping package facades:
- light classes: do not generate light class for package facade - drop package facades as multifile classes compilation mode support - get rid of some additional package facade fqName usages - update tests for light classes
This commit is contained in:
@@ -21,14 +21,7 @@ import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassesProvider
|
||||
import org.jetbrains.kotlin.psi.JetFile
|
||||
|
||||
public class CodegenFileClassesProvider(private val packageFacadesAsMultifileClasses: Boolean) : JvmFileClassesProvider {
|
||||
override public fun getFileClassInfo(file: JetFile): JvmFileClassInfo {
|
||||
val fileClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(file)
|
||||
if (packageFacadesAsMultifileClasses && !fileClassInfo.withJvmMultifileClass) {
|
||||
return JvmFileClassUtil.getMultifilePackageFacadePartInfo(file)
|
||||
}
|
||||
else {
|
||||
return fileClassInfo
|
||||
}
|
||||
}
|
||||
public class CodegenFileClassesProvider : JvmFileClassesProvider {
|
||||
override public fun getFileClassInfo(file: JetFile): JvmFileClassInfo =
|
||||
JvmFileClassUtil.getFileClassInfoNoResolve(file)
|
||||
}
|
||||
@@ -61,7 +61,7 @@ public class KotlinCodegenFacade {
|
||||
|
||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||
|
||||
MultiMap<FqName, JetFile> filesInPackageClasses = new MultiMap<FqName, JetFile>();
|
||||
MultiMap<FqName, JetFile> filesInPackages = new MultiMap<FqName, JetFile>();
|
||||
MultiMap<FqName, JetFile> filesInMultifileClasses = new MultiMap<FqName, JetFile>();
|
||||
|
||||
for (JetFile file : state.getFiles()) {
|
||||
@@ -72,14 +72,8 @@ public class KotlinCodegenFacade {
|
||||
if (fileClassInfo.getWithJvmMultifileClass()) {
|
||||
filesInMultifileClasses.putValue(fileClassInfo.getFacadeClassFqName(), file);
|
||||
}
|
||||
|
||||
if (state.getPackageFacadesAsMultifileClasses()) {
|
||||
if (!fileClassInfo.getWithJvmMultifileClass()) {
|
||||
filesInMultifileClasses.putValue(PackageClassUtils.getPackageClassFqName(file.getPackageFqName()), file);
|
||||
}
|
||||
}
|
||||
else {
|
||||
filesInPackageClasses.putValue(file.getPackageFqName(), file);
|
||||
filesInPackages.putValue(file.getPackageFqName(), file);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,9 +84,9 @@ public class KotlinCodegenFacade {
|
||||
}
|
||||
|
||||
Set<FqName> packagesWithObsoleteParts = new HashSet<FqName>(state.getPackagesWithObsoleteParts());
|
||||
for (FqName packageFqName : Sets.union(packagesWithObsoleteParts, filesInPackageClasses.keySet())) {
|
||||
for (FqName packageFqName : Sets.union(packagesWithObsoleteParts, filesInPackages.keySet())) {
|
||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||
generatePackage(state, packageFqName, filesInPackageClasses.get(packageFqName), errorHandler);
|
||||
generatePackage(state, packageFqName, filesInPackages.get(packageFqName), errorHandler);
|
||||
}
|
||||
|
||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
|
||||
import org.jetbrains.kotlin.descriptors.*;
|
||||
import org.jetbrains.kotlin.descriptors.impl.ClassDescriptorImpl;
|
||||
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl;
|
||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
|
||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation;
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor;
|
||||
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils;
|
||||
@@ -169,16 +170,16 @@ public class SamWrapperCodegen {
|
||||
|
||||
@NotNull
|
||||
private FqName getWrapperName(@NotNull JetFile containingFile) {
|
||||
FqName packageClassFqName = PackageClassUtils.getPackageClassFqName(containingFile.getPackageFqName());
|
||||
FqName fileClassFqName = JvmFileClassUtil.getFileClassInfoNoResolve(containingFile).getFileClassFqName();
|
||||
JavaClassDescriptor descriptor = samType.getJavaClassDescriptor();
|
||||
int hash = PackagePartClassUtils.getPathHashCode(containingFile.getVirtualFile()) * 31 +
|
||||
DescriptorUtils.getFqNameSafe(descriptor).hashCode();
|
||||
String shortName = String.format(
|
||||
"%s$sam$%s$%08x",
|
||||
packageClassFqName.shortName().asString(),
|
||||
fileClassFqName.shortName().asString(),
|
||||
descriptor.getName().asString(),
|
||||
hash
|
||||
);
|
||||
return packageClassFqName.parent().child(Name.identifier(shortName));
|
||||
return fileClassFqName.parent().child(Name.identifier(shortName));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@ import org.jetbrains.kotlin.codegen.optimization.OptimizationClassBuilderFactory
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
|
||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
||||
import org.jetbrains.kotlin.modules.TargetId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
@@ -53,7 +52,6 @@ public class GenerationState @JvmOverloads constructor(
|
||||
disableInline: Boolean = false,
|
||||
disableOptimization: Boolean = false,
|
||||
public val useTypeTableInSerializer: Boolean = false,
|
||||
public val packageFacadesAsMultifileClasses: Boolean = false,
|
||||
public val diagnostics: DiagnosticSink = DiagnosticSink.DO_NOTHING,
|
||||
public val packagesWithObsoleteParts: Collection<FqName> = emptySet(),
|
||||
public val obsoleteMultifileClasses: Collection<FqName> = emptySet(),
|
||||
@@ -86,7 +84,7 @@ public class GenerationState @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
|
||||
public val fileClassesProvider: CodegenFileClassesProvider = CodegenFileClassesProvider(packageFacadesAsMultifileClasses)
|
||||
public val fileClassesProvider: CodegenFileClassesProvider = CodegenFileClassesProvider()
|
||||
|
||||
private fun getIncrementalCacheForThisTarget() =
|
||||
if (incrementalCompilationComponents != null && targetId != null)
|
||||
|
||||
@@ -43,7 +43,6 @@ import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor;
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor;
|
||||
import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaPackageScope;
|
||||
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils;
|
||||
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackageFragmentProvider;
|
||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache;
|
||||
import org.jetbrains.kotlin.name.*;
|
||||
@@ -148,18 +147,13 @@ public class JetTypeMapper {
|
||||
|
||||
@NotNull
|
||||
public Type mapOwner(@NotNull DeclarationDescriptor descriptor) {
|
||||
return mapOwner(descriptor, false);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private Type mapOwner(@NotNull DeclarationDescriptor descriptor, boolean isImplementation) {
|
||||
if (isLocalFunction(descriptor)) {
|
||||
return asmTypeForAnonymousClass(bindingContext, (FunctionDescriptor) descriptor);
|
||||
}
|
||||
|
||||
DeclarationDescriptor container = descriptor.getContainingDeclaration();
|
||||
if (container instanceof PackageFragmentDescriptor) {
|
||||
return Type.getObjectType(internalNameForPackageMemberOwner((CallableMemberDescriptor) descriptor, isImplementation));
|
||||
return Type.getObjectType(internalNameForPackageMemberOwner((CallableMemberDescriptor) descriptor));
|
||||
}
|
||||
else if (container instanceof ClassDescriptor) {
|
||||
return mapClass((ClassDescriptor) container);
|
||||
@@ -184,7 +178,8 @@ public class JetTypeMapper {
|
||||
if (isImplementation ||
|
||||
descriptor instanceof PropertyDescriptor ||
|
||||
Visibilities.isPrivate(visibility) ||
|
||||
isAccessor/*Cause of KT-9603*/) {
|
||||
isAccessor/*Cause of KT-9603*/
|
||||
) {
|
||||
return FileClasses.getFileClassInternalName(fileClassesProvider, file);
|
||||
}
|
||||
else {
|
||||
@@ -199,8 +194,8 @@ public class JetTypeMapper {
|
||||
if (facadeFqName != null) return facadeFqName;
|
||||
}
|
||||
|
||||
throw new RuntimeException("Unreachable state");
|
||||
//return PackageClassUtils.getPackageClassInternalName(packageFragment.getFqName());
|
||||
throw new RuntimeException("Could not find package member for " + descriptor +
|
||||
" in package fragment " + descriptor.getContainingDeclaration());
|
||||
}
|
||||
|
||||
public static class ContainingClassesInfo {
|
||||
@@ -268,6 +263,8 @@ public class JetTypeMapper {
|
||||
return JvmClassName.byClassId(containingClasses.getFacadeClassId()).getInternalName();
|
||||
}
|
||||
|
||||
private static final ClassId FAKE_CLASS_ID_FOR_BUILTINS = ClassId.topLevel(new FqName("kotlin.KotlinPackage"));
|
||||
|
||||
@Nullable
|
||||
private ContainingClassesInfo getPackageMemberContainingClassesInfo(@NotNull DeserializedCallableMemberDescriptor descriptor) {
|
||||
// XXX This method is a dirty hack.
|
||||
@@ -279,8 +276,7 @@ public class JetTypeMapper {
|
||||
PackageFragmentDescriptor packageFragmentDescriptor = (PackageFragmentDescriptor) containingDeclaration;
|
||||
|
||||
if (packageFragmentDescriptor instanceof BuiltinsPackageFragment) {
|
||||
ClassId builtinsFacadeClassId = ClassId.topLevel(PackageClassUtils.getPackageClassFqName(packageFragmentDescriptor.getFqName()));
|
||||
return new ContainingClassesInfo(builtinsFacadeClassId, builtinsFacadeClassId);
|
||||
return new ContainingClassesInfo(FAKE_CLASS_ID_FOR_BUILTINS, FAKE_CLASS_ID_FOR_BUILTINS);
|
||||
}
|
||||
|
||||
Name implClassName = JvmFileClassUtil.getImplClassName(descriptor);
|
||||
|
||||
Reference in New Issue
Block a user