Update duplicate diagnostic
This commit is contained in:
+11
-16
@@ -26,11 +26,13 @@ import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
|
||||
import org.jetbrains.kotlin.diagnostics.Errors
|
||||
import org.jetbrains.kotlin.load.java.descriptors.SamAdapterDescriptor
|
||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
import org.jetbrains.kotlin.resolve.jvm
|
||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.*
|
||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
import org.jetbrains.kotlin.utils.join
|
||||
import java.util.*
|
||||
|
||||
|
||||
@@ -43,25 +45,18 @@ class BuilderFactoryForDuplicateClassNameDiagnostics(
|
||||
|
||||
override fun handleClashingNames(internalName: String, origin: JvmDeclarationOrigin) {
|
||||
val another = className.getOrPut(internalName, { origin })
|
||||
//workaround for inlined anonymous objects
|
||||
if (origin.element != another.element) {
|
||||
if (origin.originKind == JvmDeclarationOriginKind.PACKAGE_FACADE || another.originKind == JvmDeclarationOriginKind.PACKAGE_FACADE) {
|
||||
if (origin.originKind == JvmDeclarationOriginKind.PACKAGE_FACADE) {
|
||||
reportError(another, internalName)
|
||||
} else {
|
||||
reportError(another, internalName)
|
||||
}
|
||||
} else {
|
||||
if (origin.element != null) {
|
||||
reportError(origin, internalName)
|
||||
}
|
||||
if (another.element != null) {
|
||||
reportError(another, internalName)
|
||||
}
|
||||
}
|
||||
reportError(internalName, origin, another)
|
||||
}
|
||||
}
|
||||
|
||||
private fun reportError(another: JvmDeclarationOrigin, internalName: String) {
|
||||
diagnostics.report(ErrorsJvm.DUPLICATE_CLASS_NAMES.on(another.element, internalName))
|
||||
private fun reportError(internalName: String, vararg another: JvmDeclarationOrigin) {
|
||||
val fromString = another.map { it.descriptor }.filterNotNull().
|
||||
joinToString { DescriptorRenderer.ONLY_NAMES_WITH_SHORT_TYPES.render(it) }
|
||||
|
||||
another.map { it.element }.filterNotNull().forEach {
|
||||
diagnostics.report(ErrorsJvm.DUPLICATE_CLASS_NAMES.on(it, internalName, fromString))
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -85,7 +85,7 @@ public class DefaultErrorMessagesJvm implements DefaultErrorMessages.Extension {
|
||||
MAP.put(ErrorsJvm.JAVA_TYPE_MISMATCH,
|
||||
"Java type mismatch expected {1} but found {0}. Use explicit cast", Renderers.RENDER_TYPE, Renderers.RENDER_TYPE);
|
||||
|
||||
MAP.put(ErrorsJvm.DUPLICATE_CLASS_NAMES, "Class names ''{0}'' conflict with package name (facade or part)", Renderers.TO_STRING);
|
||||
MAP.put(ErrorsJvm.DUPLICATE_CLASS_NAMES, "Duplicate JVM class name ''{0}'' generated from: {1}", Renderers.TO_STRING, Renderers.TO_STRING);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+1
-1
@@ -69,7 +69,7 @@ public interface ErrorsJvm {
|
||||
DiagnosticFactory2<JetElement, JetType, JetType> JAVA_CLASS_ON_COMPANION = DiagnosticFactory2.create(WARNING);
|
||||
DiagnosticFactory2<JetExpression, JetType, JetType> JAVA_TYPE_MISMATCH = DiagnosticFactory2.create(ERROR);
|
||||
|
||||
DiagnosticFactory1<PsiElement, String> DUPLICATE_CLASS_NAMES = DiagnosticFactory1.create(ERROR);
|
||||
DiagnosticFactory2<PsiElement, String, String> DUPLICATE_CLASS_NAMES = DiagnosticFactory2.create(ERROR);
|
||||
|
||||
enum NullabilityInformationSource {
|
||||
KOTLIN {
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
$TESTDATA_DIR$/classAndFacadeClash.kt
|
||||
-d
|
||||
$TEMP_DIR$
|
||||
@@ -0,0 +1,10 @@
|
||||
package test
|
||||
|
||||
class TestPackage {
|
||||
|
||||
}
|
||||
|
||||
|
||||
fun z () {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
compiler/testData/cli/jvm/classAndFacadeClash.kt:3:1: error: duplicate JVM class name 'test/TestPackage' generated from: package-fragment test, TestPackage
|
||||
class TestPackage {
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
@@ -0,0 +1,3 @@
|
||||
$TESTDATA_DIR$/classAndPartClash.kt
|
||||
-d
|
||||
$TEMP_DIR$
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package test
|
||||
|
||||
class ClassAndPartClash {
|
||||
|
||||
}
|
||||
|
||||
class ClassAndPartClash_ {
|
||||
|
||||
}
|
||||
|
||||
fun z () {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
compiler/testData/cli/jvm/classAndPartClash.kt:1:1: error: duplicate JVM class name 'test/ClassAndPartClash_' generated from: package-fragment test, ClassAndPartClash_
|
||||
package test
|
||||
^
|
||||
compiler/testData/cli/jvm/classAndPartClash.kt:7:1: error: duplicate JVM class name 'test/ClassAndPartClash_' generated from: package-fragment test, ClassAndPartClash_
|
||||
class ClassAndPartClash_ {
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
@@ -0,0 +1,3 @@
|
||||
$TESTDATA_DIR$/classAndTraitClash.kt
|
||||
-d
|
||||
$TEMP_DIR$
|
||||
@@ -0,0 +1,9 @@
|
||||
package test
|
||||
|
||||
interface T1 {
|
||||
|
||||
}
|
||||
|
||||
class `T1$$TImpl` {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
compiler/testData/cli/jvm/classAndTraitClash.kt:3:1: error: duplicate JVM class name 'test/T1$$TImpl' generated from: `T1$$TImpl`, T1
|
||||
interface T1 {
|
||||
^
|
||||
compiler/testData/cli/jvm/classAndTraitClash.kt:7:1: error: duplicate JVM class name 'test/T1$$TImpl' generated from: `T1$$TImpl`, T1
|
||||
class `T1$$TImpl` {
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
@@ -37,6 +37,24 @@ public class KotlincExecutableTestGenerated extends AbstractKotlincExecutableTes
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/cli/jvm"), Pattern.compile("^(.+)\\.args$"), false);
|
||||
}
|
||||
|
||||
@TestMetadata("classAndFacadeClash.args")
|
||||
public void testClassAndFacadeClash() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/cli/jvm/classAndFacadeClash.args");
|
||||
doJvmTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("classAndPartClash.args")
|
||||
public void testClassAndPartClash() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/cli/jvm/classAndPartClash.args");
|
||||
doJvmTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("classAndTraitClash.args")
|
||||
public void testClassAndTraitClash() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/cli/jvm/classAndTraitClash.args");
|
||||
doJvmTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("classpath.args")
|
||||
public void testClasspath() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/cli/jvm/classpath.args");
|
||||
|
||||
Reference in New Issue
Block a user