blob: 8ff4e034d6a8d9738643a2a968da6ac779d7056e [file] [log] [blame]
# File src/library/methods/R/method.skeleton.R
# Part of the R package, https://www.R-project.org
#
# Copyright (C) 1995-2012 The R Core Team
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# A copy of the GNU General Public License is available at
# https://www.R-project.org/Licenses/
method.skeleton <- function (generic, signature, file, external = FALSE,
where = topenv(parent.frame()))
{
fdef <- getGeneric(generic, where = where)
if (is.null(fdef)) {
fdef <- implicitGeneric(generic, where = where)
if(is.null(fdef))
stop(gettextf("no function definition found for %s",
sQuote(generic)),
domain = NA)
}
else {
generic <- fdef@generic
}
signature <- matchSignature(signature, fdef)
if (length(signature) == 0)
signature <- "ANY"
sigNames <- fdef@signature
length(sigNames) <- length (signature)
method <- function() {
}
formals(method) <- formals(fdef)
body(method) <- quote({
stop("need a definition for the method here")
})
methodName <- paste(c(generic, signature), collapse = "_")
if (missing(file))
file <- paste0(methodName, ".R")
output <- c(paste0("setMethod(\"", generic, '",'),
paste0(" signature(", paste0(sigNames, ' = "', signature, '"',
collapse = ", "), "),"))
method <- deparse(method)
if (isFALSE(external))
output <- c(output, paste0(" ", method), ")")
else {
if(is(external, "character") )
methodName <- toString(external)
method[[1L]] <- paste0("`", methodName, "` <- ", method[[1L]])
output <- c(method, "", output, paste0(" `", methodName, "`)"))
}
writeLines(output, file)
message(gettextf("Skeleton of method written to %s",
if (is.character(file)) file else "connection"),
domain = NA)
invisible(file)
}