{"record":{"id":"0fa4495b2428d087","repo":"Tencent/QMUI_Android","slug":"method-s-of-interface-firstfragmentfinder-not-fou","errorCode":null,"errorMessage":"method %s of interface FirstFragmentFinder not found","messagePattern":"method (.+?) of interface FirstFragmentFinder not found","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"arch-compiler/src/main/java/com/qmuiteam/qmui/arch/BaseProcessor.java","lineNumber":97,"sourceCode":"        mMessager = processingEnv.getMessager();\n    }\n\n    @Override\n    public SourceVersion getSupportedSourceVersion() {\n        return SourceVersion.latestSupported();\n    }\n\n\n    protected ExecutableElement getOverrideMethod(ClassName creator, String methodName) {\n        TypeElement element = mElementUtils.getTypeElement(creator.toString());\n        List<? extends Element> elements = element.getEnclosedElements();\n        for (Element ele : elements) {\n            if (ele.getKind() != ElementKind.METHOD) continue;\n            if (methodName.equals(ele.getSimpleName().toString())) {\n                return (ExecutableElement) ele;\n            }\n        }\n        throw new RuntimeException(String.format(\"method %s of interface FirstFragmentFinder not found\", methodName));\n    }\n\n\n    public void error(Element element, String message, Object... args) {\n        printMessage(Diagnostic.Kind.ERROR, element, message, args);\n    }\n\n    public void waring(Element element, String message, Object... args) {\n        printMessage(Diagnostic.Kind.WARNING, element, message, args);\n    }\n\n    public void note(Element element, String message, Object... args) {\n        printMessage(Diagnostic.Kind.NOTE, element, message, args);\n    }\n\n    private void printMessage(Diagnostic.Kind kind, Element element, String message, Object[] args) {\n        if (args.length > 0) {\n            message = String.format(message, args);","sourceCodeStart":79,"sourceCodeEnd":115,"githubUrl":"https://github.com/Tencent/QMUI_Android/blob/026e7d486677d6593a96689cd590ec3561176717/arch-compiler/src/main/java/com/qmuiteam/qmui/arch/BaseProcessor.java#L79-L115","documentation":"BaseProcessor.getOverrideMethod searches the elements of an interface (contextually FirstFragmentFinder) for a method with the given name and throws if none is found. This is a compile-time annotation-processor failure: the processor expects a specific method on the interface that no longer exists in the current source.","triggerScenarios":"Running the arch-compiler processor while the interface being scanned (e.g. FirstFragmentFinder implementor source or a referenced interface) does not declare the expected method — usually after renaming/removing a method or a QMUI version mismatch between arch and arch-compiler.","commonSituations":"Upgrading the arch dependency but keeping an old arch-compiler (or vice versa); a developer renamed a finder method without updating the processor expectation; an annotated class implements the finder interface but misses the method.","solutions":["Align arch and arch-compiler versions (upgrade both from the same QMUI release).","Check the interface referenced by the processor and add/rename the expected method to match what getOverrideMethod looks for.","Clean and rebuild so the processor re-runs against current sources.","If it persists, inspect BaseProcessor.java:97 to see the exact methodName expected and restore it in your implementation."],"exampleFix":"// before\nclass MyFinder : FirstFragmentFinder {\n  override fun findFragmentByPageName(name: String): Fragment? = ...\n}\n\n// after\nclass MyFinder : FirstFragmentFinder {\n  override fun findFragmentByPageName(name: String): Fragment? = ...\n  override fun findFragmentByClassName(className: String): Fragment? = ... // method expected by processor restored","handlingStrategy":"validation","validationCode":"// compile-time guard: ensure the finder interface still declares the method the processor expects\n// run as part of the build:\n// grep -q \"findFragmentByClassName\" FirstFragmentFinder.kt || exit 1","typeGuard":"fun Class<*>.declaresMethod(name: String): Boolean =\n    methods.any { it.name == name }","tryCatchPattern":null,"preventionTips":["Upgrade arch and arch-compiler together from the same release","Don't rename/remove methods on FirstFragmentFinder implementations without checking BaseProcessor expectations","Run a full clean build in CI so processor failures surface early","Read BaseProcessor.getOverrideMethod to learn the exact method names required"],"tags":["annotation-processor","compile-time","android","method-not-found"],"backgroundTag":"method-not-implemented","analyzedSha":"026e7d486677d6593a96689cd590ec3561176717","analyzedAt":"2026-09-06T13:32:24.816Z","contentChangedAt":"2026-09-06T13:32:24.816Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}