Provide separate access to declared callable members as opposed to all callable members
All callable members contain "fake overrides", declared don't
This commit is contained in:
+17
-5
@@ -33,7 +33,8 @@ import java.util.Set;
|
||||
* @author abreslav
|
||||
*/
|
||||
public class MutableClassDescriptor extends MutableClassDescriptorLite {
|
||||
private final Set<CallableMemberDescriptor> callableMembers = Sets.newHashSet();
|
||||
private final Set<CallableMemberDescriptor> declaredCallableMembers = Sets.newHashSet();
|
||||
private final Set<CallableMemberDescriptor> allCallableMembers = Sets.newHashSet(); // includes fake overrides
|
||||
private final Set<PropertyDescriptor> properties = Sets.newHashSet();
|
||||
private final Set<SimpleFunctionDescriptor> functions = Sets.newHashSet();
|
||||
|
||||
@@ -104,7 +105,10 @@ public class MutableClassDescriptor extends MutableClassDescriptorLite {
|
||||
public void addPropertyDescriptor(@NotNull PropertyDescriptor propertyDescriptor) {
|
||||
super.addPropertyDescriptor(propertyDescriptor);
|
||||
properties.add(propertyDescriptor);
|
||||
callableMembers.add(propertyDescriptor);
|
||||
if (propertyDescriptor.getKind() != CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||
declaredCallableMembers.add(propertyDescriptor);
|
||||
}
|
||||
allCallableMembers.add(propertyDescriptor);
|
||||
scopeForMemberResolution.addPropertyDescriptor(propertyDescriptor);
|
||||
}
|
||||
|
||||
@@ -112,7 +116,10 @@ public class MutableClassDescriptor extends MutableClassDescriptorLite {
|
||||
public void addFunctionDescriptor(@NotNull SimpleFunctionDescriptor functionDescriptor) {
|
||||
super.addFunctionDescriptor(functionDescriptor);
|
||||
functions.add(functionDescriptor);
|
||||
callableMembers.add(functionDescriptor);
|
||||
if (functionDescriptor.getKind() != CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||
declaredCallableMembers.add(functionDescriptor);
|
||||
}
|
||||
allCallableMembers.add(functionDescriptor);
|
||||
scopeForMemberResolution.addFunctionDescriptor(functionDescriptor);
|
||||
}
|
||||
|
||||
@@ -127,8 +134,13 @@ public class MutableClassDescriptor extends MutableClassDescriptorLite {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<CallableMemberDescriptor> getCallableMembers() {
|
||||
return callableMembers;
|
||||
public Set<CallableMemberDescriptor> getDeclaredCallableMembers() {
|
||||
return declaredCallableMembers;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<CallableMemberDescriptor> getAllCallableMembers() {
|
||||
return allCallableMembers;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -131,12 +131,10 @@ public class DeclarationsChecker {
|
||||
}
|
||||
|
||||
private void checkOpenMembers(MutableClassDescriptor classDescriptor) {
|
||||
for (CallableMemberDescriptor memberDescriptor : classDescriptor.getCallableMembers()) {
|
||||
if (memberDescriptor.getKind() != CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||
JetNamedDeclaration member = (JetNamedDeclaration) BindingContextUtils.descriptorToDeclaration(trace.getBindingContext(), memberDescriptor);
|
||||
if (member != null && classDescriptor.getModality() == Modality.FINAL && member.hasModifier(JetTokens.OPEN_KEYWORD)) {
|
||||
trace.report(NON_FINAL_MEMBER_IN_FINAL_CLASS.on(member));
|
||||
}
|
||||
for (CallableMemberDescriptor memberDescriptor : classDescriptor.getDeclaredCallableMembers()) {
|
||||
JetNamedDeclaration member = (JetNamedDeclaration) BindingContextUtils.descriptorToDeclaration(trace.getBindingContext(), memberDescriptor);
|
||||
if (member != null && classDescriptor.getModality() == Modality.FINAL && member.hasModifier(JetTokens.OPEN_KEYWORD)) {
|
||||
trace.report(NON_FINAL_MEMBER_IN_FINAL_CLASS.on(member));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,10 +163,8 @@ public class OverloadResolver {
|
||||
) {
|
||||
MultiMap<String, CallableMemberDescriptor> functionsByName = MultiMap.create();
|
||||
|
||||
for (CallableMemberDescriptor function : classDescriptor.getCallableMembers()) {
|
||||
if (function.getKind() != CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||
functionsByName.putValue(function.getName(), function);
|
||||
}
|
||||
for (CallableMemberDescriptor function : classDescriptor.getDeclaredCallableMembers()) {
|
||||
functionsByName.putValue(function.getName(), function);
|
||||
}
|
||||
|
||||
for (ConstructorDescriptor nestedClassConstructor : nestedClassConstructors) {
|
||||
|
||||
@@ -90,11 +90,9 @@ public class OverrideResolver {
|
||||
List<MutableClassDescriptor> allClasses = Lists.newArrayList(context.getClasses().values());
|
||||
allClasses.addAll(context.getObjects().values());
|
||||
for (MutableClassDescriptor classDescriptor : allClasses) {
|
||||
Collection<CallableMemberDescriptor> members = classDescriptor.getCallableMembers();
|
||||
Collection<CallableMemberDescriptor> members = classDescriptor.getAllCallableMembers();
|
||||
for (CallableMemberDescriptor member : members) {
|
||||
//if (member.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||
checkOverridesForParameters(member);
|
||||
//}
|
||||
checkOverridesForParameters(member);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -136,7 +134,7 @@ public class OverrideResolver {
|
||||
|
||||
MultiMap<String, CallableMemberDescriptor> functionsFromSupertypesByName = groupDescriptorsByName(functionsFromSupertypes);
|
||||
|
||||
MultiMap<String, CallableMemberDescriptor> functionsFromCurrentByName = groupDescriptorsByName(classDescriptor.getCallableMembers());
|
||||
MultiMap<String, CallableMemberDescriptor> functionsFromCurrentByName = groupDescriptorsByName(classDescriptor.getDeclaredCallableMembers());
|
||||
|
||||
Set<String> functionNames = new LinkedHashSet<String>();
|
||||
functionNames.addAll(functionsFromSupertypesByName.keySet());
|
||||
@@ -261,10 +259,8 @@ public class OverrideResolver {
|
||||
if (topDownAnalysisParameters.isAnalyzingBootstrapLibrary()) return;
|
||||
|
||||
// Check overrides for internal consistency
|
||||
for (CallableMemberDescriptor member : classDescriptor.getCallableMembers()) {
|
||||
if (member.getKind() != CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||
checkOverrideForMember(member, invisibleOverriddenDescriptors);
|
||||
}
|
||||
for (CallableMemberDescriptor member : classDescriptor.getDeclaredCallableMembers()) {
|
||||
checkOverrideForMember(member, invisibleOverriddenDescriptors);
|
||||
}
|
||||
|
||||
// Check if everything that must be overridden, actually is
|
||||
|
||||
@@ -30,10 +30,8 @@ public class OverrideMethodsHandler extends OverrideImplementMethodsHandler {
|
||||
@Override
|
||||
protected Set<CallableMemberDescriptor> collectMethodsToGenerate(MutableClassDescriptor descriptor) {
|
||||
final Set<CallableMemberDescriptor> superMethods = OverrideResolver.collectSuperMethods(descriptor).keySet();
|
||||
for (CallableMemberDescriptor member : descriptor.getCallableMembers()) {
|
||||
if (member.getKind() != CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||
superMethods.removeAll(member.getOverriddenDescriptors());
|
||||
}
|
||||
for (CallableMemberDescriptor member : descriptor.getDeclaredCallableMembers()) {
|
||||
superMethods.removeAll(member.getOverriddenDescriptors());
|
||||
}
|
||||
Set<CallableMemberDescriptor> result = new HashSet<CallableMemberDescriptor>();
|
||||
for (CallableMemberDescriptor superMethod : superMethods) {
|
||||
|
||||
Reference in New Issue
Block a user