From 3987a0c0dbcc950c9d2d4be41e40109bc924f39f Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Tue, 6 Jun 2017 21:32:54 +0300 Subject: [PATCH] [groovy] extract GroovyMethodResult interface --- .../lang/psi/api/GroovyMethodResult.java | 30 ++++++++++++ ...esult.java => GroovyMethodResultImpl.java} | 46 ++++++++++--------- .../lang/resolve/DGMGetAtMethodFilter.kt | 2 +- .../resolve/GrDefaultMethodComparator.java | 4 +- .../lang/resolve/GrMethodComparator.java | 4 +- .../groovy/lang/resolve/ResolveUtil.java | 2 +- .../processors/AccessorResolverProcessor.java | 6 +-- .../processors/GroovyResolverProcessor.java | 4 +- .../GroovyResolverProcessorImpl.java | 2 +- .../processors/MethodResolverProcessor.java | 7 +-- .../lang/resolve/ResolveMethodTest.groovy | 4 +- 11 files changed, 72 insertions(+), 39 deletions(-) create mode 100644 plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/GroovyMethodResult.java rename plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/{GroovyMethodResult.java => GroovyMethodResultImpl.java} (61%) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/GroovyMethodResult.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/GroovyMethodResult.java new file mode 100644 index 000000000000..3fb2fcc0c9fd --- /dev/null +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/api/GroovyMethodResult.java @@ -0,0 +1,30 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.plugins.groovy.lang.psi.api; + +import com.intellij.psi.PsiMethod; +import com.intellij.psi.PsiSubstitutor; +import org.jetbrains.annotations.NotNull; + +public interface GroovyMethodResult extends GroovyResolveResult { + + @NotNull + @Override + PsiMethod getElement(); + + @NotNull + PsiSubstitutor getSubstitutor(boolean infer); +} diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyMethodResult.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyMethodResultImpl.java similarity index 61% rename from plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyMethodResult.java rename to plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyMethodResultImpl.java index 176d1dba17dd..1696c1b9a5f2 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyMethodResult.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyMethodResultImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,38 +23,39 @@ import com.intellij.psi.PsiSubstitutor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; +import org.jetbrains.plugins.groovy.lang.psi.api.GroovyMethodResult; import org.jetbrains.plugins.groovy.lang.psi.api.SpreadState; import org.jetbrains.plugins.groovy.util.NotNullCachedComputableWrapper; -public class GroovyMethodResult extends GroovyResolveResultImpl { +public class GroovyMethodResultImpl extends GroovyResolveResultImpl implements GroovyMethodResult { private final @NotNull NotNullComputable mySubstitutorComputer; - public GroovyMethodResult(@NotNull PsiMethod method, - @Nullable PsiElement resolveContext, - @Nullable SpreadState spreadState, - @NotNull PsiSubstitutor partialSubstitutor, - @NotNull NotNullComputable substitutorComputer, - boolean isAccessible, boolean isStaticsOK) { + public GroovyMethodResultImpl(@NotNull PsiMethod method, + @Nullable PsiElement resolveContext, + @Nullable SpreadState spreadState, + @NotNull PsiSubstitutor partialSubstitutor, + @NotNull NotNullComputable substitutorComputer, + boolean isAccessible, boolean isStaticsOK) { this(method, resolveContext, spreadState, partialSubstitutor, substitutorComputer, true, isAccessible, isStaticsOK, true); } - public GroovyMethodResult(@NotNull PsiMethod method, - @Nullable PsiElement resolveContext, - @Nullable SpreadState spreadState, - @NotNull PsiSubstitutor partialSubstitutor, - @NotNull NotNullComputable substitutorComputer, - boolean isAccessible, boolean isStaticsOK, boolean isApplicable) { + public GroovyMethodResultImpl(@NotNull PsiMethod method, + @Nullable PsiElement resolveContext, + @Nullable SpreadState spreadState, + @NotNull PsiSubstitutor partialSubstitutor, + @NotNull NotNullComputable substitutorComputer, + boolean isAccessible, boolean isStaticsOK, boolean isApplicable) { this(method, resolveContext, spreadState, partialSubstitutor, substitutorComputer, false, isAccessible, isStaticsOK, isApplicable); } - public GroovyMethodResult(@NotNull PsiMethod method, - @Nullable PsiElement resolveContext, - @Nullable SpreadState spreadState, - @NotNull PsiSubstitutor partialSubstitutor, - @NotNull NotNullComputable substitutorComputer, - boolean isInvokedOnProperty, - boolean isAccessible, boolean isStaticsOk, boolean isApplicable) { + public GroovyMethodResultImpl(@NotNull PsiMethod method, + @Nullable PsiElement resolveContext, + @Nullable SpreadState spreadState, + @NotNull PsiSubstitutor partialSubstitutor, + @NotNull NotNullComputable substitutorComputer, + boolean isInvokedOnProperty, + boolean isAccessible, boolean isStaticsOk, boolean isApplicable) { super(method, resolveContext, spreadState, partialSubstitutor, isAccessible, isStaticsOk, isInvokedOnProperty, isApplicable); mySubstitutorComputer = new NotNullCachedComputableWrapper<>(() -> { PsiSubstitutor substitutor = RecursionManager.doPreventingRecursion(this, false, substitutorComputer); @@ -75,6 +76,7 @@ public class GroovyMethodResult extends GroovyResolveResultImpl { } @NotNull + @Override public PsiSubstitutor getSubstitutor(boolean infer) { return infer ? mySubstitutorComputer.compute() : super.getSubstitutor(); } @@ -85,7 +87,7 @@ public class GroovyMethodResult extends GroovyResolveResultImpl { if (o == null || getClass() != o.getClass()) return false; if (!super.equals(o)) return false; - GroovyMethodResult result = (GroovyMethodResult)o; + GroovyMethodResultImpl result = (GroovyMethodResultImpl)o; if (!mySubstitutorComputer.equals(result.mySubstitutorComputer)) return false; diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/DGMGetAtMethodFilter.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/DGMGetAtMethodFilter.kt index b5c72648e48c..3761438cff41 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/DGMGetAtMethodFilter.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/DGMGetAtMethodFilter.kt @@ -17,8 +17,8 @@ package org.jetbrains.plugins.groovy.lang.resolve import com.intellij.psi.CommonClassNames import com.intellij.psi.PsiMethod +import org.jetbrains.plugins.groovy.lang.psi.api.GroovyMethodResult import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrGdkMethod -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyMethodResult import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames.DEFAULT_GROOVY_METHODS /** diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/GrDefaultMethodComparator.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/GrDefaultMethodComparator.java index 092d84dec107..138f10ea9b10 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/GrDefaultMethodComparator.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/GrDefaultMethodComparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,8 +20,8 @@ import com.intellij.psi.util.InheritanceUtil; import com.intellij.psi.util.TypeConversionUtil; import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.groovy.lang.psi.api.GroovyMethodResult; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrGdkMethod; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyMethodResult; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil; import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames; diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/GrMethodComparator.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/GrMethodComparator.java index 984a5da23156..41aee8f86807 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/GrMethodComparator.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/GrMethodComparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,8 +21,8 @@ import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.plugins.groovy.lang.psi.api.GroovyMethodResult; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrGdkMethod; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyMethodResult; /** * @author Max Medvedev diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java index 4b641f5c12b8..655cdba64248 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java @@ -38,6 +38,7 @@ import org.jetbrains.plugins.groovy.lang.psi.GrQualifiedReference; import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; import org.jetbrains.plugins.groovy.lang.psi.GroovyFileBase; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement; +import org.jetbrains.plugins.groovy.lang.psi.api.GroovyMethodResult; import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.GrListOrMap; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList; @@ -65,7 +66,6 @@ import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.imports.GrImportStatem import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement; import org.jetbrains.plugins.groovy.lang.psi.api.util.GrStatementOwner; import org.jetbrains.plugins.groovy.lang.psi.impl.GrClosureType; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyMethodResult; import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyResolveResultImpl; import org.jetbrains.plugins.groovy.lang.psi.impl.signatures.GrClosureSignatureUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil; diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/AccessorResolverProcessor.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/AccessorResolverProcessor.java index 37505e065230..689f3a832e25 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/AccessorResolverProcessor.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/AccessorResolverProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,7 +23,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult; import org.jetbrains.plugins.groovy.lang.psi.api.SpreadState; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrGdkMethod; import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.imports.GrImportStatement; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyMethodResult; +import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyMethodResultImpl; import org.jetbrains.plugins.groovy.lang.psi.util.GroovyPropertyUtils; import static org.jetbrains.plugins.groovy.lang.resolve.processors.ClassHint.RESOLVE_CONTEXT; @@ -115,7 +115,7 @@ public class AccessorResolverProcessor extends MethodResolverProcessor { boolean isAccessible = isAccessible(method); final SpreadState spreadState = state.get(SpreadState.SPREAD_STATE); boolean isStaticsOK = isStaticsOK(method, resolveContext, false); - final GroovyMethodResult candidate = new GroovyMethodResult( + final GroovyMethodResultImpl candidate = new GroovyMethodResultImpl( method, resolveContext, spreadState, substitutor, substitutorComputer, isAccessible, isStaticsOK ); if (isAccessible && isStaticsOK) { diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/GroovyResolverProcessor.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/GroovyResolverProcessor.java index 2a275cda2919..4bbd2a4ff701 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/GroovyResolverProcessor.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/GroovyResolverProcessor.java @@ -35,7 +35,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpres import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.GrCallExpression; import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.imports.GrImportStatement; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyMethodResult; +import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyMethodResultImpl; import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyResolveResultImpl; import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrBindingVariable; @@ -182,7 +182,7 @@ public abstract class GroovyResolverProcessor implements PsiScopeProcessor, Elem else { substitutorComputer = () -> myPropertySubstitutorComputer.getValue().obtainSubstitutor(substitutor, method, resolveContext); } - candidate = new GroovyMethodResult( + candidate = new GroovyMethodResultImpl( method, resolveContext, spreadState, substitutor, substitutorComputer, kind == GroovyResolveKind.PROPERTY, diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/GroovyResolverProcessorImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/GroovyResolverProcessorImpl.java index 5e5fe2c72073..9bd63254c666 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/GroovyResolverProcessorImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/GroovyResolverProcessorImpl.java @@ -20,11 +20,11 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.plugins.groovy.lang.psi.api.GroovyMethodResult; import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrReflectedMethod; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyMethodResult; import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.GrReferenceExpressionImpl; import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrBindingVariable; diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/MethodResolverProcessor.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/MethodResolverProcessor.java index 23c7cdc2668c..38497c035501 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/MethodResolverProcessor.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/MethodResolverProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,9 +23,10 @@ import com.intellij.psi.util.TypeConversionUtil; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.plugins.groovy.lang.psi.api.GroovyMethodResult; import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult; import org.jetbrains.plugins.groovy.lang.psi.api.SpreadState; -import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyMethodResult; +import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyMethodResultImpl; import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; import org.jetbrains.plugins.groovy.lang.resolve.GrMethodComparator; import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil; @@ -108,7 +109,7 @@ public class MethodResolverProcessor extends ResolverProcessorMethod() def results = ref.multiResolve(false) assert results.length > 0 results.each { - assert it instanceof GroovyMethodResult + assert it instanceof GroovyMethodResultImpl def computer = it.substitutorComputer assert computer instanceof NotNullCachedComputableWrapper assert !computer.computed