check for gdsl named parameter types (IDEA-71141)

This commit is contained in:
peter
2011-10-21 18:13:08 +02:00
parent b86fd48c0b
commit eb3dfbb063
21 changed files with 132 additions and 91 deletions
@@ -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);
}
}
@@ -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);
}
}
}
@@ -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));
}
}
}
@@ -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();
}
@@ -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];
@@ -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();
@@ -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);
@@ -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
@@ -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());
@@ -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
@@ -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());
}
@@ -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);
}
@@ -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);
@@ -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 {
@@ -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;
}
@@ -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
@@ -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)
}
}
@@ -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;
}