void (@NotNull PsiType qualifierType, @Nullable PsiClass aClass, @NotNull PsiScopeProcessor processor, @NotNull PsiElement place, @NotNull ResolveState state) { if (aClass == null) { return; } ElementClassHint classHint = processor.getHint(ElementClassHint.KEY); boolean shouldProcessProperties = ResolveUtil.shouldProcessProperties(classHint); boolean shouldProcessMethods = ResolveUtil.shouldProcessMethods(classHint); if (!shouldProcessMethods && !shouldProcessProperties) return; GrMethod method = PsiTreeUtil.getParentOfType(place, GrMethod.class); if (method == null) return; if (shouldProcessProperties && SpecificationKt.isSpockSpecification(aClass) && aClass == method.getContainingClass()) { Map<String, SpockVariableDescriptor> cachedValue = SpockUtils.getVariableMap(method); String nameHint = ResolveUtil.getNameHint(processor); if (nameHint == null) { for (SpockVariableDescriptor spockVar : cachedValue.values()) { if (!processor.execute(spockVar.getVariable(), state)) return; } } else { SpockVariableDescriptor spockVar = cachedValue.get(nameHint); if (spockVar != null && spockVar.getNavigationElement() != place) { processor.execute(spockVar.getVariable(), state); } if (UNDERSCORES.matcher(nameHint).matches()) { GrLightVariable variable = new GrLightVariable(place.getManager(), nameHint, PsiTypes.nullType(), List.of(), method); processor.execute(variable, state); } } } if (shouldProcessMethods) { processUseAnnotation(qualifierType, place, processor, state); } }