PsiType (@Nullable PsiType type, @NotNull PsiElement context) { final PsiManager manager = context.getManager(); final GlobalSearchScope resolveScope = context.getResolveScope(); if (type instanceof PsiArrayType) { return TypesUtil.boxPrimitiveType(((PsiArrayType)type).getComponentType(), manager, resolveScope); } if (type instanceof GrTupleType) { PsiType[] types = ((GrTupleType)type).getParameters(); return types.length == 1 ? types[0] : null; } if (type instanceof GrRangeType) { return ((GrRangeType)type).getIterationType(); } PsiType fromIterator = findTypeFromIteratorMethod(type, context); if (fromIterator != null) { return fromIterator; } PsiType extracted = PsiUtil.extractIterableTypeParameter(type, true); if (extracted != null) { return extracted; } if (TypesUtil.isClassType(type, JAVA_LANG_STRING, JAVA_IO_FILE)) { return PsiType.getJavaLangString(manager, resolveScope); } if (InheritanceUtil.isInheritor(type, JAVA_UTIL_MAP)) { return getEntryForMap(type, manager.getProject(), resolveScope); } return type; }