LineMarkerInfo<PsiElement> (final PsiElement identifier, final PyFunction function) { if (PyUtil.isInitMethod(function)) { return null; } final TypeEvalContext context = TypeEvalContext.codeAnalysis(identifier.getProject(), function.getContainingFile()); final PsiElement superMethod = PySuperMethodsSearch.search(function, context).findFirst(); if (superMethod != null) { PyClass superClass = null; if (superMethod instanceof PyFunction) { superClass = ((PyFunction)superMethod).getContainingClass(); } // TODO: show "implementing" instead of "overriding" icon for Python implementations of Java interface methods return new LineMarkerInfo<>(identifier, identifier.getTextRange(), AllIcons.Gutter.OverridingMethod, superClass == null ? null : new TooltipProvider(PyBundle.message( "line.markers.tooltip.overrides.method.in.class", superClass.getName())), SUPER_METHOD_NAVIGATOR, GutterIconRenderer.Alignment.RIGHT); } return null; }