How do I use groovy's AS keyword
Date : March 29 2020, 07:55 AM
this one helps. As you say, it's not going to be easy to change the asType method for Integer to accept X as a new type of transformation (especially without destroying the existing functionality). The best I can think of is to do: Integer.metaClass.toX = { -> new X( delegate ) }
3.toX()
// Get a handle on the old `asType` method for Integer
def oldAsType = Integer.metaClass.getMetaMethod( "asType", [Class] as Class[] )
// Then write our own
Integer.metaClass.asType = { Class c ->
if( c == X ) {
new X( delegate )
}
else {
// if it's not an X, call the original
oldAsType.invoke( delegate, c )
}
}
3 as X
|
Idea 13 Ultimate, groovy plugin, seems doesn't work with $HOME/.groovy directory with classes
Tag : groovy , By : Star Gryphon
Date : March 29 2020, 07:55 AM
will be helpful for those in need Moving this from comments. To make IDEA see the jars used by Groovy Grape, put your caret on the @Grab annotation in your code, press Alt+Enter and choose "Grab dependencies".
|
'final' keyword in Groovy
Tag : groovy , By : Shrek Qian
Date : March 29 2020, 07:55 AM
I hope this helps . if you compile it as a Script, groovyc will just ignore the final keyword, but if you wrap it into a class, groovyc will raise a compilation error. fin.groovy with content final String x = "a"
x = "b"
$ groovyc fin.groovy
import org.codehaus.groovy.reflection.*;
import java.lang.ref.*;
import groovy.lang.*;
import org.codehaus.groovy.runtime.*;
import org.codehaus.groovy.runtime.callsite.*;
public class fin extends Script
{
private static /* synthetic */ SoftReference $callSiteArray;
public fin() {
$getCallSiteArray();
}
public fin(final Binding context) {
$getCallSiteArray();
super(context);
}
public static void main(final String... args) {
$getCallSiteArray()[0].call((Object)InvokerHelper.class, (Object)fin.class, (Object)args);
}
public Object run() {
$getCallSiteArray();
String x = "a";
return x = "b";
}
private static /* synthetic */ CallSiteArray $createCallSiteArray() {
final String[] array = { null };
$createCallSiteArray_1(array);
return new CallSiteArray((Class)fin.class, array);
}
private static /* synthetic */ CallSite[] $getCallSiteArray() {
CallSiteArray $createCallSiteArray;
if (fin.$callSiteArray == null || ($createCallSiteArray = fin.$callSiteArray.get()) == null) {
$createCallSiteArray = $createCallSiteArray();
fin.$callSiteArray = new SoftReference($createCallSiteArray);
}
return $createCallSiteArray.array;
}
}
class A{
final String x = "a"
def a(){
x = "b"
}
}
$ groovyc fin.groovy
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
fin.groovy: 4: cannot modify final field 'x' outside of constructor.
@ line 4, column 3.
x = "b"
^
1 error
|
Katalon : groovy.lang.MissingPropertyException : Using custom keyword in custom keyword
Date : March 29 2020, 07:55 AM
it fixes the issue import class into another Keyword class and declare its object to use that Keyword. Root Navigation Keywords public class RootNavigations {
final dialog = new Dialog() // ******* imp step
@Keyword
def checkDialogWorking() {
WebUI.click(findTestObject('App/Page_Home/btn_OpenComparisons_Dialog_Home'))
this.dialog.clickCancel() // ******* imp step
}
...
}
|
Groovy as keyword
Date : March 29 2020, 07:55 AM
|