overriddenDescriptors is empty for java static property and function declarations
Fake overrides are still created for java static with non-empty overriddenDescriptors Add tests for inheriting visibility for java static members Add test: check that java static declarations that shadow deprecated declarations should not be deprecated Add test for corner case where "overriding" java static constant led to incorrect type in inheritor Fix test data for existing tests
This commit is contained in:
+30
-2
@@ -38,12 +38,29 @@ public final class DescriptorResolverUtils {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static <D extends CallableMemberDescriptor> Collection<D> resolveOverrides(
|
||||
public static <D extends CallableMemberDescriptor> Collection<D> resolveOverridesForNonStaticMembers(
|
||||
@NotNull Name name, @NotNull Collection<D> membersFromSupertypes, @NotNull Collection<D> membersFromCurrent,
|
||||
@NotNull ClassDescriptor classDescriptor, @NotNull ErrorReporter errorReporter
|
||||
) {
|
||||
return resolveOverrides(name, membersFromSupertypes, membersFromCurrent, classDescriptor, errorReporter, false);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static <D extends CallableMemberDescriptor> Collection<D> resolveOverridesForStaticMembers(
|
||||
@NotNull Name name, @NotNull Collection<D> membersFromSupertypes, @NotNull Collection<D> membersFromCurrent,
|
||||
@NotNull ClassDescriptor classDescriptor, @NotNull ErrorReporter errorReporter
|
||||
) {
|
||||
return resolveOverrides(name, membersFromSupertypes, membersFromCurrent, classDescriptor, errorReporter, true);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static <D extends CallableMemberDescriptor> Collection<D> resolveOverrides(
|
||||
@NotNull Name name,
|
||||
@NotNull Collection<D> membersFromSupertypes,
|
||||
@NotNull Collection<D> membersFromCurrent,
|
||||
@NotNull ClassDescriptor classDescriptor,
|
||||
@NotNull final ErrorReporter errorReporter
|
||||
@NotNull final ErrorReporter errorReporter,
|
||||
final boolean isStaticContext
|
||||
) {
|
||||
final Set<D> result = new LinkedHashSet<D>();
|
||||
|
||||
@@ -67,6 +84,17 @@ public final class DescriptorResolverUtils {
|
||||
public void conflict(@NotNull CallableMemberDescriptor fromSuper, @NotNull CallableMemberDescriptor fromCurrent) {
|
||||
// nop
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOverriddenDescriptors(
|
||||
@NotNull CallableMemberDescriptor member, @NotNull Collection<? extends CallableMemberDescriptor> overridden
|
||||
) {
|
||||
// do not set overridden descriptors for declared static fields and methods from java
|
||||
if (isStaticContext && member.getKind() != CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||
return;
|
||||
}
|
||||
super.setOverriddenDescriptors(member, overridden);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
+6
-5
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.load.java.BuiltinMethodsWithDifferentJvmName.isRemov
|
||||
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithDifferentJvmName.sameAsRenamedInJvmBuiltin
|
||||
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.sameAsBuiltinMethodWithErasedValueParameters
|
||||
import org.jetbrains.kotlin.load.java.BuiltinSpecialProperties.getBuiltinSpecialPropertyGetterName
|
||||
import org.jetbrains.kotlin.load.java.components.DescriptorResolverUtils
|
||||
import org.jetbrains.kotlin.load.java.components.DescriptorResolverUtils.resolveOverridesForNonStaticMembers
|
||||
import org.jetbrains.kotlin.load.java.components.TypeUsage
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaConstructorDescriptor
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor
|
||||
@@ -225,7 +225,7 @@ class LazyJavaClassMemberScope(
|
||||
var specialBuiltinsFromSuperTypes = SmartSet.create<SimpleFunctionDescriptor>()
|
||||
|
||||
// Merge functions with same signatures
|
||||
val mergedFunctionFromSuperTypes = DescriptorResolverUtils.resolveOverrides(
|
||||
val mergedFunctionFromSuperTypes = resolveOverridesForNonStaticMembers(
|
||||
name, functionsFromSupertypes, emptyList(), ownerDescriptor, ErrorReporter.DO_NOTHING)
|
||||
|
||||
// add declarations
|
||||
@@ -251,8 +251,9 @@ class LazyJavaClassMemberScope(
|
||||
isSpecialBuiltinName: Boolean
|
||||
) {
|
||||
|
||||
val additionalOverrides =
|
||||
DescriptorResolverUtils.resolveOverrides(name, functionsFromSupertypes, result, ownerDescriptor, c.components.errorReporter)
|
||||
val additionalOverrides = resolveOverridesForNonStaticMembers(
|
||||
name, functionsFromSupertypes, result, ownerDescriptor, c.components.errorReporter
|
||||
)
|
||||
|
||||
if (!isSpecialBuiltinName) {
|
||||
result.addAll(additionalOverrides)
|
||||
@@ -356,7 +357,7 @@ class LazyJavaClassMemberScope(
|
||||
searchMethodsInSupertypesWithoutBuiltinMagic(it)
|
||||
}
|
||||
|
||||
result.addAll(DescriptorResolverUtils.resolveOverrides(
|
||||
result.addAll(resolveOverridesForNonStaticMembers(
|
||||
name, propertiesFromSupertypes + propertiesOverridesFromSuperTypes, result, ownerDescriptor, c.components.errorReporter))
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
|
||||
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||
import org.jetbrains.kotlin.load.java.components.DescriptorResolverUtils
|
||||
import org.jetbrains.kotlin.load.java.components.DescriptorResolverUtils.resolveOverridesForStaticMembers
|
||||
import org.jetbrains.kotlin.load.java.descriptors.getParentJavaStaticClassScope
|
||||
import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext
|
||||
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||
@@ -76,7 +76,7 @@ class LazyJavaStaticClassScope(
|
||||
}?.let { result.add(it) }
|
||||
|
||||
val functionsFromSupertypes = getStaticFunctionsFromJavaSuperClasses(name, ownerDescriptor)
|
||||
result.addAll(DescriptorResolverUtils.resolveOverrides(name, functionsFromSupertypes, result, ownerDescriptor, c.components.errorReporter))
|
||||
result.addAll(resolveOverridesForStaticMembers(name, functionsFromSupertypes, result, ownerDescriptor, c.components.errorReporter))
|
||||
|
||||
if (jClass.isEnum) {
|
||||
when (name) {
|
||||
@@ -91,13 +91,13 @@ class LazyJavaStaticClassScope(
|
||||
|
||||
val actualProperties =
|
||||
if (!result.isEmpty()) {
|
||||
DescriptorResolverUtils.resolveOverrides(name, propertiesFromSupertypes, result, ownerDescriptor, c.components.errorReporter)
|
||||
resolveOverridesForStaticMembers(name, propertiesFromSupertypes, result, ownerDescriptor, c.components.errorReporter)
|
||||
}
|
||||
else {
|
||||
propertiesFromSupertypes.groupBy {
|
||||
it.realOriginal
|
||||
}.flatMap {
|
||||
DescriptorResolverUtils.resolveOverrides(name, it.value, result, ownerDescriptor, c.components.errorReporter)
|
||||
resolveOverridesForStaticMembers(name, it.value, result, ownerDescriptor, c.components.errorReporter)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user