diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java index d8ef7e40bec9..7cf16aebab84 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java @@ -284,8 +284,8 @@ public class ResolveUtil { if (!psiClass.processDeclarations(processor, state, null, place)) return false; } } - if (!processNonCodeMembers(type, nonCodeProcessor, place, state)) return false; if (!processCategoryMembers(place, nonCodeProcessor, state)) return false; + if (!processNonCodeMembers(type, nonCodeProcessor, place, state)) return false; return true; } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolveMethodTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolveMethodTest.groovy index 4cc96dc2e0cc..395037ec34f7 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolveMethodTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolveMethodTest.groovy @@ -1593,4 +1593,47 @@ def foo() { } ''', PsiMethod) } + + void testPreferCategoryMethods() { + def resolved = resolveByText(''' +class TimeCategory { + public static TimeDuration minus(final Date lhs, final Date rhs) { + return new TimeDuration() + } +} + +class TimeDuration {} + +void bug() { + use (TimeCategory) { + def duration = new Date() - new Date() + print duration + } +} +''', GrVariable) + + assertEquals("TimeDuration", resolved.typeGroovy.canonicalText) + } + + void testPreferCategoryMethods2() { + def resolved = resolveByText(''' +class TimeCategory { + public static TimeDuration minus(final Date lhs, final Date rhs) { + return new TimeDuration((int) days, hours, minutes, seconds, (int) milliseconds); + } +} + +class TimeDuration {} + +void bug() { + use (TimeCategory) { + def duration = new Date().minus(new Date()) + print duration + } +} +''', GrVariable) + + assertEquals("TimeDuration", resolved.typeGroovy.canonicalText) + } + }