I am trying to use this method without a closure
def copyAndReplaceText(source, dest, targetText, replaceText){ dest.write(source.text.replaceAll(targetText, replaceText))
}
def source = new File('C:/geretd/resumebak.txt') //Hello World
def dest = new File('C:/geretd/resume.txt') //blank
copyAndReplaceText(source, dest){ it.replaceAll('Visa', 'Passport!!!!')
}but when I run it I get the following error:
groovy.lang.MissingMethodException: No signature of method: ConsoleScript3.copyAndReplaceText() is applicable for argument types: (java.io.File, java.io.File, ConsoleScript3$_run_closure1) values: [C:\geretd\resumebak.txt, C:\geretd\resume.txt, ...]
Possible solutions: copyAndReplaceText(java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:55)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:78)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149)What am I doing wrong?
27 Answers
Because you are passing three arguments to a four arguments method. Also, you are not using the passed closure.
If you want to specify the operations to be made on top of the source contents, then use a closure. It would be something like this:
def copyAndReplaceText(source, dest, closure){ dest.write(closure( source.text ))
}
// And you can keep your usage as:
copyAndReplaceText(source, dest){ it.replaceAll('Visa', 'Passport!!!!')
}If you will always swap strings, pass both, as your method signature already states:
def copyAndReplaceText(source, dest, targetText, replaceText){ dest.write(source.text.replaceAll(targetText, replaceText))
}
copyAndReplaceText(source, dest, 'Visa', 'Passport!!!!') 6 To help other bug-hunters. I had this error because the function didn't exist.
I had a spelling error.
2In my case it was simply that I had a variable named the same as a function.
Example:
def cleanCache = functionReturningABoolean()
if( cleanCache ){ echo "Clean cache option is true, do not uninstall previous features / urls" uninstallCmd = "" // and we call the cleanCache method cleanCache(userId, serverName)
}
...and later in my code I have the function:
def cleanCache(user, server){ //some operations to the server
}Apparently the Groovy language does not support this (but other languages like Java does).
I just renamed my function to executeCleanCache and it works perfectly (or you can also rename your variable whatever option you prefer).
You can also get this error if the objects you're passing to the method are out of order. In other words say your method takes, in order, a string, an integer, and a date. If you pass a date, then a string, then an integer you will get the same error message.
1This may also be because you might have given classname with all letters in lowercase something which groovy (know of version 2.5.0) does not support.
class name - User is accepted but user is not.
In my case problem is I commented firebase dependency in build.gradle file but still using this in debug build type:
firebaseCrashlytics { mappingFileUploadEnabled true
}Just make it commented to make it work.
This was one of the major issues for the ionic/android app
Please follow the below steps.
- Remove/Delete node-module from root folder
- npm uninstall cordova-android
- npm install cordova-android@10.1.1
- Now remove android platform using: ionic cordova rm platform android
- Now add platform : ionic cordova platform add android
- Build Android Project : ionic cordova build android
Problem will be resolved