Drop package facades: fix incremental compilation tests & proto comparison tests

(package facades are no longer generated)
This commit is contained in:
Dmitry Petrov
2015-10-17 17:26:17 +03:00
parent 300aeb83b0
commit 621d26aeeb
74 changed files with 84 additions and 176 deletions
@@ -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
}