Skip to content

Commit

Permalink
Fix for #1361: trait A extends B indicates super trait (aka interface)
Browse files Browse the repository at this point in the history
  • Loading branch information
eric-milles committed May 12, 2022
1 parent dfe164d commit 5c87c7b
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2009-2021 the original author or authors.
* Copyright 2009-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -252,8 +252,67 @@ public void testProperty13() {
assertExprType(source, "number", "java.lang.Number");
}

@Test // GROOVY-9255
@Test
public void testProperty14() {
//@formatter:off
String source =
"trait A {\n" +
" Number number\n" +
"}\n" +
"trait B extends A {\n" +
"}\n" +
"class C implements B {\n" +
" def n = number\n" +
"}\n";
//@formatter:on

assertDeclType(source, "number", "A");
assertExprType(source, "number", "java.lang.Number");
}

@Test // https://github.com/groovy/groovy-eclipse/issues/1361
public void testProperty15() {
createUnit("T",
"trait A {\n" +
" Number number\n" +
"}\n" +
"trait B extends A {\n" +
"}\n");

//@formatter:off
String source =
"class C implements B {\n" +
" def n = number\n" +
"}\n";
//@formatter:on

assertDeclType(source, "number", "A");
assertExprType(source, "number", "java.lang.Number");
}

@Test // https://github.com/groovy/groovy-eclipse/issues/1361
public void testProperty16() {
createUnit("A",
"trait A {\n" +
" Number number\n" +
"}\n");
createUnit("B",
"trait B extends A {\n" +
"}\n");

//@formatter:off
String source =
"class C implements B {\n" +
" def n = number\n" +
"}\n";
//@formatter:on

assertDeclType(source, "number", "A");
assertExprType(source, "number", "java.lang.Number");
}

@Test // GROOVY-9255
public void testProperty17() {
//@formatter:off
String source =
"trait T {\n" +
Expand All @@ -271,7 +330,7 @@ public void testProperty14() {
}

@Test
public void testProperty15() {
public void testProperty18() {
//@formatter:off
String source =
"trait T {\n" +
Expand All @@ -289,7 +348,7 @@ public void testProperty15() {
}

@Test
public void testProperty16() {
public void testProperty19() {
createUnit("T",
"trait T {\n" +
" Number number\n" +
Expand All @@ -309,7 +368,7 @@ public void testProperty16() {
}

@Test
public void testProperty17() {
public void testProperty20() {
createUnit("T",
"trait T {\n" +
" Number number\n" +
Expand All @@ -329,7 +388,7 @@ public void testProperty17() {
}

@Test
public void testProperty18() {
public void testProperty21() {
createUnit("T",
"trait T {\n" +
" Number number\n" +
Expand All @@ -349,7 +408,7 @@ public void testProperty18() {
}

@Test
public void testProperty19() {
public void testProperty22() {
createUnit("T",
"trait T {\n" +
" Number number\n" +
Expand All @@ -369,7 +428,7 @@ public void testProperty19() {
}

@Test
public void testProperty20() {
public void testProperty23() {
createUnit("T",
"trait T {\n" +
" Number[] numbers\n" +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1626,14 +1626,19 @@ private AbstractMethodDeclaration createMethodDeclaration(ClassNode classNode, M

//----------------------------------------------------------------------

private void configureSuperClass(TypeDeclaration typeDeclaration, ClassNode superclass) {
if (!(superclass.getStart() == 0 && superclass.equals(ClassHelper.OBJECT_TYPE))) {
typeDeclaration.superclass = createTypeReferenceForClassNode(superclass);
private void configureSuperClass(TypeDeclaration typeDeclaration, ClassNode superClass) {
if (!(superClass.getStart() == 0 && superClass.equals(ClassHelper.OBJECT_TYPE))) {
typeDeclaration.superclass = createTypeReferenceForClassNode(superClass);
}
}

private void configureSuperInterfaces(TypeDeclaration typeDeclaration, ClassNode classNode) {
ClassNode[] interfaces = classNode.getInterfaces();
ClassNode superClass = classNode.getSuperClass();
if (superClass != null && !superClass.equals(ClassHelper.OBJECT_TYPE) && isTrait(classNode)) {
interfaces = Arrays.copyOf(interfaces, interfaces.length + 1);
interfaces[interfaces.length - 1] = superClass; // super trait
}
if (interfaces != null && interfaces.length > 0) {
typeDeclaration.superInterfaces = createTypeReferencesForClassNodes(interfaces);
} else {
Expand Down

0 comments on commit 5c87c7b

Please sign in to comment.