{"record":{"id":"a3bf9989aa4f9fec","repo":"microg/GmsCore","slug":"is-an-parcelable-without-creator","errorCode":null,"errorMessage":" is an Parcelable without CREATOR","messagePattern":" is an Parcelable without CREATOR","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"play-services-basement/src/main/java/org/microg/safeparcel/SafeParcelReflectionUtil.java","lineNumber":125,"sourceCode":"    private static Parcelable.Creator<Parcelable> getCreator(Field field) {\n        Class<?> clazz = field.getType();\n        if (clazz.isArray()) {\n            clazz = clazz.getComponentType();\n        }\n        if (clazz != null && Parcelable.class.isAssignableFrom(clazz)) {\n            return getCreator((Class<? extends Parcelable>) clazz);\n        }\n        throw new RuntimeException(clazz + \" is not an Parcelable\");\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    public static Parcelable.Creator<Parcelable> getCreator(Class<? extends Parcelable> clazz) {\n        try {\n            Field creatorField = clazz.getDeclaredField(\"CREATOR\");\n            creatorField.setAccessible(true);\n            return (Parcelable.Creator<Parcelable>) creatorField.get(null);\n        } catch (NoSuchFieldException e) {\n            throw new RuntimeException(clazz + \" is an Parcelable without CREATOR\");\n        } catch (IllegalAccessException e) {\n            throw new RuntimeException(\"CREATOR in \" + clazz + \" is not accessible\");\n        }\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    private static Class<?> getSubClass(Field field) {\n        SafeParceled safeParceled = field.getAnnotation(SafeParceled.class);\n        SafeParcelable.Field safeParcelableField = field.getAnnotation(SafeParcelable.Field.class);\n        if (safeParceled != null && safeParceled.subClass() != SafeParceled.class) {\n            return safeParceled.subClass();\n        } else if (safeParceled != null && !\"undefined\".equals(safeParceled.subType())) {\n            try {\n                return Class.forName(safeParceled.subType());\n            } catch (ClassNotFoundException e) {\n                throw new IllegalArgumentException(e);\n            }\n        } else if (safeParcelableField != null && safeParcelableField.subClass() != SafeParcelable.class) {","sourceCodeStart":107,"sourceCodeEnd":143,"githubUrl":"https://github.com/microg/GmsCore/blob/157c9d86ac46c195a86c2f15ab55c84036223f95/play-services-basement/src/main/java/org/microg/safeparcel/SafeParcelReflectionUtil.java#L107-L143","documentation":"Thrown in SafeParcelReflectionUtil.getCreator(Class) when the Parcelable class declares no CREATOR field (getDeclaredField threw NoSuchFieldException). The class name is appended; the type violates the Parcelable contract.","triggerScenarios":"Thrown at play-services-basement/src/main/java/org/microg/safeparcel/SafeParcelReflectionUtil.java:125 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add a public static Parcelable.Creator CREATOR field to the class","Use a field type that already exposes a CREATOR"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"157c9d86ac46c195a86c2f15ab55c84036223f95","analyzedAt":"2026-09-06T17:27:33.892Z","contentChangedAt":"2026-09-06T17:27:33.892Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}