From b1627e3897fe0d800bb47417c22f1614f471e0ff Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 27 Apr 2012 00:05:31 +0400 Subject: [PATCH] Provide separate access to declared callable members as opposed to all callable members All callable members contain "fake overrides", declared don't --- .../descriptors/MutableClassDescriptor.java | 22 ++++++++++++++----- .../jet/lang/resolve/DeclarationsChecker.java | 10 ++++----- .../jet/lang/resolve/OverloadResolver.java | 6 ++--- .../jet/lang/resolve/OverrideResolver.java | 14 +++++------- .../codeInsight/OverrideMethodsHandler.java | 6 ++--- 5 files changed, 30 insertions(+), 28 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptor.java index 2339f09d162..6854bf0777d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptor.java @@ -33,7 +33,8 @@ import java.util.Set; * @author abreslav */ public class MutableClassDescriptor extends MutableClassDescriptorLite { - private final Set callableMembers = Sets.newHashSet(); + private final Set declaredCallableMembers = Sets.newHashSet(); + private final Set allCallableMembers = Sets.newHashSet(); // includes fake overrides private final Set properties = Sets.newHashSet(); private final Set 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 getCallableMembers() { - return callableMembers; + public Set getDeclaredCallableMembers() { + return declaredCallableMembers; + } + + @NotNull + public Set getAllCallableMembers() { + return allCallableMembers; } @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java index de8604bd38a..3e5b789e9e5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java @@ -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)); } } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java index 66c540c63c3..a5aee72f7b4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java @@ -163,10 +163,8 @@ public class OverloadResolver { ) { MultiMap 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) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java index b18efcc0383..29d8588e9ec 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java @@ -90,11 +90,9 @@ public class OverrideResolver { List allClasses = Lists.newArrayList(context.getClasses().values()); allClasses.addAll(context.getObjects().values()); for (MutableClassDescriptor classDescriptor : allClasses) { - Collection members = classDescriptor.getCallableMembers(); + Collection 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 functionsFromSupertypesByName = groupDescriptorsByName(functionsFromSupertypes); - MultiMap functionsFromCurrentByName = groupDescriptorsByName(classDescriptor.getCallableMembers()); + MultiMap functionsFromCurrentByName = groupDescriptorsByName(classDescriptor.getDeclaredCallableMembers()); Set functionNames = new LinkedHashSet(); 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 diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideMethodsHandler.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideMethodsHandler.java index 6cbbcece3ba..adf0ff87689 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideMethodsHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideMethodsHandler.java @@ -30,10 +30,8 @@ public class OverrideMethodsHandler extends OverrideImplementMethodsHandler { @Override protected Set collectMethodsToGenerate(MutableClassDescriptor descriptor) { final Set 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 result = new HashSet(); for (CallableMemberDescriptor superMethod : superMethods) {