mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[groovy] extract GroovyMethodResult interface
This commit is contained in:
+30
@@ -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);
|
||||
}
|
||||
+24
-22
@@ -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<PsiSubstitutor> mySubstitutorComputer;
|
||||
|
||||
public GroovyMethodResult(@NotNull PsiMethod method,
|
||||
@Nullable PsiElement resolveContext,
|
||||
@Nullable SpreadState spreadState,
|
||||
@NotNull PsiSubstitutor partialSubstitutor,
|
||||
@NotNull NotNullComputable<PsiSubstitutor> substitutorComputer,
|
||||
boolean isAccessible, boolean isStaticsOK) {
|
||||
public GroovyMethodResultImpl(@NotNull PsiMethod method,
|
||||
@Nullable PsiElement resolveContext,
|
||||
@Nullable SpreadState spreadState,
|
||||
@NotNull PsiSubstitutor partialSubstitutor,
|
||||
@NotNull NotNullComputable<PsiSubstitutor> 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<PsiSubstitutor> substitutorComputer,
|
||||
boolean isAccessible, boolean isStaticsOK, boolean isApplicable) {
|
||||
public GroovyMethodResultImpl(@NotNull PsiMethod method,
|
||||
@Nullable PsiElement resolveContext,
|
||||
@Nullable SpreadState spreadState,
|
||||
@NotNull PsiSubstitutor partialSubstitutor,
|
||||
@NotNull NotNullComputable<PsiSubstitutor> 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<PsiSubstitutor> 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<PsiSubstitutor> 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;
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
/**
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+3
-3
@@ -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) {
|
||||
|
||||
+2
-2
@@ -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,
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+4
-3
@@ -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 ResolverProcessor<GroovyMethodResul
|
||||
boolean isApplicable = PsiUtil.isApplicable(myArgumentTypes, method, partialSubstitutor, myPlace, true);
|
||||
boolean isValidResult = isStaticsOK && isAccessible && isApplicable;
|
||||
|
||||
GroovyMethodResult candidate = new GroovyMethodResult(
|
||||
GroovyMethodResultImpl candidate = new GroovyMethodResultImpl(
|
||||
method, resolveContext, spreadState, partialSubstitutor, substitutorComputer, isAccessible, isStaticsOK, isValidResult
|
||||
);
|
||||
|
||||
|
||||
+2
-2
@@ -29,7 +29,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAc
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrGdkMethod
|
||||
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.GroovyMethodResultImpl
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.typedef.members.GrMethodImpl
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrGdkMethodImpl
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrLightMethodBuilder
|
||||
@@ -2363,7 +2363,7 @@ SourceConcrete.someOtherStatic<caret>Method()
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user