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