use MainFunctionDetector in order to check for main function
This commit is contained in:
@@ -17,15 +17,14 @@
|
||||
package org.jetbrains.kotlin.resolve
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DECLARATION
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource
|
||||
import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
import org.jetbrains.kotlin.idea.MainFunctionDetector
|
||||
import org.jetbrains.kotlin.psi.JetAnnotationEntry
|
||||
import org.jetbrains.kotlin.psi.JetFile
|
||||
import org.jetbrains.kotlin.psi.JetNamedFunction
|
||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
||||
import java.util.ArrayList
|
||||
|
||||
@@ -81,6 +80,16 @@ public object DescriptorToSourceUtils {
|
||||
return declaration.getContainingFile() as? JetFile
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
public fun isTopLevelMainFunction(declarationDescriptor: DeclarationDescriptor, mainFunctionDetector: MainFunctionDetector): Boolean {
|
||||
if (declarationDescriptor !is FunctionDescriptor ||
|
||||
!DescriptorUtils.isTopLevelDeclaration(declarationDescriptor) ||
|
||||
declarationDescriptor.name.asString() != "main") return false
|
||||
|
||||
val element = descriptorToDeclaration(declarationDescriptor)
|
||||
return element is JetNamedFunction && mainFunctionDetector.isMain(element)
|
||||
}
|
||||
|
||||
private fun findTopLevelParent(declarationDescriptor: DeclarationDescriptor): DeclarationDescriptor? {
|
||||
var descriptor: DeclarationDescriptor? = declarationDescriptor
|
||||
if (declarationDescriptor is PropertyAccessorDescriptor) {
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.intellij.util.containers.MultiMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.descriptors.*;
|
||||
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.JetClassOrObject;
|
||||
@@ -37,9 +38,11 @@ import static org.jetbrains.kotlin.resolve.DescriptorUtils.getFqName;
|
||||
|
||||
public class OverloadResolver {
|
||||
@NotNull private final BindingTrace trace;
|
||||
@NotNull private final MainFunctionDetector mainFunctionDetector;
|
||||
|
||||
public OverloadResolver(@NotNull BindingTrace trace) {
|
||||
this.trace = trace;
|
||||
mainFunctionDetector = new MainFunctionDetector(trace.getBindingContext());
|
||||
}
|
||||
|
||||
public void process(@NotNull BodiesResolveContext c) {
|
||||
@@ -195,7 +198,7 @@ public class OverloadResolver {
|
||||
@NotNull Set<Pair<JetDeclaration, CallableMemberDescriptor>> redeclarations) {
|
||||
for (Pair<JetDeclaration, CallableMemberDescriptor> redeclaration : redeclarations) {
|
||||
CallableMemberDescriptor memberDescriptor = redeclaration.getSecond();
|
||||
if (DescriptorUtils.isTopLevelMainFunction(memberDescriptor)) break;
|
||||
if (DescriptorToSourceUtils.isTopLevelMainFunction(memberDescriptor, mainFunctionDetector)) return;
|
||||
|
||||
JetDeclaration jetDeclaration = redeclaration.getFirst();
|
||||
if (memberDescriptor instanceof PropertyDescriptor) {
|
||||
|
||||
Reference in New Issue
Block a user