Do not report redeclaration when outer class and default object's members clash

Previously we prohibited classes and properties with the same name (now it's unnecessary)
Add test for backends that they support qualified (by default object name) member references inside class body
This commit is contained in:
Pavel V. Talanov
2015-03-11 14:05:35 +03:00
parent 76832df933
commit 2987e72d29
19 changed files with 172 additions and 71 deletions
@@ -58,24 +58,10 @@ public class DeclarationResolver {
}
}
public fun checkRedeclarationsInInnerClassNames(c: TopDownAnalysisContext) {
public fun checkRedeclarations(c: TopDownAnalysisContext) {
for (classDescriptor in c.getDeclaredClasses().values()) {
if (DescriptorUtils.isDefaultObject(classDescriptor)) {
// Default objects should be considered during analysing redeclarations in classes
continue
}
var allDescriptors = classDescriptor.getScopeForMemberLookup().getOwnDeclaredDescriptors()
val defaultObject = classDescriptor.getDefaultObjectDescriptor()
if (defaultObject != null) {
val descriptorsFromDefaultObject = defaultObject.getScopeForMemberLookup().getOwnDeclaredDescriptors()
if (descriptorsFromDefaultObject.isNotEmpty()) {
allDescriptors = allDescriptors + descriptorsFromDefaultObject
}
}
val descriptorMap = HashMultimap.create<Name, DeclarationDescriptor>()
for (desc in allDescriptors) {
for (desc in classDescriptor.getScopeForMemberLookup().getOwnDeclaredDescriptors()) {
if (desc is ClassDescriptor || desc is PropertyDescriptor) {
descriptorMap.put(desc.getName(), desc)
}
@@ -292,7 +292,7 @@ public class LazyTopDownAnalyzer {
resolveAllHeadersInClasses(c);
declarationResolver.checkRedeclarationsInPackages(topLevelDescriptorProvider, topLevelFqNames);
declarationResolver.checkRedeclarationsInInnerClassNames(c);
declarationResolver.checkRedeclarations(c);
ResolveUtilPackage.checkTraitRequirements(c.getDeclaredClasses(), trace);