class CreateSnapshotAnalyzer {

    private final RepositoryService repositoryService;
    private final NodeContext nodeCtx;

    CreateSnapshotAnalyzer(RepositoryService repositoryService, NodeContext nodeCtx) {
        this.repositoryService = repositoryService;
        this.nodeCtx = nodeCtx;
    }

    public AnalyzedCreateSnapshot analyze(CreateSnapshot<Expression> createSnapshot,
                                          ParamTypeHints paramTypeHints,
                                          CoordinatorTxnCtx txnCtx) {
        String repositoryName = createSnapshot.name().getPrefix()
            .map(name -> {
                validateRepository(name);
                return name.toString();
            })
            .orElseThrow(() -> new IllegalArgumentException(
                "Snapshot must be specified by \"<repository_name>\".\"<snapshot_name>\""));

        String snapshotName = createSnapshot.name().getSuffix();

        var exprCtx = new ExpressionAnalysisContext(txnCtx.sessionSettings());
        var exprAnalyzerWithoutFields = new ExpressionAnalyzer(
            txnCtx, nodeCtx, paramTypeHints, FieldProvider.UNSUPPORTED, null);
        var exprAnalyzerWithFieldsAsString = new ExpressionAnalyzer(
            txnCtx, nodeCtx, paramTypeHints, FieldProvider.TO_LITERAL_VALIDATE_NAME, null);

        List<Table<Symbol>> tables = Lists.map(
            createSnapshot.tables(),
            (table) -> table.map(x -> exprAnalyzerWithFieldsAsString.convert(x, exprCtx)));
        GenericProperties<Symbol> properties = createSnapshot.properties()
            .map(x -> exprAnalyzerWithoutFields.convert(x, exprCtx));

        return new AnalyzedCreateSnapshot(repositoryName, snapshotName, tables, properties);
    }

    private void validateRepository(QualifiedName name) {<FILL_FUNCTION_BODY>}
}

        if (name.getParts().size() != 1) {
            throw new IllegalArgumentException(
                String.format(Locale.ENGLISH, "Invalid repository name '%s'", name)
            );
        }
        repositoryService.failIfRepositoryDoesNotExist(name.toString());
    
<no_super_class>