You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2022/04/30 20:08:25 UTC
[groovy] 02/02: GROOVY-10598: fix for NPE
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit eddb39fac4cc2e13fd26f4c30427f48c4ec70d2f
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sat Apr 30 14:34:21 2022 -0500
GROOVY-10598: fix for NPE
---
.../transform/stc/StaticTypeCheckingSupport.java | 6 +-
.../transform/stc/StaticTypeCheckingVisitor.java | 8 +-
.../codehaus/groovy/transform/trait/Traits.java | 20 +-
.../traitx/TraitASTTransformationTest.groovy | 553 ++++++++++-----------
4 files changed, 272 insertions(+), 315 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
index 7eceff4eac..de791072b4 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -528,16 +528,16 @@ public abstract class StaticTypeCheckingSupport {
switch (op) {
case COMPARE_EQUAL:
case COMPARE_NOT_EQUAL:
- // this is only correct in this context here, normally
+ // this is only correct in this specific context; normally
// we would have to compile against compareTo if available
// but since we don't compile here, this one is enough
return "equals";
case COMPARE_TO:
- case COMPARE_GREATER_THAN:
- case COMPARE_GREATER_THAN_EQUAL:
case COMPARE_LESS_THAN:
case COMPARE_LESS_THAN_EQUAL:
+ case COMPARE_GREATER_THAN:
+ case COMPARE_GREATER_THAN_EQUAL:
return "compareTo";
case BITWISE_AND:
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index 682c3be804..5ac6a3727a 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -4435,9 +4435,11 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
return method != null ? inferComponentType(left, right) : null;
}
- // the left operand is determining the result of the operation
- // for primitives and their wrapper we use a fixed table here
String operationName = getOperationName(op);
+ if (operationName == null) throw new GroovyBugError(
+ "Unknown result type for binary operator " + op);
+ // the left operand is determining the result of the operation
+ // for primitives and their wrapper we use a fixed table here:
ClassNode mathResultType = getMathResultType(op, leftRedirect, rightRedirect, operationName);
if (mathResultType != null) {
return mathResultType;
@@ -4457,7 +4459,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
typeCheckMethodsWithGenericsOrFail(left, new ClassNode[]{right}, method, expr);
if (isAssignment(op)) return left;
- if (!isCompareToBoolean(op) && op != COMPARE_TO)
+ if (!"compareTo".equals(operationName))
return inferReturnTypeGenerics(left, method, args(rightExpression));
}
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/Traits.java b/src/main/java/org/codehaus/groovy/transform/trait/Traits.java
index c10b4108ba..e74880fea9 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/Traits.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/Traits.java
@@ -264,17 +264,17 @@ public abstract class Traits {
}
/**
- * Returns the name of a method without the super trait specific prefix. If the method name
- * doesn't correspond to a super trait method call, the result will be null.
- * @param origName the name of a method
- * @return null if the name doesn't start with the super trait prefix, otherwise the name without the prefix
+ * Returns the trait and method names derived from super-trait name scheme
+ * or {@code null} if the method name doesn't correspond to a trait method.
*/
- public static String[] decomposeSuperCallName(String origName) {
- if (origName.contains(SUPER_TRAIT_METHOD_PREFIX)) {
- int endIndex = origName.indexOf(SUPER_TRAIT_METHOD_PREFIX);
- String tName = origName.substring(0, endIndex).replace('_','.').replace("..","_");
- String fName = origName.substring(endIndex+SUPER_TRAIT_METHOD_PREFIX.length());
- return new String[]{tName, fName};
+ public static String[] decomposeSuperCallName(final String methodName) {
+ if (methodName != null) {
+ int endIndex = methodName.indexOf(SUPER_TRAIT_METHOD_PREFIX);
+ if (endIndex != -1) {
+ String tName = methodName.substring(0, endIndex).replace('_', '.').replace("..", "_");
+ String fName = methodName.substring(endIndex + SUPER_TRAIT_METHOD_PREFIX.length());
+ return new String[]{tName, fName};
+ }
}
return null;
}
diff --git a/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy b/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
index d77065ed6b..16b49df79d 100644
--- a/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
@@ -29,9 +29,16 @@ import static groovy.test.GroovyAssert.shouldFail
final class TraitASTTransformationTest {
+ private final GroovyShell shell = GroovyShell.withConfig {
+ imports {
+ star 'groovy.transform'
+ normal 'org.codehaus.groovy.transform.trait.Traits'
+ }
+ }
+
@Test
void testTraitOverrideAnnotation() {
- assertScript '''
+ assertScript shell, '''
interface MyInterface {
String fooMethod()
void noMethod()
@@ -52,7 +59,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithNoMethod() {
- assertScript '''
+ assertScript shell, '''
trait MyTrait {}
class Foo implements MyTrait {}
@@ -63,7 +70,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithOneMethod() {
- assertScript '''
+ assertScript shell, '''
trait MyTrait {
int a() { 1 }
}
@@ -77,7 +84,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithTwoMethods() {
- assertScript '''
+ assertScript shell, '''
trait MyTrait {
int a() { 1 }
int b() { a() }
@@ -93,7 +100,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithTwoMethodsAndOneOverride() {
- assertScript '''
+ assertScript shell, '''
trait MyTrait {
int a() { 1 }
int b() { a() }
@@ -112,7 +119,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithTwoMethodsAndOneAbstract() {
- assertScript '''
+ assertScript shell, '''
trait MyTrait {
abstract int a()
int b() { a() }
@@ -131,7 +138,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithTwoMethodsAndOneAbstractNotImplemented() {
- shouldFail '''
+ shouldFail shell, '''
abstract trait MyTrait {
abstract int a()
int b() { a() }
@@ -149,18 +156,18 @@ final class TraitASTTransformationTest {
@Test
void testWithPrecompiledTraitWithOneMethod() {
- assertScript '''
- import org.codehaus.groovy.transform.traitx.TraitASTTransformationTest.TestTrait as TestTrait
+ assertScript shell, """
+ import ${this.class.name}.TestTrait
class Foo implements TestTrait {}
def foo = new Foo()
assert foo.a() == 123
- '''
+ """
}
@Test
void testTraitWithConstructor() {
- shouldFail '''
+ shouldFail shell, '''
abstract trait MyTrait {
MyTrait() {
println 'woo'
@@ -175,7 +182,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithField() {
- assertScript '''
+ assertScript shell, '''
trait MyTrait {
private String message = 'Hello'
String getBlah() {
@@ -191,8 +198,9 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithField2() {
- assertScript '''
+ assertScript shell, '''
import org.codehaus.groovy.transform.traitx.TestTrait2
+
class Foo implements TestTrait2 {
def cat() { "cat" }
}
@@ -205,9 +213,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithSetValue() {
- assertScript '''
- import groovy.transform.Trait
-
+ assertScript shell, '''
trait Named {
private String name
void setLabel(String val) { name = val }
@@ -230,7 +236,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithProperty() {
- assertScript '''
+ assertScript shell, '''
trait Named {
String name
}
@@ -245,9 +251,7 @@ final class TraitASTTransformationTest {
@Test
void testClosureExpressionInTrait() {
- assertScript '''
- import groovy.transform.*
-
+ assertScript shell, '''
trait GreetingObject {
String greeting = 'Welcome!'
Closure greeter() {
@@ -264,7 +268,7 @@ final class TraitASTTransformationTest {
@Test
void testUpdatePropertyFromSelf() {
- assertScript '''
+ assertScript shell, '''
trait Updater {
void update() {
config.key = 'value'
@@ -282,9 +286,7 @@ final class TraitASTTransformationTest {
@Test
void testPrivateFieldInTraitShouldBeRemapped() {
- assertScript '''
- import groovy.transform.ASTTest
-
+ assertScript shell, '''
trait Foo {
private int i = 0
int sum(int x) { x+i }
@@ -304,9 +306,7 @@ final class TraitASTTransformationTest {
@Test
void testStaticallyCompiledTrait() {
- assertScript '''
- import groovy.transform.CompileStatic
-
+ assertScript shell, '''
@CompileStatic
trait Foo {
private String msg = 'foo'
@@ -324,7 +324,7 @@ final class TraitASTTransformationTest {
@Test
void testOverridePropertyDefinedInTrait() {
- assertScript '''
+ assertScript shell, '''
trait Id {
Long id = 123L
}
@@ -339,7 +339,7 @@ final class TraitASTTransformationTest {
@Test
void testOverridePropertyGetterDefinedInTrait() {
- assertScript '''
+ assertScript shell, '''
trait Id {
Long id = 123L
}
@@ -354,7 +354,7 @@ final class TraitASTTransformationTest {
@Test
void testSimpleTraitInheritance() {
- assertScript '''
+ assertScript shell, '''
trait Top { String methodFromA() { 'A' } }
trait Bottom extends Top { String methodFromB() { 'B' }}
class Foo implements Bottom {}
@@ -367,7 +367,7 @@ final class TraitASTTransformationTest {
@Test
void testSimpleTraitInheritanceWithTraitOverridingMethodFromParent() {
10.times {
- assertScript '''
+ assertScript shell, '''
trait Top { String methodFromA() { 'A' } }
trait Bottom extends Top {
String methodFromA() { 'B' }
@@ -383,7 +383,7 @@ final class TraitASTTransformationTest {
@Test
void testSimpleTraitInheritanceWithTraitOverridingMethodFromParentAndClass() {
- assertScript '''
+ assertScript shell, '''
trait Top { String methodFromA() { 'A' } }
trait Bottom extends Top {
String methodFromA() { 'B' }
@@ -400,7 +400,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitOnEnum() {
- assertScript '''
+ assertScript shell, '''
trait WithBar { int bar }
enum MyEnum implements WithBar {
@@ -420,7 +420,7 @@ final class TraitASTTransformationTest {
@Test
void testClassImplementingTraitWithSameMethod() {
- assertScript '''
+ assertScript shell, '''
trait A {
int foo() { 1 }
}
@@ -433,7 +433,7 @@ final class TraitASTTransformationTest {
assert x.foo() == 2 // default order, B is first
'''
- assertScript '''
+ assertScript shell, '''
trait A {
int foo() { 1 }
}
@@ -446,7 +446,7 @@ final class TraitASTTransformationTest {
assert x.foo() == 1 // default order, A is first
'''
- assertScript '''
+ assertScript shell, '''
trait A {
int foo() { 1 }
}
@@ -462,7 +462,7 @@ final class TraitASTTransformationTest {
assert x.foo() == 1
'''
- assertScript '''
+ assertScript shell, '''
trait A {
int foo() { 1 }
}
@@ -479,14 +479,14 @@ final class TraitASTTransformationTest {
'''
// make sure it is compatible with @CompileStatic
- assertScript '''
+ assertScript shell, '''
trait A {
int foo() { 1 }
}
trait B {
int foo() { 2 }
}
- @groovy.transform.CompileStatic
+ @CompileStatic
class AB implements A,B {
int foo() {
B.super.foo()
@@ -497,7 +497,7 @@ final class TraitASTTransformationTest {
'''
// GROOVY-10144
- assertScript '''
+ assertScript shell, '''
trait T {
def m() { 'T' }
}
@@ -514,7 +514,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithGenerics1() {
- assertScript '''
+ assertScript shell, '''
trait Provider<T> {
T get() {
null
@@ -525,14 +525,14 @@ final class TraitASTTransformationTest {
assert c.get() == null
'''
- assertScript '''
- @groovy.transform.CompileStatic
+ assertScript shell, '''
+ @CompileStatic
trait Provider<T> {
T get() {
null
}
}
- @groovy.transform.CompileStatic
+ @CompileStatic
class StringProvider implements Provider<String> {}
def c = new StringProvider()
assert c.get() == null
@@ -541,7 +541,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithGenerics2() {
- assertScript '''
+ assertScript shell, '''
trait Provider<T> {
T get(T ref) {
ref
@@ -552,14 +552,14 @@ final class TraitASTTransformationTest {
assert c.get('foo') == 'foo'
'''
- assertScript '''
- @groovy.transform.CompileStatic
+ assertScript shell, '''
+ @CompileStatic
trait Provider<T> {
T get(T ref) {
ref
}
}
- @groovy.transform.CompileStatic
+ @CompileStatic
class StringProvider implements Provider<String> {}
def c = new StringProvider()
assert c.get('foo') == 'foo'
@@ -568,7 +568,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-9760
void testTraitWithGenerics3() {
- assertScript '''
+ assertScript shell, '''
trait Provider<T> {
T get(T ref) {
ref
@@ -579,14 +579,14 @@ final class TraitASTTransformationTest {
assert new UnspecifiedProvider().get('foo') == 'foo'
'''
- assertScript '''
- @groovy.transform.CompileStatic
+ assertScript shell, '''
+ @CompileStatic
trait Provider<T> {
T get(T ref) {
ref
}
}
- @groovy.transform.CompileStatic
+ @CompileStatic
class UnspecifiedProvider implements Provider {
}
assert new UnspecifiedProvider().get('foo') == 'foo'
@@ -595,7 +595,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithGenericProperty() {
- assertScript '''
+ assertScript shell, '''
trait PropertyProvider<T> {
T foo
}
@@ -605,12 +605,12 @@ final class TraitASTTransformationTest {
assert c.foo == 'foo'
'''
- assertScript '''
- @groovy.transform.CompileStatic
+ assertScript shell, '''
+ @CompileStatic
trait PropertyProvider<T> {
T foo
}
- @groovy.transform.CompileStatic
+ @CompileStatic
class StringProperty implements PropertyProvider<String> {}
def c = new StringProperty()
c.foo = 'foo'
@@ -620,7 +620,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithComplexGenericProperty() {
- assertScript '''
+ assertScript shell, '''
trait PropertyProvider<T> {
List<T> foo
}
@@ -630,25 +630,25 @@ final class TraitASTTransformationTest {
assert c.foo == ['foo']
'''
- assertScript '''
- @groovy.transform.CompileStatic
+ assertScript shell, '''
+ @CompileStatic
trait PropertyProvider<T> {
List<T> foo
}
- @groovy.transform.CompileStatic
+ @CompileStatic
class StringProperty implements PropertyProvider<String> {}
def c = new StringProperty()
c.foo = ['foo']
assert c.foo == ['foo']
'''
- assertScript '''
+ assertScript shell, '''
trait PropertyProvider<T> {
List<T> foo
}
class StringProperty implements PropertyProvider<String> {}
- @groovy.transform.CompileStatic
+ @CompileStatic
void test() {
def c = new StringProperty()
c.foo = ['foo']
@@ -660,7 +660,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithGenericField() {
- assertScript '''
+ assertScript shell, '''
trait PropertyProvider<T> {
private T foo
void set(T t) { foo = t}
@@ -672,14 +672,14 @@ final class TraitASTTransformationTest {
assert c.get() == 'foo'
'''
- assertScript '''
- @groovy.transform.CompileStatic
+ assertScript shell, '''
+ @CompileStatic
trait PropertyProvider<T> {
private T foo
void set(T t) { foo = t}
T get() { foo }
}
- @groovy.transform.CompileStatic
+ @CompileStatic
class StringProperty implements PropertyProvider<String> {}
def c = new StringProperty()
c.set('foo')
@@ -689,7 +689,7 @@ final class TraitASTTransformationTest {
@Test
void testRuntimeTrait() {
- assertScript '''
+ assertScript shell, '''
trait Flying {
String fly() {
"I'm flying!"
@@ -710,7 +710,7 @@ final class TraitASTTransformationTest {
@Test
void testRuntimeDoubleTrait() {
- assertScript '''
+ assertScript shell, '''
trait Flying {
String fly() {
"I'm flying!"
@@ -743,7 +743,7 @@ final class TraitASTTransformationTest {
@Test
void testRuntimeWithTraitsDGM() {
- assertScript '''
+ assertScript shell, '''
trait Flying {
String fly() {
"I'm flying!"
@@ -772,7 +772,7 @@ final class TraitASTTransformationTest {
@Test
void testRuntimeWithTraitsDGMAndExplicitOverride() {
- assertScript '''
+ assertScript shell, '''
trait Flying {
String fly() {
"I'm flying!"
@@ -804,7 +804,7 @@ final class TraitASTTransformationTest {
@Test
void testRuntimeTraitUnderCompileStaticShouldUseMethodFromTrait() {
- assertScript '''
+ assertScript shell, '''
trait Flying {
String fly() {
"I'm flying!"
@@ -819,7 +819,7 @@ final class TraitASTTransformationTest {
String speak() { "I'm a special duck!" }
}
- @groovy.transform.CompileStatic
+ @CompileStatic
void test() {
def d = new Duck()
d = d.withTraits(Flying, Speaking)
@@ -833,7 +833,7 @@ final class TraitASTTransformationTest {
@Test
void testRuntimeWithTraitsDGMAndExtraMethodCompileStatic() {
- assertScript '''
+ assertScript shell, '''
trait Flying {
String fly() {
"I'm flying!"
@@ -850,7 +850,7 @@ final class TraitASTTransformationTest {
String speak() { "I'm a special duck!"}
}
- @groovy.transform.CompileStatic
+ @CompileStatic
void test() {
def d = new Duck()
d = d.withTraits(Flying, Speaking)
@@ -865,7 +865,7 @@ final class TraitASTTransformationTest {
@Test
void testRuntimeTraitWithMethodOfTheSameSignature() {
- assertScript '''
+ assertScript shell, '''
trait Flying {
String ability() { 'fly' }
String fly() {
@@ -886,18 +886,17 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithDelegatesTo() {
- assertScript '''
+ assertScript shell, '''
trait Route {
void from(@DelegatesTo(To) Closure c) {
c.delegate = new To()
-
}
}
class To {
void test() { println 'Test' }
}
class Foo implements Route {}
- @groovy.transform.CompileStatic
+ @CompileStatic
void exec() {
def f = new Foo()
f.from {
@@ -910,18 +909,18 @@ final class TraitASTTransformationTest {
@Test
void testProxyGenerationShouldNotFail() {
- assertScript '''
- trait Foo { }
- class A {}
- def o = new A()
- def a = o.withTraits(Foo)
- def b = a.withTraits(Foo) // shouldn't fail
+ assertScript shell, '''
+ trait T { }
+ class C { }
+ def o = new C()
+ def t = o.withTraits(T)
+ def u = t.withTraits(T) // shouldn't fail
'''
}
@Test
void testShouldNotThrowNPEWithInheritanceUsingExtends() {
- assertScript '''
+ assertScript shell, '''
trait Named {
String name
}
@@ -939,7 +938,7 @@ final class TraitASTTransformationTest {
@Test
void testStaticInnerClassInTrait() {
- assertScript '''
+ assertScript shell, '''
trait Outer {
Inner doSomething() {
new Inner()
@@ -959,7 +958,7 @@ final class TraitASTTransformationTest {
@Test
void testNonStaticInnerClassInTrait() {
- shouldFail '''
+ shouldFail shell, '''
trait Outer {
Inner doSomething() {
new Inner()
@@ -972,7 +971,7 @@ final class TraitASTTransformationTest {
@Test
void testClosureInsideTrait() {
- assertScript '''
+ assertScript shell, '''
trait Doubler {
int foo(int x) {
{ -> 2*x }.call()
@@ -986,7 +985,7 @@ final class TraitASTTransformationTest {
@Test
void testClosureInsideTraitAccessingProperty() {
- assertScript '''
+ assertScript shell, '''
trait Doubler {
int x
int foo() {
@@ -1002,7 +1001,7 @@ final class TraitASTTransformationTest {
@Test
void testThisDotClassInTrait() {
- assertScript '''
+ assertScript shell, '''
trait Classic {
Class clazz() {
this.class
@@ -1016,7 +1015,7 @@ final class TraitASTTransformationTest {
@Test
void testShouldNotThrowStackOverflow() {
- assertScript '''
+ assertScript shell, '''
trait TestTrait {
private String message = 'Hello'
String getMessage() { this.message }
@@ -1031,8 +1030,7 @@ final class TraitASTTransformationTest {
assert foo.blah() == 'Groovy'
'''
- assertScript '''
- import groovy.transform.CompileStatic
+ assertScript shell, '''
@CompileStatic
trait TestTrait {
private String message = 'Hello'
@@ -1056,7 +1054,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-9255
void testTraitSuperPropertyGet() {
- assertScript '''
+ assertScript shell, '''
trait T {
def x = 'value'
}
@@ -1068,7 +1066,7 @@ final class TraitASTTransformationTest {
assert new C().test() == 'value'
'''
- assertScript '''
+ assertScript shell, '''
trait T {
boolean x = true
}
@@ -1080,7 +1078,7 @@ final class TraitASTTransformationTest {
assert new C().test() == true
'''
- assertScript '''
+ assertScript shell, '''
trait T {
def getX() { 'value' }
}
@@ -1092,7 +1090,7 @@ final class TraitASTTransformationTest {
assert new C().test() == 'value'
'''
- assertScript '''
+ assertScript shell, '''
trait T {
boolean isX() { true }
}
@@ -1107,7 +1105,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-9672
void testTraitSuperPropertyGetStatic() {
- assertScript '''
+ assertScript shell, '''
trait T {
static x = 'value'
}
@@ -1119,7 +1117,7 @@ final class TraitASTTransformationTest {
assert new C().test() == 'value'
'''
- assertScript '''
+ assertScript shell, '''
trait T {
static boolean x = true
}
@@ -1131,7 +1129,7 @@ final class TraitASTTransformationTest {
assert new C().test() == true
'''
- assertScript '''
+ assertScript shell, '''
trait T {
static getX() { 'value' }
}
@@ -1143,7 +1141,7 @@ final class TraitASTTransformationTest {
assert new C().test() == 'value'
'''
- assertScript '''
+ assertScript shell, '''
trait T {
static boolean isX() { true }
}
@@ -1155,7 +1153,7 @@ final class TraitASTTransformationTest {
assert new C().test() == true
'''
- assertScript '''
+ assertScript shell, '''
trait A {
static getX() { 'A' }
}
@@ -1173,7 +1171,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitSuperPropertySet() {
- assertScript '''
+ assertScript shell, '''
trait T {
def x
}
@@ -1186,7 +1184,7 @@ final class TraitASTTransformationTest {
assert new C().test() == 'value'
'''
- def err = shouldFail '''
+ def err = shouldFail shell, '''
trait T {
final x = 'const'
}
@@ -1201,7 +1199,7 @@ final class TraitASTTransformationTest {
assert err =~ /No such property: super for class: T/
// TODO: add support for compound assignment
- shouldFail MissingPropertyException, '''
+ shouldFail shell, MissingPropertyException, '''
trait T {
def x = 'value'
}
@@ -1215,7 +1213,7 @@ final class TraitASTTransformationTest {
assert new C().test() == 'valuable'
'''
- assertScript '''
+ assertScript shell, '''
trait T {
def setX(value) { 'retval' }
}
@@ -1230,7 +1228,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-9672
void testTraitSuperPropertySetStatic() {
- assertScript '''
+ assertScript shell, '''
trait T {
static x
}
@@ -1243,7 +1241,7 @@ final class TraitASTTransformationTest {
assert new C().test() == 'value'
'''
- def err = shouldFail '''
+ def err = shouldFail shell, '''
trait T {
static final x = 'const'
}
@@ -1257,7 +1255,7 @@ final class TraitASTTransformationTest {
'''
assert err =~ /No such property: super for class: T/
- assertScript '''
+ assertScript shell, '''
trait T {
static setX(value) { 'retval' }
}
@@ -1269,7 +1267,7 @@ final class TraitASTTransformationTest {
assert new C().test() == 'retval'
'''
- assertScript '''
+ assertScript shell, '''
trait A {
static setX(value) { 'A' }
}
@@ -1287,7 +1285,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-9673
void testTraitSuperPropertySetWithOverloads() {
- assertScript '''
+ assertScript shell, '''
trait T {
def setX(Number n) {
'Number'
@@ -1304,7 +1302,7 @@ final class TraitASTTransformationTest {
assert new C().test() == 'Number'
'''
- assertScript '''
+ assertScript shell, '''
trait T {
def setX(Number n) {
'Number'
@@ -1324,7 +1322,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-9672
void testTraitSuperCallStatic() {
- assertScript '''
+ assertScript shell, '''
trait A {
static m() { 'A' }
}
@@ -1342,7 +1340,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitSuperCallWhenExtendingAnotherTrait() {
- assertScript '''
+ assertScript shell, '''
trait Foo {
int foo() { 1 }
}
@@ -1356,8 +1354,7 @@ final class TraitASTTransformationTest {
assert b.foo() == 2
'''
- assertScript '''
- import groovy.transform.CompileStatic
+ assertScript shell, '''
@CompileStatic
trait Foo {
int foo() { 1 }
@@ -1376,7 +1373,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-9256
void testTraitSuperCallWithinClosure() {
- assertScript '''
+ assertScript shell, '''
trait T {
int getX() { 42 }
}
@@ -1390,7 +1387,7 @@ final class TraitASTTransformationTest {
assert new C().test() == 42
'''
- assertScript '''
+ assertScript shell, '''
trait T {
int getX() { 42 }
}
@@ -1407,7 +1404,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitShouldNotTakeOverSuperClassMethod() {
- assertScript '''
+ assertScript shell, '''
trait TestTrait {
String foo() { 'from Trait' }
}
@@ -1427,7 +1424,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitShouldTakeOverSuperClassMethod() {
- assertScript '''
+ assertScript shell, '''
trait TestTrait {
String foo() { 'from Trait' }
}
@@ -1442,7 +1439,7 @@ final class TraitASTTransformationTest {
@Test
void testOverrideUsingRuntimeTrait() {
- assertScript '''
+ assertScript shell, '''
trait TestTrait {
String foo() { 'from Trait' }
}
@@ -1454,7 +1451,7 @@ final class TraitASTTransformationTest {
assert b.foo() == 'from Trait'
'''
- assertScript '''
+ assertScript shell, '''
trait TestTrait {
String foo() { 'from Trait' }
}
@@ -1470,7 +1467,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitOverrideHierarchy() {
- assertScript '''
+ assertScript shell, '''
trait TestTrait {
String foo() { 'from Trait' }
String bar() { 'from Trait' }
@@ -1498,7 +1495,7 @@ final class TraitASTTransformationTest {
@Test
void testSAMCoercion1() {
- assertScript '''
+ assertScript shell, '''
trait SAMTrait {
String foo() { bar()+bar() }
abstract String bar()
@@ -1507,12 +1504,12 @@ final class TraitASTTransformationTest {
assert sam.foo() == 'hellohello'
'''
- assertScript '''
+ assertScript shell, '''
trait SAMTrait {
String foo() { bar()+bar() }
abstract String bar()
}
- @groovy.transform.CompileStatic
+ @CompileStatic
void test() {
SAMTrait sam = { 'hello' }
assert sam.foo() == 'hellohello'
@@ -1522,7 +1519,7 @@ final class TraitASTTransformationTest {
@Test
void testSAMCoercion2() {
- assertScript '''
+ assertScript shell, '''
trait SAMTrait {
String foo() { bar()+bar() }
abstract String bar()
@@ -1533,7 +1530,7 @@ final class TraitASTTransformationTest {
test { 'hello' } // SAM coercion
'''
- assertScript '''
+ assertScript shell, '''
trait SAMTrait {
String foo() { bar()+bar() }
abstract String bar()
@@ -1541,7 +1538,7 @@ final class TraitASTTransformationTest {
void test(SAMTrait sam) {
assert sam.foo() == 'hellohello'
}
- @groovy.transform.CompileStatic
+ @CompileStatic
void doTest() {
test { 'hello' } // SAM coercion
}
@@ -1551,7 +1548,7 @@ final class TraitASTTransformationTest {
@Test
void testSAMCoercion3() {
- assertScript '''
+ assertScript shell, '''
trait Greeter {
abstract String getName()
String greet() { "Hello $name" }
@@ -1564,7 +1561,7 @@ final class TraitASTTransformationTest {
@Test
void testSAMCoercion4() {
- assertScript '''
+ assertScript shell, '''
trait Greeter {
abstract String getName()
String greet() { "Hello $name" }
@@ -1577,7 +1574,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-8243
void testSAMCoercion5() {
- assertScript '''
+ assertScript shell, '''
trait T {
abstract def foo(int i)
def bar(double j) { "trait $j".toString() }
@@ -1593,7 +1590,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-8244
void testSAMCoercion6() {
- assertScript '''
+ assertScript shell, '''
trait T {
abstract def foo(int a, int b = 2)
}
@@ -1606,7 +1603,7 @@ final class TraitASTTransformationTest {
@Test
void testMethodMissingInTrait() {
- assertScript '''
+ assertScript shell, '''
trait MethodMissingProvider {
def methodMissing(String name, args) {
name
@@ -1620,7 +1617,7 @@ final class TraitASTTransformationTest {
@Test
void testPropertyMissingInTrait() {
- assertScript '''
+ assertScript shell, '''
trait PropertyMissingProvider {
def propertyMissing(String name) {
name
@@ -1634,7 +1631,7 @@ final class TraitASTTransformationTest {
@Test
void testShouldUseDefinitionFromClassInsteadOfTrait() {
- assertScript '''
+ assertScript shell, '''
trait TestTrait {
String foo() { 'from Trait' }
}
@@ -1648,7 +1645,7 @@ final class TraitASTTransformationTest {
@Test
void testPrivateFieldNameConflict() {
- assertScript '''
+ assertScript shell, '''
trait Trait1 { private int v = 111; int getValueFromTrait1() { v } }
trait Trait2 { private int v = 222; int getValueFromTrait2() { v } }
class Impl implements Trait1,Trait2 {}
@@ -1660,7 +1657,7 @@ final class TraitASTTransformationTest {
@Test
void testPrivateMethodInTrait() {
- assertScript '''
+ assertScript shell, '''
trait DoingSecretThings {
private String secret() { 'secret' }
String foo() { secret() }
@@ -1673,7 +1670,7 @@ final class TraitASTTransformationTest {
@Test
void testPrivateMethodInTraitAccessingPrivateField() {
- assertScript '''
+ assertScript shell, '''
trait DoingSecretThings {
private int x = 0
private int secret() { x+=1; x }
@@ -1687,8 +1684,8 @@ final class TraitASTTransformationTest {
@Test
void testPrivateMethodInTraitWithCompileStatic() {
- assertScript '''
- @groovy.transform.CompileStatic
+ assertScript shell, '''
+ @CompileStatic
trait DoingSecretThings {
private String secret() { 'secret' }
String foo() { secret() }
@@ -1701,8 +1698,8 @@ final class TraitASTTransformationTest {
@Test
void testPrivateMethodInTraitAccessingPrivateFieldCompileStatic() {
- assertScript '''
- @groovy.transform.CompileStatic
+ assertScript shell, '''
+ @CompileStatic
trait DoingSecretThings {
private int x = 0
private int secret() { x+=1; x }
@@ -1717,8 +1714,8 @@ final class TraitASTTransformationTest {
@Test
void testNoShadowingPrivateMethodInTraitAccessingPrivateFieldCompileStatic() {
- assertScript '''
- @groovy.transform.CompileStatic
+ assertScript shell, '''
+ @CompileStatic
trait DoingSecretThings {
private int x = 0
private int secret() { x+=1; x }
@@ -1735,7 +1732,7 @@ final class TraitASTTransformationTest {
@Test
void testNoShadowingPrivateMethodInTraitAccessingPrivateField() {
- assertScript '''
+ assertScript shell, '''
trait DoingSecretThings {
private int x = 0
private int secret() { x+=1; x }
@@ -1752,7 +1749,7 @@ final class TraitASTTransformationTest {
@Test
void testMixPrivatePublicMethodsOfSameName() {
- def err = shouldFail '''
+ def err = shouldFail shell, '''
trait DoingSecretThings {
private String secret(String s) { s.toUpperCase() }
String secret() { 'public' }
@@ -1768,7 +1765,7 @@ final class TraitASTTransformationTest {
@Test
void testInterfaceExtendingTraitShouldNotTriggerRuntimeError() {
- assertScript '''
+ assertScript shell, '''
trait A {
void foo() { println 'A' }
}
@@ -1789,7 +1786,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitWithDelegate() {
- assertScript '''
+ assertScript shell, '''
trait ListTrait<T> {
private @Delegate ArrayList<T> list = new ArrayList<T>()
}
@@ -1806,7 +1803,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-7288
void testClassWithTraitDelegate() {
- assertScript '''
+ assertScript shell, '''
trait T {
final foo = 'bar'
}
@@ -1826,7 +1823,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-9739
void testTraitExtendsTraitWithDelegate() {
- assertScript '''
+ assertScript shell, '''
class Main implements ClientSupport {
static main(args) {
def tester = new Main(client: new Client())
@@ -1857,9 +1854,9 @@ final class TraitASTTransformationTest {
@Test // GROOVY-9901
void testTraitWithMemozied() {
- assertScript '''
+ assertScript shell, '''
trait Foo {
- @groovy.transform.Memoized
+ @Memoized
double method() {
Math.random()
}
@@ -1882,9 +1879,7 @@ final class TraitASTTransformationTest {
@Test
void testAnnotationShouldBeCarriedOver() {
- assertScript '''
- import groovy.transform.ASTTest
-
+ assertScript shell, '''
trait Foo {
@Deprecated void foo() { 'ok' }
}
@@ -1902,8 +1897,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-10553
void testAnnotationShouldBeCarriedOver2() {
- assertScript '''
- import groovy.transform.*
+ assertScript shell, '''
import java.lang.annotation.*
@Retention(RetentionPolicy.RUNTIME)
@Target([ElementType.FIELD,ElementType.TYPE_USE])
@@ -1932,8 +1926,8 @@ final class TraitASTTransformationTest {
@Test
void testShouldCompileTraitMethodStatically() {
- def err = shouldFail '''
- @groovy.transform.CompileStatic
+ def err = shouldFail shell, '''
+ @CompileStatic
trait Foo {
int foo() { 1+'foo'}
}
@@ -1943,7 +1937,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitStaticMethod() {
- assertScript '''
+ assertScript shell, '''
trait StaticProvider {
static String foo() { 'static method' }
}
@@ -1951,7 +1945,7 @@ final class TraitASTTransformationTest {
assert Foo.foo() == 'static method'
'''
- assertScript '''
+ assertScript shell, '''
trait StaticProvider {
static String foo() { bar() }
static String bar() { 'static method' }
@@ -1963,7 +1957,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitStaticField() {
- assertScript '''
+ assertScript shell, '''
trait StaticFieldProvider {
public static int VAL = 123
}
@@ -1971,7 +1965,7 @@ final class TraitASTTransformationTest {
assert Foo.StaticFieldProvider__VAL == 123
'''
- assertScript '''
+ assertScript shell, '''
trait StaticFieldProvider {
public static int VAL = 123
public static void update(int x) { VAL = x }
@@ -1985,7 +1979,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitStaticProperty() {
- assertScript '''
+ assertScript shell, '''
trait StaticPropertyProvider {
static int VAL = 123
public static void update(int x) { VAL = x }
@@ -1997,7 +1991,7 @@ final class TraitASTTransformationTest {
assert Foo.VAL == 456
'''
- assertScript '''
+ assertScript shell, '''
trait T {
static p = 1
}
@@ -2012,7 +2006,7 @@ final class TraitASTTransformationTest {
'''
// GROOVY-9678
- assertScript '''
+ assertScript shell, '''
trait T {
static p = 1
}
@@ -2029,9 +2023,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitMethodShouldBeDefaultImplementationUsingReflection() {
- assertScript '''
- import org.codehaus.groovy.transform.trait.Traits
-
+ assertScript shell, '''
trait Foo {
void foo() {}
}
@@ -2050,9 +2042,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitMethodShouldNotBeDefaultImplementationUsingReflection() {
- assertScript '''
- import org.codehaus.groovy.transform.trait.Traits
-
+ assertScript shell, '''
trait Foo {
void foo() {}
}
@@ -2071,9 +2061,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitMethodShouldBeDefaultImplementationUsingReflectionAndGenericTypes() {
- assertScript '''
- import org.codehaus.groovy.transform.trait.Traits
-
+ assertScript shell, '''
trait Foo<F,T> {
T foo(F from) {}
}
@@ -2094,7 +2082,7 @@ final class TraitASTTransformationTest {
@Test
void testUseOfThisInInitializer() {
- assertScript '''
+ assertScript shell, '''
trait Dummyable {
String x = this.class.name
@@ -2112,7 +2100,7 @@ final class TraitASTTransformationTest {
@Test
void testUseOfMethodInInitializer() {
- assertScript '''
+ assertScript shell, '''
trait Dummyable {
String x = whoAmI()
@@ -2134,7 +2122,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitShouldNotBeAllowedToExtendInterface() {
// GROOVY-6672
- def err = shouldFail '''
+ def err = shouldFail shell, '''
trait Foo extends Serializable {}
Foo x = null
'''
@@ -2143,7 +2131,7 @@ final class TraitASTTransformationTest {
@Test
void testImplementingingAbstractClass() {
- assertScript '''
+ assertScript shell, '''
abstract class AbstractSomething {
abstract String something()
}
@@ -2166,7 +2154,7 @@ final class TraitASTTransformationTest {
@Test
void testShouldNotOverrideMethodImplementedFromAbstractClass() {
- assertScript '''
+ assertScript shell, '''
abstract class AbstractSomething {
abstract String something()
}
@@ -2197,7 +2185,7 @@ final class TraitASTTransformationTest {
@Test
void testIncrementPropertyOfTrait() {
- assertScript '''
+ assertScript shell, '''
trait Level {
int maxLevel
int currentLevel = 0
@@ -2226,7 +2214,7 @@ final class TraitASTTransformationTest {
@Test
void testIncrementPropertyOfTraitUsingPlusPlus() {
- def err = shouldFail '''
+ def err = shouldFail shell, '''
trait Level {
int maxLevel
int currentLevel = 0
@@ -2257,7 +2245,7 @@ final class TraitASTTransformationTest {
@Test
void testIncrementPropertyOfTraitUsingPrefixPlusPlus() {
- def err = shouldFail '''
+ def err = shouldFail shell, '''
trait Level {
int maxLevel
int currentLevel = 0
@@ -2288,7 +2276,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-6691
void testTraitImplementingGenericSuperTrait() {
- assertScript '''
+ assertScript shell, '''
class App {}
trait Base<T> {
T value
@@ -2297,7 +2285,7 @@ final class TraitASTTransformationTest {
}
trait Applicative extends Base<App> { }
class Dummy implements Applicative {}
- @groovy.transform.TypeChecked
+ @TypeChecked
void test() {
def d = new Dummy()
d.set(new App())
@@ -2305,7 +2293,7 @@ final class TraitASTTransformationTest {
test()
'''
- def err = shouldFail '''
+ def err = shouldFail shell, '''
class App {}
trait Base<T> {
T value
@@ -2314,7 +2302,7 @@ final class TraitASTTransformationTest {
}
trait Applicative extends Base<App> { }
class Dummy implements Applicative {}
- @groovy.transform.TypeChecked
+ @TypeChecked
void test() {
def d = new Dummy()
d.set('oh noes!')
@@ -2327,7 +2315,7 @@ final class TraitASTTransformationTest {
@Test
void testUpdateFieldFromOtherReceiver() {
- assertScript '''
+ assertScript shell, '''
class Person {
String name
}
@@ -2346,7 +2334,7 @@ final class TraitASTTransformationTest {
@Test
void testUseStaticFieldInTraitBody() {
- assertScript '''
+ assertScript shell, '''
import java.util.logging.Logger
trait Loggable {
@@ -2367,7 +2355,7 @@ final class TraitASTTransformationTest {
@Test
void testUpdateStaticFieldInTraitBody() {
- assertScript '''
+ assertScript shell, '''
trait Loggable {
static int CALLS = 0
@@ -2389,7 +2377,7 @@ final class TraitASTTransformationTest {
@Test
void testProxyTarget() {
- assertScript '''
+ assertScript shell, '''
trait Helloable implements CharSequence {
void hello() { println "hello" }
}
@@ -2406,8 +2394,7 @@ final class TraitASTTransformationTest {
@Test
void testTraitsGetAsType() {
- assertScript '''
- import org.codehaus.groovy.transform.trait.Traits
+ assertScript shell, '''
trait Helloable implements CharSequence {
void hello() { println "hello" }
}
@@ -2428,9 +2415,7 @@ final class TraitASTTransformationTest {
@Test
void testStackableTraits() {
- assertScript '''
- import org.codehaus.groovy.transform.trait.Traits
-
+ assertScript shell, '''
trait A {
int foo(int x) { x }
}
@@ -2450,7 +2435,7 @@ final class TraitASTTransformationTest {
@Test
void testStackableTraitsWithExplicitClasses() {
- assertScript '''
+ assertScript shell, '''
interface IntQueue {
Integer get()
void put(Integer x)
@@ -2493,7 +2478,7 @@ final class TraitASTTransformationTest {
@Test
void testStackableTraitsWithDynamicTraits() {
- assertScript '''
+ assertScript shell, '''
interface IntQueue {
Integer get()
void put(Integer x)
@@ -2533,7 +2518,7 @@ final class TraitASTTransformationTest {
@Test
void testSuperKeywordInRegularTraitInheritance() {
- assertScript '''
+ assertScript shell, '''
trait A {
int foo(x) { 1+x }
}
@@ -2548,7 +2533,7 @@ final class TraitASTTransformationTest {
@Test
void testSuperKeywordInRegularTraitMultipleInheritance() {
- assertScript '''
+ assertScript shell, '''
trait A {
int foo(x) { 1+x }
}
@@ -2566,12 +2551,12 @@ final class TraitASTTransformationTest {
@Test
void testStaticallyCompiledTraitWithCallToSuper() {
- assertScript '''
- @groovy.transform.CompileStatic
+ assertScript shell, '''
+ @CompileStatic
trait A {
int foo(int x) { 1+x }
}
- @groovy.transform.CompileStatic
+ @CompileStatic
trait B extends A {
int foo(int x) { 2*super.foo(x)}
}
@@ -2583,13 +2568,13 @@ final class TraitASTTransformationTest {
@Test
void testStaticallyCompiledTraitWithCallToSuperInPackage() {
- assertScript '''
+ assertScript shell, '''
package blah
- @groovy.transform.CompileStatic
+ @CompileStatic
trait A {
int foo(int x) { 1+x }
}
- @groovy.transform.CompileStatic
+ @CompileStatic
trait B extends A {
int foo(int x) { 2*super.foo(x)}
}
@@ -2601,13 +2586,13 @@ final class TraitASTTransformationTest {
@Test
void testStaticallyCompiledTraitWithCallToSuperInPackageAndUnderscoreInClassName() {
- assertScript '''
+ assertScript shell, '''
package blah
- @groovy.transform.CompileStatic
+ @CompileStatic
trait A {
int foo(int x) { 1+x }
}
- @groovy.transform.CompileStatic
+ @CompileStatic
trait B_B extends A {
int foo(int x) { 2*super.foo(x)}
}
@@ -2619,12 +2604,12 @@ final class TraitASTTransformationTest {
@Test
void testStaticallyCompiledTraitWithCallToSuperAndNoExplicitSuperTrait() {
- assertScript '''
- @groovy.transform.CompileStatic
+ assertScript shell, '''
+ @CompileStatic
trait A {
int foo(int x) { 1+x }
}
- @groovy.transform.CompileStatic
+ @CompileStatic
trait B {
int foo(int x) { 2*(int)super.foo(x)}
}
@@ -2636,7 +2621,7 @@ final class TraitASTTransformationTest {
@Test
void testFieldInTraitAndDynamicProxy() {
- assertScript '''
+ assertScript shell, '''
trait WithName {
public String name
}
@@ -2648,9 +2633,7 @@ final class TraitASTTransformationTest {
@Test
void testFieldInTraitModifiers() {
- assertScript '''
- import groovy.transform.ASTTest
-
+ assertScript shell, '''
trait A {
public int foo
}
@@ -2662,16 +2645,15 @@ final class TraitASTTransformationTest {
def b = new B()
'''
- assertScript '''
- import groovy.transform.ASTTest
- import java.lang.reflect.Modifier
+ assertScript shell, '''
+ import static java.lang.reflect.Modifier.isPrivate
trait A {
private int foo
}
@ASTTest(phase=INSTRUCTION_SELECTION,value={
def field = node.getField('A__foo')
- assert Modifier.isPrivate(field.modifiers)
+ assert isPrivate(field.modifiers)
})
class B implements A {}
def b = new B()
@@ -2680,7 +2662,7 @@ final class TraitASTTransformationTest {
@Test
void testDecorateFinalClassWithTrait() {
- assertScript '''
+ assertScript shell, '''
trait Filtering {
StringBuilder append(String str) {
def subst = str.replace('o','')
@@ -2696,7 +2678,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-6708
void testCovariantReturnTypeWithGenericsInheritance() {
- assertScript '''
+ assertScript shell, '''
trait Top<X> {
X self(X x) {x}
}
@@ -2709,7 +2691,7 @@ final class TraitASTTransformationTest {
@Test
void testSuperCallInTraitAndDeepHierarchy() {
- assertScript '''
+ assertScript shell, '''
interface IntQueue {
Integer get()
void put(Integer x)
@@ -2752,7 +2734,7 @@ final class TraitASTTransformationTest {
@Test
void testCallToSuperTraitWithStackable() {
- assertScript '''
+ assertScript shell, '''
trait T2 {
void foo() {
println 'T2'
@@ -2782,7 +2764,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-7058
void testShouldNotThrowNPEBecauseOfIncompleteGenericsTypeInformation() {
- assertScript '''
+ assertScript shell, '''
class Project { Task task(String name, Map args) {} }
class Task {}
interface Plugin<P>{}
@@ -2801,7 +2783,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-7123
void testHelperSetterShouldNotReturnVoid() {
- assertScript '''
+ assertScript shell, '''
trait A {
def foo
def bar() { foo = 42 }
@@ -2814,10 +2796,7 @@ final class TraitASTTransformationTest {
@Test
void testSimpleSelfType() {
- assertScript '''
- import groovy.transform.SelfType
- import groovy.transform.CompileStatic
-
+ assertScript shell, '''
trait A {
int a() { 1 }
}
@@ -2835,10 +2814,7 @@ final class TraitASTTransformationTest {
@Test
void testSimpleSelfTypeInSubTrait() {
- assertScript '''
- import groovy.transform.SelfType
- import groovy.transform.CompileStatic
-
+ assertScript shell, '''
trait A {
int a() { 1 }
}
@@ -2863,10 +2839,7 @@ final class TraitASTTransformationTest {
@Test
void testDoubleSelfType() {
- assertScript '''
- import groovy.transform.SelfType
- import groovy.transform.CompileStatic
-
+ assertScript shell, '''
trait A {
int a() { 1 }
}
@@ -2887,10 +2860,7 @@ final class TraitASTTransformationTest {
@Test
void testClassDoesNotImplementSelfType() {
- def err = shouldFail '''
- import groovy.transform.SelfType
- import groovy.transform.CompileStatic
-
+ def err = shouldFail shell, '''
@CompileStatic
@SelfType([String,Serializable])
trait B {
@@ -2906,9 +2876,7 @@ final class TraitASTTransformationTest {
@Test
void testClassDoesNotImplementSelfTypeDefinedInInheritedTrait() {
- def err = shouldFail '''
- import groovy.transform.SelfType
-
+ def err = shouldFail shell, '''
interface Self { def bar() }
@SelfType(Self)
trait Trait {
@@ -2924,10 +2892,7 @@ final class TraitASTTransformationTest {
@Test
void testClassDoesNotImplementSelfTypeUsingAbstractClass() {
- def err = shouldFail '''
- import groovy.transform.SelfType
- import groovy.transform.CompileStatic
-
+ def err = shouldFail shell, '''
@CompileStatic
@SelfType([String,Serializable])
trait B {
@@ -2944,10 +2909,7 @@ final class TraitASTTransformationTest {
@Test
void testMethodAcceptingThisAsSelfTrait() {
- assertScript '''
- import groovy.transform.SelfType
- import groovy.transform.CompileStatic
-
+ assertScript shell, '''
class CommunicationService {
static void sendMessage(String from, String to, String message) {
println "$from sent [$message] to $to"
@@ -2979,10 +2941,7 @@ final class TraitASTTransformationTest {
@Test
void testRuntimeSelfType() {
- assertScript '''
- import groovy.transform.CompileStatic
- import groovy.transform.SelfType
-
+ assertScript shell, '''
trait A {
int a() { 1 }
}
@@ -3000,10 +2959,7 @@ final class TraitASTTransformationTest {
@Test
void testRuntimeSelfTypeWithInheritance() {
- assertScript '''
- import groovy.transform.CompileStatic
- import groovy.transform.SelfType
-
+ assertScript shell, '''
trait A {
int a() { 1 }
}
@@ -3040,7 +2996,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-7287
void testTraitWithMethodLevelGenericsShadowing1() {
- assertScript '''
+ assertScript shell, '''
trait Configurable<ConfigObject> {
ConfigObject configObject
@@ -3087,7 +3043,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-7287
void testTraitWithMethodLevelGenericsShadowing2() {
- assertScript '''
+ assertScript shell, '''
trait SomeTrait {
def <T extends Number> T someOtherMethod() {}
}
@@ -3102,26 +3058,27 @@ final class TraitASTTransformationTest {
'''
}
+ trait T7297 {
+ String title
+ def <U> List<U> m(U data) {
+ [data]
+ }
+ }
+
@Test // GROOVY-7297
- void testMethodlevelGenericsFromPrecompiledClass() {
- // TODO: T needs to be outside the script
- assertScript '''
- trait T {
- String title
- public <U> List<U> m(U data) {
- }
- }
- class C implements T {
+ void testMethodLevelGenericsFromPrecompiledClass() {
+ assertScript shell, """
+ class C implements ${T7297.name} {
}
def c = new C(title: 'some title')
assert c.title == 'some title'
- // TODO: assert c.m(...) == ?
- '''
+ assert c.m('x') == ['x']
+ """
}
@Test // GROOVY-9763
void testTraitWithStaticMethodGenericsSC() {
- assertScript '''
+ assertScript shell, '''
trait T {
static <U> U m(Closure<U> callable) {
callable.call()
@@ -3129,7 +3086,7 @@ final class TraitASTTransformationTest {
}
class C implements T {
}
- @groovy.transform.CompileStatic
+ @CompileStatic
def test() {
C.m({ -> 'works' })
}
@@ -3139,7 +3096,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-8281
void testFinalFieldsDependency() {
- assertScript '''
+ assertScript shell, '''
trait MyTrait {
private final String foo = 'foo'
private final String foobar = foo.toUpperCase() + 'bar'
@@ -3154,7 +3111,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-8282
void testBareNamedArgumentPrivateMethodCall() {
- assertScript '''
+ assertScript shell, '''
trait BugReproduction {
def foo() {
bar(a: 1)
@@ -3172,7 +3129,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-8730
void testAbstractMethodsNotNeededInHelperClass() {
- assertScript '''
+ assertScript shell, '''
import static groovy.test.GroovyAssert.shouldFail
trait Foo { abstract bar() }
@@ -3191,7 +3148,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-8731
void testStaticMethodsIgnoredWhenExistingInstanceMethodsFound() {
- assertScript '''
+ assertScript shell, '''
trait StaticFooBarBaz {
static int foo() { 100 }
static int baz() { 200 }
@@ -3216,7 +3173,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-6716
void testAnonymousInnerClassStyleTraitUsage() {
- assertScript '''
+ assertScript shell, '''
interface Foo { def foo() }
def f = new Foo() { def foo() { 42 } }
assert f.foo() == 42
@@ -3233,7 +3190,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-8722
void testFinalModifierSupport() {
- assertScript '''
+ assertScript shell, '''
import static java.lang.reflect.Modifier.isFinal
trait Foo {
@@ -3270,7 +3227,7 @@ final class TraitASTTransformationTest {
}
'''
- assertScript '''
+ assertScript shell, '''
trait Startable {
final int start() { doStart() * 2 }
abstract int doStart()
@@ -3288,7 +3245,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-8880
void testTraitWithInitBlock() {
- assertScript '''
+ assertScript shell, '''
trait MyTrait {
final String first = 'FOO'
final String last = 'BAR'
@@ -3308,7 +3265,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-8880
void testTraitWithStaticInitBlock() {
- assertScript '''
+ assertScript shell, '''
trait MyTrait {
static final String first = 'FOO'
static final String last = 'BAR'
@@ -3326,7 +3283,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-8892
void testTraitWithStaticInitBlockWithAndWithoutProps() {
- assertScript '''
+ assertScript shell, '''
class Counter {
static int count = 0
}
@@ -3350,7 +3307,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-8954
void testTraitWithPropertyAlsoFromInterfaceSC() {
- assertScript '''
+ assertScript shell, '''
interface DomainProp {
boolean isNullable()
}
@@ -3361,7 +3318,7 @@ final class TraitASTTransformationTest {
boolean nullable = true
}
- @groovy.transform.CompileStatic
+ @CompileStatic
abstract class CustomProp extends OrderedProp implements Nullable { }
assert new CustomProp() {}
@@ -3370,9 +3327,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-8272
void testTraitAccessToInheritedStaticMethods() {
- assertScript '''
- import groovy.transform.CompileStatic
-
+ assertScript shell, '''
@CompileStatic
trait Foo {
static String go() {
@@ -3395,7 +3350,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-10312
void testTraitAccessToInheritedStaticMethods2() {
- assertScript '''
+ assertScript shell, '''
trait Foo {
static String staticMethod(String string) {
return string
@@ -3425,7 +3380,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-10312
void testTraitAccessToInheritedStaticMethods3() {
- assertScript '''
+ assertScript shell, '''
interface Foo {
public static final String BANG = '!'
}
@@ -3453,7 +3408,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-9386
void testTraitPropertyInitializedByTap() {
- assertScript '''
+ assertScript shell, '''
class P {
int prop
}
@@ -3472,7 +3427,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-9386
void testTraitPropertyInitializedByWith() {
- assertScript '''
+ assertScript shell, '''
class P {
int prop
}
@@ -3491,7 +3446,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-8000
void testTraitMultiLevelGenerics() {
- assertScript '''
+ assertScript shell, '''
trait TopTrait<X> { X getSomeThing() {}
}
trait MiddleTrait<Y> implements TopTrait<Y> {
@@ -3504,7 +3459,7 @@ final class TraitASTTransformationTest {
assert new Implementation().getSomeThing() == null
'''
- assertScript '''
+ assertScript shell, '''
trait TopTrait<T> { T getSomeThing() {}
}
trait MiddleTrait<T> implements TopTrait<T> {
@@ -3520,7 +3475,7 @@ final class TraitASTTransformationTest {
@Test // GROOVY-9660
void testAsGenericsParam() {
- assertScript '''
+ assertScript shell, '''
trait Data {}
class TestData implements Data {}
class AbstractData<D extends Data>{ D data }