From 0fee69fe07b1d1be60f13eddccaa829d903ce4ef Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 28 Mar 2013 19:56:40 +0400 Subject: [PATCH] Prioritized synthetic and not synthetic functions. --- .../lang/resolve/calls/tasks/ResolutionTaskHolder.java | 2 +- .../jet/lang/resolve/calls/tasks/TaskPrioritizer.java | 8 +++++++- .../tests/overload/SyntheticAndNotSynthetic.kt | 7 +++++++ .../jet/checkers/JetDiagnosticsTestGenerated.java | 5 +++++ 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/overload/SyntheticAndNotSynthetic.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/ResolutionTaskHolder.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/ResolutionTaskHolder.java index fafd36bea63..f5c0ffa0011 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/ResolutionTaskHolder.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/ResolutionTaskHolder.java @@ -32,7 +32,7 @@ import java.util.List; public class ResolutionTaskHolder { private static final int MIN_PRIORITY = 0; - private static final int MAX_PRIORITY = 1; + private static final int MAX_PRIORITY = 3; private final JetReferenceExpression reference; private final BasicCallResolutionContext basicCallResolutionContext; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TaskPrioritizer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TaskPrioritizer.java index d812de0db67..5e183d75fe8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TaskPrioritizer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/tasks/TaskPrioritizer.java @@ -89,7 +89,7 @@ public class TaskPrioritizer { ResolutionTaskHolder.PriorityProvider> visibleStrategy = new ResolutionTaskHolder.PriorityProvider>() { @Override public int getPriority(ResolutionCandidate call) { - return isVisible(call) ? 1 : 0; + return (isVisible(call) ? 2 : 0) + (isSynthesized(call) ? 1 : 0); } private boolean isVisible(ResolutionCandidate call) { @@ -98,6 +98,12 @@ public class TaskPrioritizer { if (ErrorUtils.isError(candidateDescriptor)) return true; return Visibilities.isVisible(candidateDescriptor, context.scope.getContainingDeclaration()); } + + private boolean isSynthesized(ResolutionCandidate call) { + D descriptor = call.getDescriptor(); + return descriptor instanceof CallableMemberDescriptor && + ((CallableMemberDescriptor) descriptor).getKind() == CallableMemberDescriptor.Kind.SYNTHESIZED; + } }; ResolutionTaskHolder result = new ResolutionTaskHolder(functionReference, context, visibleStrategy); diff --git a/compiler/testData/diagnostics/tests/overload/SyntheticAndNotSynthetic.kt b/compiler/testData/diagnostics/tests/overload/SyntheticAndNotSynthetic.kt new file mode 100644 index 00000000000..0fbe04eebe7 --- /dev/null +++ b/compiler/testData/diagnostics/tests/overload/SyntheticAndNotSynthetic.kt @@ -0,0 +1,7 @@ +fun Runnable(f: () -> Unit): Runnable = object : Runnable { + public override fun run() { + f() + } +} + +val x = Runnable { } \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 2b390194810..74f0b8893ab 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -3174,6 +3174,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/overload/OverloadVarAndFunInClass.kt"); } + @TestMetadata("SyntheticAndNotSynthetic.kt") + public void testSyntheticAndNotSynthetic() throws Exception { + doTest("compiler/testData/diagnostics/tests/overload/SyntheticAndNotSynthetic.kt"); + } + } @TestMetadata("compiler/testData/diagnostics/tests/override")