diff --git a/python/src/com/jetbrains/python/psi/PyUtil.java b/python/src/com/jetbrains/python/psi/PyUtil.java index b7dab6e5b438..d206f3e7af58 100644 --- a/python/src/com/jetbrains/python/psi/PyUtil.java +++ b/python/src/com/jetbrains/python/psi/PyUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,6 +15,7 @@ */ package com.jetbrains.python.psi; +import com.google.common.collect.Collections2; import com.google.common.collect.Maps; import com.intellij.codeInsight.FileModificationService; import com.intellij.codeInsight.completion.PrioritizedLookupElement; @@ -51,6 +52,7 @@ import com.intellij.util.IncorrectOperationException; import com.intellij.util.PlatformIcons; import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; +import com.jetbrains.NotNullPredicate; import com.jetbrains.python.PyBundle; import com.jetbrains.python.PyNames; import com.jetbrains.python.PyTokenTypes; @@ -62,6 +64,7 @@ import com.jetbrains.python.psi.impl.PyBuiltinCache; import com.jetbrains.python.psi.impl.PyPsiUtils; import com.jetbrains.python.psi.types.*; import com.jetbrains.python.refactoring.classes.extractSuperclass.PyExtractSuperclassHelper; +import com.jetbrains.python.refactoring.classes.membersManager.PyMemberInfo; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -1416,4 +1419,47 @@ public class PyUtil { } return false; } + + public static boolean isInit(@NotNull final PyFunction function) { + return PyNames.INIT.equals(function.getName()); + } + + /** + * Filters out {@link com.jetbrains.python.refactoring.classes.membersManager.PyMemberInfo} + * that should not be displayed in this refactoring (like object) + * + * @param pyMemberInfos collection to sort + * @return sorted collection + */ + @NotNull + public static Collection filterOutObject(@NotNull final Collection pyMemberInfos) { + return Collections2.filter(pyMemberInfos, new ObjectPredicate(false)); + } + + /** + * Filters only pyclass object (new class) + */ + public static class ObjectPredicate extends NotNullPredicate { + private final boolean myAllowObjects; + + /** + * @param allowObjects allows only objects if true. Allows all but objects otherwise. + */ + public ObjectPredicate(final boolean allowObjects) { + myAllowObjects = allowObjects; + } + + @Override + public boolean applyNotNull(@NotNull final PyMemberInfo input) { + return myAllowObjects == isObject(input); + } + + private static boolean isObject(@NotNull final PyMemberInfo classMemberInfo) { + final PyElement element = classMemberInfo.getMember(); + if ((element instanceof PyClass) && PyNames.OBJECT.equals(element.getName())) { + return true; + } + return false; + } + } }