{"record":{"id":"dc88215fa70216e8","repo":"Tencent/QMUI_Android","slug":"fragmentscheme-activities-must-be-qmuifragmentacti","errorCode":null,"errorMessage":"FragmentScheme#activities must be QMUIFragmentActivity.","messagePattern":"FragmentScheme#activities must be QMUIFragmentActivity\\.","errorType":"validation","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"arch-compiler/src/main/java/com/qmuiteam/qmui/arch/SchemeProcessor.java","lineNumber":399,"sourceCode":"        CodeBlock.Builder builder = CodeBlock.builder();\n        TypeMirror[] activities = null;\n        try {\n            fragmentScheme.activities();\n        } catch (MirroredTypesException mte) {\n            List<? extends TypeMirror> containerMirrors = mte.getTypeMirrors();\n            activities = new TypeMirror[containerMirrors.size()];\n            for (int i = 0; i < activities.length; i++) {\n                activities[i] = containerMirrors.get(i);\n            }\n        }\n        if(activities == null || activities.length == 0){\n            throw new IllegalStateException(\"FragmentScheme#activities can not be empty.\");\n        }\n        builder.add(\"new $T[]{\", OriginClassName);\n        for(int i=0; i < activities.length; i++){\n            TypeMirror item = activities[i];\n            if(!isSubtypeOfType(item, QMUI_FRAGMENT_ACTIVITY_TYPE)){\n                throw new IllegalStateException(\"FragmentScheme#activities must be QMUIFragmentActivity.\");\n            }\n            if(i > 0){\n                builder.add(\",\");\n            }\n            builder.add(\"$T.class\", ClassName.get(item));\n        }\n        builder.add(\"}\");\n        return builder.build();\n    }\n\n    @Override\n    public Set<String> getSupportedAnnotationTypes() {\n        Set<String> types = new LinkedHashSet<>();\n        types.add(ActivityScheme.class.getCanonicalName());\n        types.add(FragmentScheme.class.getCanonicalName());\n        return types;\n    }\n","sourceCodeStart":381,"sourceCodeEnd":417,"githubUrl":"https://github.com/Tencent/QMUI_Android/blob/026e7d486677d6593a96689cd590ec3561176717/arch-compiler/src/main/java/com/qmuiteam/qmui/arch/SchemeProcessor.java#L381-L417","documentation":"After the emptiness check, generateFragmentHostActivityList verifies each entry of FragmentScheme#activities is a subclass of QMUIFragmentActivity. Any entry that is not throws this IllegalStateException, since generated scheme code launches the fragment through QMUIFragmentActivity.","triggerScenarios":"Passing an Activity class to activities that does not extend QMUIFragmentActivity — e.g. a plain AppCompatActivity, another custom activity base class, or a Fragment mistakenly listed.","commonSituations":"Migrating from plain AppCompatActivity hosts to QMUI; pointing activities at the wrong class after refactor; listing multiple hosts where only one extends QMUIFragmentActivity.","solutions":["Make every listed activity extend QMUIFragmentActivity.","Replace non-QMUI hosts in the activities array with your QMUIFragmentActivity subclass (e.g. MainActivity : QMUIFragmentActivity()).","Remove any entries that are fragments or non-host classes."],"exampleFix":"// before\n@FragmentScheme(name = \"page\", activities = [PlainActivity::class]) // PlainActivity : AppCompatActivity\n\n// after\nclass PlainActivity : QMUIFragmentActivity() { ... }\n@FragmentScheme(name = \"page\", activities = [PlainActivity::class])","handlingStrategy":"validation","validationCode":"fun validateHostActivities(activities: List<Class<*>>) =\n    activities.forEach {\n        check(QMUIFragmentActivity::class.java.isAssignableFrom(it)) { \"$it must be QMUIFragmentActivity\" }\n    }","typeGuard":"fun isQMUIFragmentActivity(cls: Class<*>): Boolean =\n    QMUIFragmentActivity::class.java.isAssignableFrom(cls)","tryCatchPattern":null,"preventionTips":["Make every activity hosting scheme fragments extend QMUIFragmentActivity","Never list plain AppCompatActivity or fragment classes in the activities array","Add a lint/architecture rule requiring a single QMUIFragmentActivity base for scheme hosts"],"tags":["annotation-processor","compile-time","scheme","type-check"],"backgroundTag":"type-mismatch","analyzedSha":"026e7d486677d6593a96689cd590ec3561176717","analyzedAt":"2026-09-06T13:32:24.816Z","contentChangedAt":"2026-09-06T13:32:24.816Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}