void (CompletionResultSet result, PsiClass containingClass, PsiFile origin) { // see PyJavaType.init() in Jython source code for matching logic for (PsiMethod method : containingClass.getAllMethods()) { final Project project = containingClass.getProject(); if (PropertyUtilBase.isSimplePropertySetter(method)) { final String propName = PropertyUtilBase.getPropertyName(method); result.addElement(PyUtil.createNamedParameterLookup(propName, origin)); } else if (method.getName().startsWith("add") && method.getName().endsWith("Listener") && PsiTypes.voidType().equals(method.getReturnType())) { final PsiParameter[] parameters = method.getParameterList().getParameters(); if (parameters.length == 1) { final PsiType type = parameters[0].getType(); if (type instanceof PsiClassType) { final PsiClass parameterClass = ((PsiClassType)type).resolve(); if (parameterClass != null) { result.addElement(PyUtil.createNamedParameterLookup(StringUtil.decapitalize(StringUtil.notNullize(parameterClass.getName())), origin)); for (PsiMethod parameterMethod : parameterClass.getMethods()) { result.addElement(PyUtil.createNamedParameterLookup(parameterMethod.getName(), origin)); } } } } } } }