KT-2247 Report name clashes between inner classes and members of class object
#KT-2247 Fixed
This commit is contained in:
+7
@@ -43,6 +43,7 @@ public abstract class MutableClassDescriptorLite extends ClassDescriptorBase
|
|||||||
|
|
||||||
private List<TypeParameterDescriptor> typeParameters;
|
private List<TypeParameterDescriptor> typeParameters;
|
||||||
private Collection<JetType> supertypes = Lists.newArrayList();
|
private Collection<JetType> supertypes = Lists.newArrayList();
|
||||||
|
private final Collection<ClassDescriptor> innerClasses = Lists.newArrayList();
|
||||||
|
|
||||||
private TypeConstructor typeConstructor;
|
private TypeConstructor typeConstructor;
|
||||||
|
|
||||||
@@ -209,6 +210,11 @@ public abstract class MutableClassDescriptorLite extends ClassDescriptorBase
|
|||||||
return innerClassesScope;
|
return innerClassesScope;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Collection<ClassDescriptor> getInnerClasses() {
|
||||||
|
return innerClasses;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void addSupertype(@NotNull JetType supertype) {
|
public void addSupertype(@NotNull JetType supertype) {
|
||||||
if (!ErrorUtils.isErrorType(supertype)) {
|
if (!ErrorUtils.isErrorType(supertype)) {
|
||||||
if (TypeUtils.getClassDescriptor(supertype) != null) {
|
if (TypeUtils.getClassDescriptor(supertype) != null) {
|
||||||
@@ -275,6 +281,7 @@ public abstract class MutableClassDescriptorLite extends ClassDescriptorBase
|
|||||||
@Override
|
@Override
|
||||||
public void addClassifierDescriptor(@NotNull MutableClassDescriptorLite classDescriptor) {
|
public void addClassifierDescriptor(@NotNull MutableClassDescriptorLite classDescriptor) {
|
||||||
getScopeForMemberLookupAsWritableScope().addClassifierDescriptor(classDescriptor);
|
getScopeForMemberLookupAsWritableScope().addClassifierDescriptor(classDescriptor);
|
||||||
|
innerClasses.add(classDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ public class DeclarationResolver {
|
|||||||
resolveFunctionAndPropertyHeaders();
|
resolveFunctionAndPropertyHeaders();
|
||||||
importsResolver.processMembersImports(rootScope);
|
importsResolver.processMembersImports(rootScope);
|
||||||
checkRedeclarationsInNamespaces();
|
checkRedeclarationsInNamespaces();
|
||||||
|
checkClassObjectInnerClassNames();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -314,4 +315,26 @@ public class DeclarationResolver {
|
|||||||
}
|
}
|
||||||
return declarations;
|
return declarations;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkClassObjectInnerClassNames() {
|
||||||
|
for (MutableClassDescriptor classDescriptor : context.getClasses().values()) {
|
||||||
|
MutableClassDescriptorLite classObj = classDescriptor.getClassObjectDescriptor();
|
||||||
|
if (classObj == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Collection<ClassDescriptor> myInnerClasses = classDescriptor.getInnerClasses();
|
||||||
|
Collection<ClassDescriptor> classObjInnerClasses = classObj.getInnerClasses();
|
||||||
|
|
||||||
|
for (ClassDescriptor myInnerClass : myInnerClasses) {
|
||||||
|
for (ClassDescriptor classObjInnerClass : classObjInnerClasses) {
|
||||||
|
if (myInnerClass.getName().equals(classObjInnerClass.getName())) {
|
||||||
|
trace.report(REDECLARATION.on(BindingContextUtils.classDescriptorToDeclaration(trace.getBindingContext(), myInnerClass), myInnerClass.getName().getName()));
|
||||||
|
trace.report(REDECLARATION.on(BindingContextUtils.classDescriptorToDeclaration(trace.getBindingContext(), classObjInnerClass), classObjInnerClass.getName().getName()));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
//KT-2247 Report name clashes between inner classes and members of class object
|
||||||
|
|
||||||
|
package kt2247
|
||||||
|
|
||||||
|
class B {
|
||||||
|
class object {
|
||||||
|
class <!REDECLARATION!>Y<!> {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class <!REDECLARATION!>Y<!> {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -15,12 +15,15 @@
|
|||||||
*/
|
*/
|
||||||
package org.jetbrains.jet.checkers;
|
package org.jetbrains.jet.checkers;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
import junit.framework.Test;
|
import junit.framework.Test;
|
||||||
import junit.framework.TestSuite;
|
import junit.framework.TestSuite;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import org.jetbrains.jet.JetTestUtils;
|
import org.jetbrains.jet.JetTestUtils;
|
||||||
import org.jetbrains.jet.test.TestMetadata;
|
import org.jetbrains.jet.test.TestMetadata;
|
||||||
|
|
||||||
import java.io.File;
|
import org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve;
|
||||||
|
|
||||||
/** This class is generated by {@link org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve}. DO NOT MODIFY MANUALLY */
|
/** This class is generated by {@link org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve}. DO NOT MODIFY MANUALLY */
|
||||||
public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEagerResolve {
|
public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEagerResolve {
|
||||||
@@ -1766,6 +1769,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
|
|||||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve", new File("compiler/testData/diagnostics/tests/redeclarations"), "kt", false);
|
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve", new File("compiler/testData/diagnostics/tests/redeclarations"), "kt", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt2247.kt")
|
||||||
|
public void testKt2247() throws Exception {
|
||||||
|
doTest("compiler/testData/diagnostics/tests/redeclarations/kt2247.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("MultiFilePackageRedeclaration.kt")
|
@TestMetadata("MultiFilePackageRedeclaration.kt")
|
||||||
public void testMultiFilePackageRedeclaration() throws Exception {
|
public void testMultiFilePackageRedeclaration() throws Exception {
|
||||||
doTest("compiler/testData/diagnostics/tests/redeclarations/MultiFilePackageRedeclaration.kt");
|
doTest("compiler/testData/diagnostics/tests/redeclarations/MultiFilePackageRedeclaration.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user