use of org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField in project intellij-community by JetBrains.
the class GrMainCompletionProvider method completeStaticMembers.
static StaticMemberProcessor completeStaticMembers(CompletionParameters parameters) {
final PsiElement position = parameters.getPosition();
final PsiElement originalPosition = parameters.getOriginalPosition();
final StaticMemberProcessor processor = new StaticMemberProcessor(position) {
@NotNull
@Override
protected LookupElement createLookupElement(@NotNull PsiMember member, @NotNull PsiClass containingClass, boolean shouldImport) {
shouldImport |= originalPosition != null && PsiTreeUtil.isAncestor(containingClass, originalPosition, false);
return createGlobalMemberElement(member, containingClass, shouldImport);
}
@Override
protected LookupElement createLookupElement(@NotNull List<PsiMethod> overloads, @NotNull PsiClass containingClass, boolean shouldImport) {
shouldImport |= originalPosition != null && PsiTreeUtil.isAncestor(containingClass, originalPosition, false);
return new JavaGlobalMemberLookupElement(overloads, containingClass, QualifiedMethodInsertHandler.INSTANCE, StaticImportInsertHandler.INSTANCE, shouldImport);
}
@Override
protected boolean isAccessible(PsiMember member) {
boolean result = super.isAccessible(member);
if (!result && member instanceof GrField) {
GrAccessorMethod[] getters = ((GrField) member).getGetters();
return getters.length > 0 && super.isAccessible(getters[0]);
}
return result;
}
};
final PsiFile file = position.getContainingFile();
if (file instanceof GroovyFile) {
for (GrImportStatement statement : ((GroovyFile) file).getImportStatements()) {
if (statement.isStatic()) {
GrCodeReferenceElement importReference = statement.getImportReference();
if (importReference != null) {
if (!statement.isOnDemand()) {
importReference = importReference.getQualifier();
}
if (importReference != null) {
final PsiElement target = importReference.resolve();
if (target instanceof PsiClass) {
processor.importMembersOf((PsiClass) target);
}
}
}
}
}
}
return processor;
}
use of org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField in project intellij-community by JetBrains.
the class GrMainCompletionProvider method suggestVariableNames.
private static void suggestVariableNames(PsiElement context, CompletionResultSet result) {
final PsiElement parent = context.getParent();
if (GroovyCompletionUtil.isWildcardCompletion(context))
return;
if (parent instanceof GrVariable) {
final GrVariable variable = (GrVariable) parent;
if (context.equals(variable.getNameIdentifierGroovy())) {
final PsiType type = variable.getTypeGroovy();
if (type != null) {
final JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(context.getProject());
VariableKind kind = variable instanceof GrParameter ? VariableKind.PARAMETER : variable instanceof GrField ? VariableKind.FIELD : VariableKind.LOCAL_VARIABLE;
SuggestedNameInfo suggestedNameInfo = codeStyleManager.suggestVariableName(kind, null, null, type);
String[] names = suggestedNameInfo.names;
if (names.length > 0) {
String name = names[0];
String newName = InlineMethodConflictSolver.suggestNewName(name, null, parent);
if (!name.equals(newName)) {
result.addElement(LookupElementBuilder.create(newName));
return;
}
}
for (String name : names) {
result.addElement(LookupElementBuilder.create(name));
}
}
GrExpression initializer = variable.getInitializerGroovy();
if (initializer != null) {
for (String name : GroovyNameSuggestionUtil.suggestVariableNames(initializer, new DefaultGroovyVariableNameValidator(variable), variable.hasModifierProperty(PsiModifier.STATIC))) {
result.addElement(LookupElementBuilder.create(name));
}
}
}
}
}
use of org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField in project intellij-community by JetBrains.
the class GebUtil method calculateContentElements.
private static Map<String, PsiField> calculateContentElements(@NotNull PsiClass pageOrModuleClass) {
PsiField contentField = pageOrModuleClass.findFieldByName("content", false);
if (!(contentField instanceof GrField))
return Collections.emptyMap();
GrExpression initializer = ((GrField) contentField).getInitializerGroovy();
if (!(initializer instanceof GrClosableBlock))
return Collections.emptyMap();
Map<String, PsiField> res = new HashMap<>();
PsiType objectType = PsiType.getJavaLangObject(pageOrModuleClass.getManager(), pageOrModuleClass.getResolveScope());
for (PsiElement e = initializer.getFirstChild(); e != null; e = e.getNextSibling()) {
if (e instanceof GrMethodCall) {
GrMethodCall methodCall = (GrMethodCall) e;
GrExpression invokedExpression = methodCall.getInvokedExpression();
if (!(invokedExpression instanceof GrReferenceExpression))
continue;
if (((GrReferenceExpression) invokedExpression).isQualified())
continue;
GrExpression[] arguments = PsiUtil.getAllArguments((GrCall) e);
if (arguments.length == 0)
continue;
final GrClosableBlock block;
if (arguments.length == 1 && arguments[0] instanceof GrClosableBlock) {
block = (GrClosableBlock) arguments[0];
} else if (arguments.length == 2 && arguments[0] == null && arguments[1] instanceof GrClosableBlock) {
block = (GrClosableBlock) arguments[1];
} else {
continue;
}
GrLightField field = new GrLightField(pageOrModuleClass, ((GrReferenceExpression) invokedExpression).getReferenceName(), objectType, invokedExpression) {
@Override
public PsiType getTypeGroovy() {
return block.getReturnType();
}
@Override
public PsiType getDeclaredType() {
return null;
}
};
field.getModifierList().addModifier(GrModifierFlags.STATIC_MASK);
res.put(field.getName(), field);
}
}
return res;
}
use of org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField in project intellij-community by JetBrains.
the class GebContentDeclarationSearcher method findDeclarationsAt.
@Override
public void findDeclarationsAt(@NotNull PsiElement element, int offsetInElement, Consumer<PomTarget> consumer) {
PsiElement grCall = element.getParent();
if (!(grCall instanceof GrMethodCall))
return;
PsiElement grClosure = grCall.getParent();
if (!(grClosure instanceof GrClosableBlock))
return;
PsiElement contentField = grClosure.getParent();
if (!(contentField instanceof GrField))
return;
GrField field = (GrField) contentField;
if (!"content".equals(field.getName()) || !field.hasModifierProperty(PsiModifier.STATIC))
return;
PsiClass containingClass = field.getContainingClass();
if (!InheritanceUtil.isInheritor(containingClass, "geb.Page") && !InheritanceUtil.isInheritor(containingClass, "geb.Module"))
return;
Map<String, PsiField> elements = GebUtil.getContentElements(containingClass);
for (PsiField f : elements.values()) {
if (f.getNavigationElement() == element) {
consumer.consume(f);
return;
}
}
}
use of org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField in project intellij-community by JetBrains.
the class JavaStylePropertiesUtil method areEquivalentAccessors.
private static boolean areEquivalentAccessors(PsiMethod method, PsiElement resolved, PsiManager manager) {
if (!(resolved instanceof GrAccessorMethod) || !(method instanceof GrAccessorMethod)) {
return false;
}
if (((GrAccessorMethod) resolved).isSetter() != ((GrAccessorMethod) method).isSetter())
return false;
GrField p1 = ((GrAccessorMethod) resolved).getProperty();
GrField p2 = ((GrAccessorMethod) method).getProperty();
return manager.areElementsEquivalent(p1, p2);
}
Aggregations