mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
check for gdsl named parameter types (IDEA-71141)
This commit is contained in:
@@ -10,11 +10,15 @@ import groovy.lang.GroovyObjectSupport;
|
||||
import groovy.lang.MetaMethod;
|
||||
import org.codehaus.groovy.runtime.DefaultGroovyMethods;
|
||||
import org.codehaus.groovy.runtime.InvokerHelper;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.dsl.dsltop.GdslMembersProvider;
|
||||
import org.jetbrains.plugins.groovy.dsl.holders.CompoundMembersHolder;
|
||||
import org.jetbrains.plugins.groovy.dsl.holders.CustomMembersHolder;
|
||||
import org.jetbrains.plugins.groovy.dsl.holders.NonCodeMembersHolder;
|
||||
import org.jetbrains.plugins.groovy.dsl.toplevel.ClassContextFilter;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.GroovyPropertyUtils;
|
||||
|
||||
@@ -223,11 +227,18 @@ public class CustomMembersGenerator extends GroovyObjectSupport implements GdslM
|
||||
|
||||
public static class ParameterDescriptor {
|
||||
public final String name;
|
||||
public final String type;
|
||||
public final GroovyNamedArgumentProvider.ArgumentDescriptor descriptor;
|
||||
|
||||
private ParameterDescriptor(Map args) {
|
||||
this.name = (String)args.get("name");
|
||||
this.type = stringifyType(args.get("type"));
|
||||
final String typeText = stringifyType(args.get("type"));
|
||||
descriptor = new GroovyNamedArgumentProvider.ArgumentDescriptor() {
|
||||
@Override
|
||||
public boolean checkType(@NotNull PsiType type, @NotNull GroovyPsiElement context) {
|
||||
return typeText == null || ClassContextFilter.isSubtype(type, context.getContainingFile(), typeText);
|
||||
}
|
||||
};
|
||||
descriptor.setShowFirst(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+6
-3
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package org.jetbrains.plugins.groovy.dsl.holders;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
@@ -25,6 +26,7 @@ import com.intellij.psi.util.PsiModificationTracker;
|
||||
import com.intellij.util.containers.ConcurrentFactoryMap;
|
||||
import org.jetbrains.plugins.groovy.dsl.CustomMembersGenerator;
|
||||
import org.jetbrains.plugins.groovy.dsl.GroovyClassDescriptor;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrLightMethodBuilder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -77,13 +79,14 @@ public class NonCodeMembersHolder implements CustomMembersHolder {
|
||||
method.addParameter(String.valueOf(paramName), convertToPsiType(typeName, place), false);
|
||||
|
||||
if (isNamed) {
|
||||
List<String> namedParams = new ArrayList<String>();
|
||||
Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> namedParams = Maps.newHashMap();
|
||||
for (Object o : (List)value) {
|
||||
if (o instanceof CustomMembersGenerator.ParameterDescriptor) {
|
||||
namedParams.add(((CustomMembersGenerator.ParameterDescriptor)o).name);
|
||||
namedParams.put(((CustomMembersGenerator.ParameterDescriptor)o).name,
|
||||
((CustomMembersGenerator.ParameterDescriptor)o).descriptor);
|
||||
}
|
||||
}
|
||||
method.setNamedParametersArray(namedParams.toArray(new String[namedParams.size()]));
|
||||
method.setNamedParameters(namedParams);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-17
@@ -19,8 +19,6 @@ import com.intellij.psi.PsiElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider;
|
||||
import org.jetbrains.plugins.groovy.extensions.NamedArgumentDescriptor;
|
||||
import org.jetbrains.plugins.groovy.extensions.NamedArgumentDescriptor;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrNamedArgumentSearchVisitor;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariable;
|
||||
@@ -38,26 +36,15 @@ public class GroovySourceCodeNamedArgumentProvider extends GroovyNamedArgumentPr
|
||||
@Nullable PsiElement resolve,
|
||||
@Nullable String argumentName,
|
||||
boolean forCompletion,
|
||||
Map<String, NamedArgumentDescriptor> result) {
|
||||
if (!forCompletion) return;
|
||||
|
||||
String[] namedParametersArray;
|
||||
|
||||
Map<String, ArgumentDescriptor> result) {
|
||||
if (resolve instanceof GrMethod) {
|
||||
namedParametersArray = ((GrMethod)resolve).getNamedParametersArray();
|
||||
result.putAll(((GrMethod)resolve).getNamedParameters());
|
||||
}
|
||||
else if (resolve instanceof GrField) {
|
||||
namedParametersArray = ((GrField)resolve).getNamedParametersArray();
|
||||
result.putAll(((GrField)resolve).getNamedParameters());
|
||||
}
|
||||
else if (resolve instanceof GrVariable) {
|
||||
namedParametersArray = GrNamedArgumentSearchVisitor.find((GrVariable)resolve);
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
|
||||
for (String parameter : namedParametersArray) {
|
||||
result.put(parameter, NamedArgumentDescriptor.SIMPLE_ON_TOP);
|
||||
result.putAll(GrNamedArgumentSearchVisitor.find((GrVariable)resolve));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-1
@@ -18,10 +18,13 @@ package org.jetbrains.plugins.groovy.lang.psi.api.statements;
|
||||
import com.intellij.psi.PsiField;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider;
|
||||
import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocCommentOwner;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAccessorMethod;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMember;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author ven
|
||||
*/
|
||||
@@ -37,7 +40,7 @@ public interface GrField extends GrVariable, GrMember, PsiField, GrTopLevelDefin
|
||||
GrAccessorMethod[] getGetters();
|
||||
|
||||
@NotNull
|
||||
String[] getNamedParametersArray();
|
||||
Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> getNamedParameters();
|
||||
|
||||
void clearCaches();
|
||||
}
|
||||
|
||||
+8
-12
@@ -18,7 +18,7 @@ package org.jetbrains.plugins.groovy.lang.psi.api.statements;
|
||||
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyRecursiveElementVisitor;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentList;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock;
|
||||
@@ -38,7 +38,7 @@ import java.util.*;
|
||||
public class GrNamedArgumentSearchVisitor extends GroovyRecursiveElementVisitor {
|
||||
private static final Set<String> METHOD_NAMES = new HashSet<String>(Arrays.asList("containsKey", "remove", "get"));
|
||||
|
||||
private Set<String> myResult;
|
||||
private final Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> myResult = new HashMap<String, GroovyNamedArgumentProvider.ArgumentDescriptor>();
|
||||
|
||||
private final String myFirstArgumentName;
|
||||
|
||||
@@ -46,8 +46,8 @@ public class GrNamedArgumentSearchVisitor extends GroovyRecursiveElementVisitor
|
||||
myFirstArgumentName = firstArgumentName;
|
||||
}
|
||||
|
||||
public String[] getResult() {
|
||||
return myResult == null ? ArrayUtil.EMPTY_STRING_ARRAY : ArrayUtil.toStringArray(myResult);
|
||||
public Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> getResult() {
|
||||
return myResult;
|
||||
}
|
||||
|
||||
private void extractArguments(GrArgumentList argumentList) {
|
||||
@@ -65,11 +65,7 @@ public class GrNamedArgumentSearchVisitor extends GroovyRecursiveElementVisitor
|
||||
}
|
||||
|
||||
private void add(String refName) {
|
||||
if (myResult == null) {
|
||||
myResult = new HashSet<String>();
|
||||
}
|
||||
|
||||
myResult.add(refName);
|
||||
myResult.put(refName, GroovyNamedArgumentProvider.TYPE_ANY);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -100,16 +96,16 @@ public class GrNamedArgumentSearchVisitor extends GroovyRecursiveElementVisitor
|
||||
super.visitReferenceExpression(referenceExpression);
|
||||
}
|
||||
|
||||
public static String[] find(GrVariable variable) {
|
||||
public static Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> find(GrVariable variable) {
|
||||
final GrExpression initializerGroovy = variable.getInitializerGroovy();
|
||||
|
||||
if (!(initializerGroovy instanceof GrClosableBlock)) {
|
||||
return ArrayUtil.EMPTY_STRING_ARRAY;
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
final GrClosableBlock closure = (GrClosableBlock)initializerGroovy;
|
||||
final GrParameter[] parameters = closure.getAllParameters();
|
||||
if (parameters.length == 0) return ArrayUtil.EMPTY_STRING_ARRAY;
|
||||
if (parameters.length == 0) return Collections.emptyMap();
|
||||
|
||||
GrParameter parameter = parameters[0];
|
||||
|
||||
|
||||
+4
-1
@@ -22,6 +22,7 @@ import com.intellij.util.ArrayFactory;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider;
|
||||
import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocCommentOwner;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GrNamedElement;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList;
|
||||
@@ -33,6 +34,8 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameterLi
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeParameterListOwner;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author: Dmitry.Krasilschikov
|
||||
* @date: 26.03.2007
|
||||
@@ -82,7 +85,7 @@ public interface GrMethod extends GrMembersDeclaration, GrNamedElement, PsiMetho
|
||||
GrModifierList getModifierList();
|
||||
|
||||
@NotNull
|
||||
String[] getNamedParametersArray();
|
||||
Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> getNamedParameters();
|
||||
|
||||
@NotNull
|
||||
GrReflectedMethod[] getReflectedMethods();
|
||||
|
||||
+9
-2
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package org.jetbrains.plugins.groovy.lang.psi.impl.statements;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.navigation.ItemPresentation;
|
||||
import com.intellij.psi.*;
|
||||
@@ -28,6 +29,7 @@ import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.GroovyIcons;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider;
|
||||
import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocComment;
|
||||
import org.jetbrains.plugins.groovy.lang.groovydoc.psi.impl.GrDocCommentUtil;
|
||||
import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes;
|
||||
@@ -45,6 +47,7 @@ import org.jetbrains.plugins.groovy.lang.psi.stubs.GrFieldStub;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* User: Dmitry.Krasilschikov
|
||||
@@ -211,10 +214,14 @@ public class GrFieldImpl extends GrVariableBaseImpl<GrFieldStub> implements GrFi
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String[] getNamedParametersArray() {
|
||||
public Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> getNamedParameters() {
|
||||
final GrFieldStub stub = getStub();
|
||||
if (stub != null) {
|
||||
return stub.getNamedParameters();
|
||||
Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> result = Maps.newHashMap();
|
||||
for (String parameter : stub.getNamedParameters()) {
|
||||
result.put(parameter, GroovyNamedArgumentProvider.TYPE_ANY);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
return GrNamedArgumentSearchVisitor.find(this);
|
||||
|
||||
+6
-3
@@ -16,14 +16,17 @@
|
||||
package org.jetbrains.plugins.groovy.lang.psi.impl.statements.typedef.members;
|
||||
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider;
|
||||
import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrDefaultAnnotationValue;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAnnotationMethod;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.stubs.GrMethodStub;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* User: Dmitry.Krasilschikov
|
||||
*/
|
||||
@@ -46,8 +49,8 @@ public class GrAnnotationMethodImpl extends GrMethodBaseImpl implements GrAnnota
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String[] getNamedParametersArray() {
|
||||
return ArrayUtil.EMPTY_STRING_ARRAY;
|
||||
public Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> getNamedParameters() {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+17
-6
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package org.jetbrains.plugins.groovy.lang.psi.impl.statements.typedef.members;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.navigation.ItemPresentation;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
@@ -28,11 +29,15 @@ import com.intellij.psi.search.SearchScope;
|
||||
import com.intellij.psi.stubs.IStubElementType;
|
||||
import com.intellij.psi.util.*;
|
||||
import com.intellij.ui.RowIcon;
|
||||
import com.intellij.util.*;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.NullableFunction;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.GroovyIcons;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider;
|
||||
import org.jetbrains.plugins.groovy.gpp.GppTypeConverter;
|
||||
import org.jetbrains.plugins.groovy.lang.GrReferenceAdjuster;
|
||||
import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocComment;
|
||||
@@ -68,7 +73,9 @@ import org.jetbrains.plugins.groovy.lang.resolve.MethodTypeInferencer;
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author ilyas
|
||||
@@ -460,17 +467,21 @@ public abstract class GrMethodBaseImpl extends GrStubElementBase<GrMethodStub> i
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String[] getNamedParametersArray() {
|
||||
public Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> getNamedParameters() {
|
||||
final GrMethodStub stub = getStub();
|
||||
if (stub != null) {
|
||||
return stub.getNamedParameters();
|
||||
Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> result = Maps.newHashMap();
|
||||
for (String parameter : stub.getNamedParameters()) {
|
||||
result.put(parameter, GroovyNamedArgumentProvider.TYPE_ANY);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
GrOpenBlock body = getBlock();
|
||||
if (body == null) return ArrayUtil.EMPTY_STRING_ARRAY;
|
||||
if (body == null) return Collections.emptyMap();
|
||||
|
||||
GrParameter[] parameters = getParameters();
|
||||
if (parameters.length == 0) return ArrayUtil.EMPTY_STRING_ARRAY;
|
||||
if (parameters.length == 0) return Collections.emptyMap();
|
||||
GrParameter firstParameter = parameters[0];
|
||||
|
||||
PsiType type = firstParameter.getTypeGroovy();
|
||||
@@ -478,7 +489,7 @@ public abstract class GrMethodBaseImpl extends GrStubElementBase<GrMethodStub> i
|
||||
//equalsToText can't be called here because of stub creating
|
||||
|
||||
if (type != null && typeElement != null && type.getPresentableText() != null && !type.getPresentableText().endsWith("Map")) {
|
||||
return ArrayUtil.EMPTY_STRING_ARRAY;
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
GrNamedArgumentSearchVisitor visitor = new GrNamedArgumentSearchVisitor(firstParameter.getNameIdentifierGroovy().getText());
|
||||
|
||||
+6
-11
@@ -21,11 +21,11 @@ import com.intellij.psi.PsiExpression;
|
||||
import com.intellij.psi.PsiType;
|
||||
import com.intellij.psi.impl.ResolveScopeManager;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider;
|
||||
import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocComment;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField;
|
||||
@@ -34,6 +34,9 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAc
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author sergey.evdokimov
|
||||
*/
|
||||
@@ -46,14 +49,6 @@ public class GrLightField extends GrLightVariable implements GrField {
|
||||
|
||||
private final PsiClass myContainingClass;
|
||||
|
||||
public GrLightField(@NotNull PsiClass containingClass,
|
||||
@NonNls String name,
|
||||
@NonNls @NotNull String type,
|
||||
@NotNull PsiElement element) {
|
||||
super(containingClass.getManager(), name, type, element);
|
||||
myContainingClass = containingClass;
|
||||
}
|
||||
|
||||
public GrLightField(@NotNull PsiClass containingClass,
|
||||
@NonNls String name,
|
||||
@NotNull PsiType type,
|
||||
@@ -123,8 +118,8 @@ public class GrLightField extends GrLightVariable implements GrField {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String[] getNamedParametersArray() {
|
||||
return ArrayUtil.EMPTY_STRING_ARRAY;
|
||||
public Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> getNamedParameters() {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+9
-7
@@ -29,12 +29,12 @@ import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
import com.intellij.psi.util.*;
|
||||
import com.intellij.ui.RowIcon;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.GroovyFileType;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider;
|
||||
import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocComment;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrCodeBlock;
|
||||
@@ -46,7 +46,9 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrRe
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Sergey Evdokimov
|
||||
@@ -59,7 +61,7 @@ public class GrLightMethodBuilder extends LightElement implements GrMethod {
|
||||
private Icon myBaseIcon;
|
||||
private PsiClass myContainingClass;
|
||||
private Object myMethodKind;
|
||||
private String[] myNamedParametersArray = ArrayUtil.EMPTY_STRING_ARRAY;
|
||||
private Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> myNamedParameters = Collections.emptyMap();
|
||||
private final PsiReferenceList myThrowsList;
|
||||
|
||||
private Object myData;
|
||||
@@ -74,8 +76,8 @@ public class GrLightMethodBuilder extends LightElement implements GrMethod {
|
||||
myThrowsList = new LightReferenceListBuilder(manager, GroovyFileType.GROOVY_LANGUAGE, PsiReferenceList.Role.THROWS_LIST);
|
||||
}
|
||||
|
||||
public void setNamedParametersArray(@NotNull String[] namedParametersArray) {
|
||||
this.myNamedParametersArray = namedParametersArray;
|
||||
public void setNamedParameters(@NotNull Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> namedParameters) {
|
||||
this.myNamedParameters = namedParameters;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -134,8 +136,8 @@ public class GrLightMethodBuilder extends LightElement implements GrMethod {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String[] getNamedParametersArray() {
|
||||
return myNamedParametersArray;
|
||||
public Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> getNamedParameters() {
|
||||
return myNamedParameters;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -404,7 +406,7 @@ public class GrLightMethodBuilder extends LightElement implements GrMethod {
|
||||
GrLightMethodBuilder copy = new GrLightMethodBuilder(myManager, myName);
|
||||
copy.setMethodKind(myMethodKind);
|
||||
copy.setData(myData);
|
||||
copy.setNamedParametersArray(myNamedParametersArray);
|
||||
copy.setNamedParameters(myNamedParameters);
|
||||
if (getNavigationElement() != this) {
|
||||
copy.setNavigationElement(getNavigationElement());
|
||||
}
|
||||
|
||||
+4
-2
@@ -26,6 +26,7 @@ import com.intellij.psi.util.PsiModificationTracker;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider;
|
||||
import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocComment;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList;
|
||||
@@ -45,6 +46,7 @@ import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Max Medvedev
|
||||
@@ -172,8 +174,8 @@ public class GrReflectedMethodImpl extends LightMethodBuilder implements GrRefle
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String[] getNamedParametersArray() {
|
||||
return myBaseMethod.getNamedParametersArray();
|
||||
public Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> getNamedParameters() {
|
||||
return myBaseMethod.getNamedParameters();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -53,6 +53,7 @@ public class GrFieldStub extends StubBase<GrField> implements NamedStub<GrField>
|
||||
myTypeText = typeText;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String getName() {
|
||||
return StringRef.toString(myName);
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ public class GrMethodStub extends StubBase<GrMethod> implements NamedStub<GrMeth
|
||||
myNamedParameters = namedParameters;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
@NotNull public String getName() {
|
||||
return StringRef.toString(myName);
|
||||
}
|
||||
|
||||
|
||||
+6
-7
@@ -19,7 +19,6 @@ import com.intellij.psi.stubs.IndexSink;
|
||||
import com.intellij.psi.stubs.StubElement;
|
||||
import com.intellij.psi.stubs.StubInputStream;
|
||||
import com.intellij.psi.stubs.StubOutputStream;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.io.StringRef;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.GrFieldImpl;
|
||||
@@ -29,6 +28,8 @@ import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrAnnotatedMemberIndex;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrFieldNameIndex;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes.ENUM_CONSTANT;
|
||||
import static org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes.FIELD;
|
||||
@@ -49,12 +50,12 @@ public class GrFieldElementType extends GrStubElementType<GrFieldStub, GrField>
|
||||
public GrFieldStub createStub(GrField psi, StubElement parentStub) {
|
||||
String[] annNames = GrStubUtils.getAnnotationNames(psi);
|
||||
|
||||
String[] namedParametersArray = ArrayUtil.EMPTY_STRING_ARRAY;
|
||||
Set<String> namedParameters = Collections.emptySet();
|
||||
if (psi instanceof GrFieldImpl){
|
||||
namedParametersArray = psi.getNamedParametersArray();
|
||||
namedParameters = psi.getNamedParameters().keySet();
|
||||
}
|
||||
|
||||
return new GrFieldStub(parentStub, StringRef.fromString(psi.getName()), annNames, namedParametersArray, FIELD, GrFieldStub.buildFlags(psi),
|
||||
return new GrFieldStub(parentStub, StringRef.fromString(psi.getName()), annNames, namedParameters.toArray(new String[namedParameters.size()]), FIELD, GrFieldStub.buildFlags(psi),
|
||||
GrStubUtils.getTypeText(psi));
|
||||
}
|
||||
|
||||
@@ -94,9 +95,7 @@ public class GrFieldElementType extends GrStubElementType<GrFieldStub, GrField>
|
||||
|
||||
static void indexFieldStub(GrFieldStub stub, IndexSink sink) {
|
||||
String name = stub.getName();
|
||||
if (name != null) {
|
||||
sink.occurrence(GrFieldNameIndex.KEY, name);
|
||||
}
|
||||
sink.occurrence(GrFieldNameIndex.KEY, name);
|
||||
for (String annName : stub.getAnnotations()) {
|
||||
if (annName != null) {
|
||||
sink.occurrence(GrAnnotatedMemberIndex.KEY, annName);
|
||||
|
||||
+3
-1
@@ -27,6 +27,7 @@ import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrAnnotatedMemberIndex;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrMethodNameIndex;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author ilyas
|
||||
@@ -39,8 +40,9 @@ public abstract class GrMethodElementType extends GrStubElementType<GrMethodStub
|
||||
|
||||
public GrMethodStub createStub(GrMethod psi, StubElement parentStub) {
|
||||
|
||||
Set<String> namedParameters = psi.getNamedParameters().keySet();
|
||||
return new GrMethodStub(parentStub, StringRef.fromString(psi.getName()), GrStubUtils.getAnnotationNames(psi),
|
||||
psi.getNamedParametersArray(), this);
|
||||
namedParameters.toArray(new String[namedParameters.size()]), this);
|
||||
}
|
||||
|
||||
public void serialize(GrMethodStub stub, StubOutputStream dataStream) throws IOException {
|
||||
|
||||
+4
-3
@@ -8,6 +8,7 @@ import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider;
|
||||
import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocComment;
|
||||
import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocTag;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement;
|
||||
@@ -291,7 +292,7 @@ public class DynamicMemberUtils {
|
||||
|
||||
private PsiTypeParameter[] myTypeParameters;
|
||||
private GrParameterList myParameterList;
|
||||
private String[] namedParameters;
|
||||
private Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> namedParameters;
|
||||
|
||||
public final String mySource;
|
||||
|
||||
@@ -299,7 +300,7 @@ public class DynamicMemberUtils {
|
||||
super(method);
|
||||
myTypeParameters = super.getTypeParameters();
|
||||
myParameterList = super.getParameterList();
|
||||
namedParameters = super.getNamedParametersArray();
|
||||
namedParameters = super.getNamedParameters();
|
||||
mySource = source;
|
||||
}
|
||||
|
||||
@@ -322,7 +323,7 @@ public class DynamicMemberUtils {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String[] getNamedParametersArray() {
|
||||
public Map<String,GroovyNamedArgumentProvider.ArgumentDescriptor> getNamedParameters() {
|
||||
return namedParameters;
|
||||
}
|
||||
|
||||
|
||||
+4
-2
@@ -22,6 +22,7 @@ import com.intellij.psi.util.MethodSignatureBackedByPsiMethod;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider;
|
||||
import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocComment;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList;
|
||||
@@ -36,6 +37,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Maxim.Medvedev
|
||||
@@ -121,8 +123,8 @@ public class GrDynamicMethodImpl extends LightElement implements GrMethod {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String[] getNamedParametersArray() {
|
||||
return myMethod.getNamedParametersArray();
|
||||
public Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> getNamedParameters() {
|
||||
return myMethod.getNamedParameters();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+4
-2
@@ -22,6 +22,7 @@ import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.GroovyIcons;
|
||||
import org.jetbrains.plugins.groovy.extensions.GroovyNamedArgumentProvider;
|
||||
import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocComment;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList;
|
||||
@@ -31,6 +32,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAc
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Maxim.Medvedev
|
||||
@@ -199,8 +201,8 @@ public class GrDynamicPropertyImpl extends LightElement implements GrField {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String[] getNamedParametersArray() {
|
||||
return myField.getNamedParametersArray();
|
||||
public Map<String, GroovyNamedArgumentProvider.ArgumentDescriptor> getNamedParameters() {
|
||||
return myField.getNamedParameters();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -19,14 +19,15 @@ package org.jetbrains.plugins.groovy.dsl;
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.roots.ContentEntry
|
||||
import com.intellij.openapi.roots.ModifiableRootModel
|
||||
import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import com.intellij.testFramework.PsiTestUtil
|
||||
import com.intellij.testFramework.fixtures.DefaultLightProjectDescriptor
|
||||
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
|
||||
import org.jetbrains.plugins.groovy.util.TestUtils
|
||||
import com.intellij.psi.PsiClass
|
||||
import org.jetbrains.annotations.NotNull
|
||||
import org.jetbrains.plugins.groovy.codeInspection.assignment.GroovyAssignabilityCheckInspection
|
||||
import org.jetbrains.plugins.groovy.util.TestUtils
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
@@ -163,7 +164,7 @@ public class MyCategory {
|
||||
]
|
||||
}'''
|
||||
myFixture.configureByText 'a.groovy', '"".foo(par<caret>)'
|
||||
def items = myFixture.completeBasic()
|
||||
myFixture.completeBasic()
|
||||
assert myFixture.lookupElementStrings == ['param1', 'param2']
|
||||
}
|
||||
|
||||
@@ -175,7 +176,21 @@ public class MyCategory {
|
||||
]]
|
||||
}'''
|
||||
myFixture.configureByText 'a.groovy', '"".foo(par<caret>)'
|
||||
def items = myFixture.completeBasic()
|
||||
myFixture.completeBasic()
|
||||
assert myFixture.lookupElementStrings == ['param1', 'param2']
|
||||
}
|
||||
|
||||
public void testCheckNamedArgumentTypes() {
|
||||
addGdsl '''contribute(currentType(String.name)) {
|
||||
method name:'foo', type:void, params:[args:[
|
||||
parameter(name:'param1', type:File),
|
||||
parameter(name:'param2', type:Integer),
|
||||
]]
|
||||
}'''
|
||||
myFixture.configureByText 'a.groovy', '''
|
||||
"".foo(param1:<warning descr="Type of argument 'param1' can not be 'Integer'">2</warning>, param2:2)
|
||||
'''
|
||||
myFixture.enableInspections(new GroovyAssignabilityCheckInspection())
|
||||
myFixture.checkHighlighting(true, false, false)
|
||||
}
|
||||
}
|
||||
|
||||
-4
@@ -128,10 +128,6 @@ public abstract class ChangeSignatureTestCase extends LightCodeInsightFixtureTes
|
||||
static class SimpleExceptionsGen implements GenExceptions {
|
||||
private final ThrownExceptionInfo[] myInfos;
|
||||
|
||||
public SimpleExceptionsGen() {
|
||||
myInfos = new ThrownExceptionInfo[0];
|
||||
}
|
||||
|
||||
public SimpleExceptionsGen(ThrownExceptionInfo[] infos) {
|
||||
myInfos = infos;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user