Drop package facades: fix incremental compilation tests & proto comparison tests
(package facades are no longer generated)
This commit is contained in:
@@ -21,6 +21,7 @@ import com.intellij.util.containers.MultiMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo;
|
||||
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils;
|
||||
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.psi.JetFile;
|
||||
@@ -112,6 +113,8 @@ public class KotlinCodegenFacade {
|
||||
@NotNull Collection<JetFile> jetFiles,
|
||||
@NotNull CompilationErrorHandler errorHandler
|
||||
) {
|
||||
// We do not really generate package class, but use old package fqName to identify package in module-info.
|
||||
//FqName packageClassFqName = PackageClassUtils.getPackageClassFqName(packageFqName);
|
||||
PackageCodegen codegen = state.getFactory().forPackage(packageFqName, jetFiles);
|
||||
codegen.generate(errorHandler);
|
||||
}
|
||||
|
||||
@@ -49,12 +49,12 @@ public class PackageCodegen {
|
||||
public PackageCodegen(
|
||||
@NotNull GenerationState state,
|
||||
@NotNull Collection<JetFile> files,
|
||||
@NotNull FqName fqName
|
||||
@NotNull FqName packageFqName
|
||||
) {
|
||||
this.state = state;
|
||||
this.files = files;
|
||||
this.packageFragment = getOnlyPackageFragment(fqName);
|
||||
packageParts = new PackageParts(fqName.asString());
|
||||
this.packageFragment = getOnlyPackageFragment(packageFqName);
|
||||
packageParts = new PackageParts(packageFqName.asString());
|
||||
}
|
||||
|
||||
public void generate(@NotNull CompilationErrorHandler errorHandler) {
|
||||
@@ -124,14 +124,14 @@ public class PackageCodegen {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private PackageFragmentDescriptor getOnlyPackageFragment(@NotNull FqName expectedFqName) {
|
||||
private PackageFragmentDescriptor getOnlyPackageFragment(@NotNull FqName expectedPackageFqName) {
|
||||
SmartList<PackageFragmentDescriptor> fragments = new SmartList<PackageFragmentDescriptor>();
|
||||
for (JetFile file : files) {
|
||||
PackageFragmentDescriptor fragment = state.getBindingContext().get(BindingContext.FILE_TO_PACKAGE_FRAGMENT, file);
|
||||
assert fragment != null : "package fragment is null for " + file + "\n" + file.getText();
|
||||
|
||||
assert expectedFqName.equals(fragment.getFqName()) :
|
||||
"expected package fq name: " + expectedFqName + ", actual: " + fragment.getFqName();
|
||||
assert expectedPackageFqName.equals(fragment.getFqName()) :
|
||||
"expected package fq name: " + expectedPackageFqName + ", actual: " + fragment.getFqName();
|
||||
|
||||
if (!fragments.contains(fragment)) {
|
||||
fragments.add(fragment);
|
||||
|
||||
@@ -56,7 +56,7 @@ public fun FunctionDescriptor.getClassFilePath(typeMapper: JetTypeMapper, cache:
|
||||
kotlinClass.file.canonicalPath!!
|
||||
}
|
||||
else -> {
|
||||
val implementationOwnerType = typeMapper.mapOwner(this)
|
||||
val implementationOwnerType = typeMapper.mapImplementationOwner(this)
|
||||
val className = implementationOwnerType.internalName
|
||||
cache.getClassFilePath(className)
|
||||
}
|
||||
|
||||
@@ -147,13 +147,23 @@ public class JetTypeMapper {
|
||||
|
||||
@NotNull
|
||||
public Type mapOwner(@NotNull DeclarationDescriptor descriptor) {
|
||||
return mapOwner(descriptor, true);
|
||||
}
|
||||
|
||||
public Type mapImplementationOwner(@NotNull DeclarationDescriptor descriptor) {
|
||||
return mapOwner(descriptor, false);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Type mapOwner(@NotNull DeclarationDescriptor descriptor, boolean publicFacade) {
|
||||
if (isLocalFunction(descriptor)) {
|
||||
return asmTypeForAnonymousClass(bindingContext, (FunctionDescriptor) descriptor);
|
||||
}
|
||||
|
||||
DeclarationDescriptor container = descriptor.getContainingDeclaration();
|
||||
if (container instanceof PackageFragmentDescriptor) {
|
||||
return Type.getObjectType(internalNameForPackageMemberOwner((CallableMemberDescriptor) descriptor));
|
||||
String packageMemberOwner = internalNameForPackageMemberOwner((CallableMemberDescriptor) descriptor, publicFacade);
|
||||
return Type.getObjectType(packageMemberOwner);
|
||||
}
|
||||
else if (container instanceof ClassDescriptor) {
|
||||
return mapClass((ClassDescriptor) container);
|
||||
@@ -190,7 +200,7 @@ public class JetTypeMapper {
|
||||
CallableMemberDescriptor directMember = getDirectMember(descriptor);
|
||||
|
||||
if (directMember instanceof DeserializedCallableMemberDescriptor) {
|
||||
String facadeFqName = getPackageMemberOwnerInternalName((DeserializedCallableMemberDescriptor) directMember);
|
||||
String facadeFqName = getPackageMemberOwnerInternalName((DeserializedCallableMemberDescriptor) directMember, publicFacade);
|
||||
if (facadeFqName != null) return facadeFqName;
|
||||
}
|
||||
|
||||
@@ -261,7 +271,7 @@ public class JetTypeMapper {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private String getPackageMemberOwnerInternalName(@NotNull DeserializedCallableMemberDescriptor descriptor) {
|
||||
private String getPackageMemberOwnerInternalName(@NotNull DeserializedCallableMemberDescriptor descriptor, boolean publicFacade) {
|
||||
DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration();
|
||||
assert containingDeclaration instanceof PackageFragmentDescriptor : "Not a top-level member: " + descriptor;
|
||||
|
||||
@@ -270,7 +280,9 @@ public class JetTypeMapper {
|
||||
return null;
|
||||
}
|
||||
|
||||
return JvmClassName.byClassId(containingClasses.getFacadeClassId()).getInternalName();
|
||||
ClassId ownerClassId = publicFacade ? containingClasses.getFacadeClassId()
|
||||
: containingClasses.getImplClassId();
|
||||
return JvmClassName.byClassId(ownerClassId).getInternalName();
|
||||
}
|
||||
|
||||
private static final ClassId FAKE_CLASS_ID_FOR_BUILTINS = ClassId.topLevel(new FqName("kotlin.KotlinPackage"));
|
||||
|
||||
@@ -23,16 +23,8 @@
|
||||
@kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass Anno
|
||||
|
||||
@kotlin.jvm.internal.KotlinFileFacade DefaultTargetsKt {
|
||||
@Anno field p2: int
|
||||
public method getP(): int
|
||||
public method getP2(): int
|
||||
final @Anno field p2: int
|
||||
method <clinit>(): void
|
||||
}
|
||||
|
||||
@java.lang.Deprecated @kotlin.jvm.internal.KotlinPackage _DefaultPackage {
|
||||
public synthetic field $kotlinPackage: kotlin.reflect.KPackage
|
||||
public synthetic field $moduleName: java.lang.String
|
||||
method <clinit>(): void
|
||||
public @kotlin.jvm.internal.KotlinDelegatedMethod method getP(): int
|
||||
public @kotlin.jvm.internal.KotlinDelegatedMethod method getP2(): int
|
||||
}
|
||||
public final method getP(): int
|
||||
public final method getP2(): int
|
||||
}
|
||||
Reference in New Issue
Block a user