Skip private members in facades
This commit is contained in:
committed by
Max Kammerer
parent
5b3a7a473e
commit
c63d221da3
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.config.IncrementalCompilation
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
|
||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||
import org.jetbrains.kotlin.fileClasses.getFileClassType
|
||||
@@ -201,8 +202,9 @@ public class MultifileClassCodegen(
|
||||
if (declaration is JetNamedFunction || declaration is JetProperty) {
|
||||
val descriptor = state.bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration)
|
||||
assert(descriptor is CallableMemberDescriptor) { "Expected callable member, was " + descriptor + " for " + declaration.text }
|
||||
generateCallableMemberTasks.put(descriptor as CallableMemberDescriptor,
|
||||
{ memberCodegen.genFunctionOrProperty(declaration) })
|
||||
if (!Visibilities.isPrivate((descriptor as CallableMemberDescriptor).visibility)) {
|
||||
generateCallableMemberTasks.put(descriptor, { memberCodegen.genFunctionOrProperty(declaration) })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ import org.jetbrains.kotlin.config.IncrementalCompilation;
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities;
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils;
|
||||
import org.jetbrains.kotlin.fileClasses.FileClasses;
|
||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo;
|
||||
@@ -356,15 +357,17 @@ public class PackageCodegen {
|
||||
DeclarationDescriptor descriptor = state.getBindingContext().get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration);
|
||||
assert descriptor instanceof CallableMemberDescriptor :
|
||||
"Expected callable member, was " + descriptor + " for " + declaration.getText();
|
||||
generateCallableMemberTasks.put(
|
||||
(CallableMemberDescriptor) descriptor,
|
||||
new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
memberCodegen.genFunctionOrProperty(declaration);
|
||||
if (!Visibilities.isPrivate(((CallableMemberDescriptor) descriptor).getVisibility())) {
|
||||
generateCallableMemberTasks.put(
|
||||
(CallableMemberDescriptor) descriptor,
|
||||
new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
memberCodegen.genFunctionOrProperty(declaration);
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -412,6 +412,10 @@ public class PropertyCodegen {
|
||||
@Nullable JetPropertyAccessor accessor,
|
||||
@NotNull PropertyAccessorDescriptor accessorDescriptor
|
||||
) {
|
||||
if (context instanceof MultifileClassFacadeContext && Visibilities.isPrivate(accessorDescriptor.getVisibility())) {
|
||||
return;
|
||||
}
|
||||
|
||||
FunctionGenerationStrategy strategy;
|
||||
if (accessor == null || !accessor.hasBody()) {
|
||||
if (p instanceof JetProperty && ((JetProperty) p).hasDelegate()) {
|
||||
|
||||
-3
@@ -78,7 +78,4 @@ public final class _DefaultPackage {
|
||||
@org.jetbrains.annotations.NotNull
|
||||
@org.jetbrains.annotations.Nullable
|
||||
public static final java.lang.String nullableWithNN() { /* compiled code */ }
|
||||
|
||||
@kotlin.jvm.internal.KotlinDelegatedMethod(implementationClassName = "_DefaultPackageKt")
|
||||
private static final java.lang.String privateFun(java.lang.String a, java.lang.String b) { /* compiled code */ }
|
||||
}
|
||||
+4
-2
@@ -146,9 +146,11 @@ public abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdi
|
||||
val klass = classLoader.loadClass(className).sure { "Couldn't load class $className" }
|
||||
val header = ReflectKotlinClass.create(klass)?.getClassHeader()
|
||||
|
||||
if (header?.kind == KotlinClassHeader.Kind.PACKAGE_FACADE) {
|
||||
if (header?.kind == KotlinClassHeader.Kind.PACKAGE_FACADE || header?.kind == KotlinClassHeader.Kind.FILE_FACADE) {
|
||||
val packageView = module.getPackage(LoadDescriptorUtil.TEST_PACKAGE_FQNAME)
|
||||
packageScopes.add(packageView.memberScope)
|
||||
if (!packageScopes.contains(packageView.memberScope)) {
|
||||
packageScopes.add(packageView.memberScope)
|
||||
}
|
||||
}
|
||||
else if (header == null || (header.kind == KotlinClassHeader.Kind.CLASS && !header.isLocalClass)) {
|
||||
// Either a normal Kotlin class or a Java class
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
private fun Any.foo() {
|
||||
fun Any.foo() {
|
||||
with("different extension receiver") {
|
||||
foo()
|
||||
}
|
||||
|
||||
+1
-2
@@ -1,4 +1,3 @@
|
||||
Function a.test uses package-private class a.Foo
|
||||
Function a.test uses package-private function a.foo
|
||||
Package-private function a.test will no longer be accessible from function a.bar
|
||||
Package-private function a.test will no longer be accessible from method J.bar()
|
||||
Package-private function a.test will no longer be accessible from function a.bar
|
||||
+1
-2
@@ -1,4 +1,3 @@
|
||||
Package-private property a.test will no longer be accessible from function a.bar
|
||||
Package-private property a.test will no longer be accessible from method J.bar()
|
||||
Property a.test uses package-private class a.Foo
|
||||
Property a.test uses package-private function a.foo
|
||||
Property a.test uses package-private function a.foo
|
||||
Reference in New Issue
Block a user