Collection<PsiMethod> (PsiClass typeDefinition) { List<PsiMethod> methods = new ArrayList<>(); for (PsiMethod method : typeDefinition.getMethods()) { if (method instanceof DelegatedMethod) { PsiMethod prototype = ((DelegatedMethod)method).getPrototype(); PsiClass aClass = prototype.getContainingClass(); if (prototype.hasModifierProperty(PsiModifier.FINAL) && aClass != null && typeDefinition.isInheritor(aClass, true)) { continue; //skip final super methods } } methods.add(method); } boolean isClass = !typeDefinition.isInterface() && !typeDefinition.isAnnotationType() && !typeDefinition.isEnum() && !(typeDefinition instanceof GroovyScriptClass); if (isClass) { final Collection<MethodSignature> toOverride = OverrideImplementExploreUtil.getMethodSignaturesToOverride(typeDefinition); for (MethodSignature signature : toOverride) { if (!(signature instanceof MethodSignatureBackedByPsiMethod)) continue; final PsiMethod method = ((MethodSignatureBackedByPsiMethod)signature).getMethod(); final PsiClass baseClass = method.getContainingClass(); if (baseClass == null) continue; final String qname = baseClass.getQualifiedName(); if (GroovyCommonClassNames.GROOVY_OBJECT.equals(qname) || GroovyCommonClassNames.GROOVY_OBJECT_SUPPORT.equals(qname) || method.hasModifierProperty(PsiModifier.ABSTRACT) && typeDefinition.isInheritor(baseClass, true)) { if (method.isConstructor()) continue; methods.add(mirrorMethod(typeDefinition, method, baseClass, signature.getSubstitutor())); } } final Collection<MethodSignature> toImplement = OverrideImplementExploreUtil.getMethodSignaturesToImplement(typeDefinition); for (MethodSignature signature : toImplement) { if (!(signature instanceof MethodSignatureBackedByPsiMethod)) continue; final PsiMethod resolved = ((MethodSignatureBackedByPsiMethod)signature).getMethod(); final PsiClass baseClass = resolved.getContainingClass(); if (baseClass == null) continue; if (!GroovyCommonClassNames.GROOVY_OBJECT.equals(baseClass.getQualifiedName())) continue; methods.add(mirrorMethod(typeDefinition, resolved, baseClass, signature.getSubstitutor())); } } return methods; }