fix KT-9733 No error shown for 2 "main" functions in the same file
#KT-9733 Fixed
This commit is contained in:
-3
@@ -70,9 +70,6 @@ class BuilderFactoryForDuplicateSignatureDiagnostics(
|
||||
for (origin in data.signatureOrigins) {
|
||||
var element = origin.element
|
||||
|
||||
// TODO Remove this code after dropping package facades
|
||||
if (element is KtNamedFunction && mainFunctionDetector.isMain(element) && !element.isInsideJvmMultifileClassFile()) return
|
||||
|
||||
if (element == null || origin.originKind in EXTERNAL_SOURCES_KINDS) {
|
||||
element = data.classOrigin.element
|
||||
}
|
||||
|
||||
@@ -25,10 +25,7 @@ import org.jetbrains.kotlin.diagnostics.Errors;
|
||||
import org.jetbrains.kotlin.idea.MainFunctionDetector;
|
||||
import org.jetbrains.kotlin.name.FqNameUnsafe;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject;
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration;
|
||||
import org.jetbrains.kotlin.psi.KtObjectDeclaration;
|
||||
import org.jetbrains.kotlin.psi.KtSecondaryConstructor;
|
||||
import org.jetbrains.kotlin.psi.*;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
@@ -156,7 +153,7 @@ public class OverloadResolver {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static Set<Pair<KtDeclaration, CallableMemberDescriptor>> findRedeclarations(@NotNull Collection<? extends CallableMemberDescriptor> members) {
|
||||
private Set<Pair<KtDeclaration, CallableMemberDescriptor>> findRedeclarations(@NotNull Collection<? extends CallableMemberDescriptor> members) {
|
||||
Set<Pair<KtDeclaration, CallableMemberDescriptor>> redeclarations = Sets.newLinkedHashSet();
|
||||
for (CallableMemberDescriptor member : members) {
|
||||
for (CallableMemberDescriptor member2 : members) {
|
||||
@@ -165,6 +162,10 @@ public class OverloadResolver {
|
||||
}
|
||||
|
||||
if (!OverloadUtil.isOverloadable(member, member2) && member.getKind() != CallableMemberDescriptor.Kind.SYNTHESIZED) {
|
||||
if (isTopLevelMainInDifferentFiles(member, member2)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
KtDeclaration ktDeclaration = (KtDeclaration) DescriptorToSourceUtils.descriptorToDeclaration(member);
|
||||
if (ktDeclaration != null) {
|
||||
redeclarations.add(Pair.create(ktDeclaration, member));
|
||||
@@ -187,11 +188,19 @@ public class OverloadResolver {
|
||||
member.getContainingDeclaration().getContainingDeclaration().equals(member2.getContainingDeclaration().getContainingDeclaration());
|
||||
}
|
||||
|
||||
private boolean isTopLevelMainInDifferentFiles(@NotNull CallableMemberDescriptor member, @NotNull CallableMemberDescriptor member2) {
|
||||
if (!DescriptorToSourceUtils.isTopLevelMainFunction(member, mainFunctionDetector) ||
|
||||
!DescriptorToSourceUtils.isTopLevelMainFunction(member2, mainFunctionDetector)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return DescriptorToSourceUtils.getContainingFile(member) != DescriptorToSourceUtils.getContainingFile(member2);
|
||||
}
|
||||
|
||||
private void reportRedeclarations(@NotNull String functionContainer,
|
||||
@NotNull Set<Pair<KtDeclaration, CallableMemberDescriptor>> redeclarations) {
|
||||
for (Pair<KtDeclaration, CallableMemberDescriptor> redeclaration : redeclarations) {
|
||||
CallableMemberDescriptor memberDescriptor = redeclaration.getSecond();
|
||||
if (DescriptorToSourceUtils.isTopLevelMainFunction(memberDescriptor, mainFunctionDetector)) return;
|
||||
|
||||
KtDeclaration ktDeclaration = redeclaration.getFirst();
|
||||
if (memberDescriptor instanceof PropertyDescriptor) {
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
// KT-9733 No error shown for 2 "main" functions in the same file
|
||||
|
||||
<!CONFLICTING_OVERLOADS!>fun main(args: Array<String>)<!> {}
|
||||
<!CONFLICTING_OVERLOADS!>fun main(args: Array<String>)<!> {}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
package
|
||||
|
||||
public fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
|
||||
public fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
|
||||
@@ -11937,6 +11937,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("RedeclarationMainInFile.kt")
|
||||
public void testRedeclarationMainInFile() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/redeclarations/RedeclarationMainInFile.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("RedeclarationMainInMultiFile.kt")
|
||||
public void testRedeclarationMainInMultiFile() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/redeclarations/RedeclarationMainInMultiFile.kt");
|
||||
|
||||
Reference in New Issue
Block a user