diff --git a/src/main/java/spoon/reflect/visitor/DefaultJavaPrettyPrinter.java b/src/main/java/spoon/reflect/visitor/DefaultJavaPrettyPrinter.java index fe306d8fdac..826afbdca88 100644 --- a/src/main/java/spoon/reflect/visitor/DefaultJavaPrettyPrinter.java +++ b/src/main/java/spoon/reflect/visitor/DefaultJavaPrettyPrinter.java @@ -1908,7 +1908,7 @@ public void visitCtTypeReference(CtTypeReference ref) { write(ref.getSimpleName()); } else { if (ref.getDeclaringType() != null) { - if (!context.ignoreEnclosingClass && !ref.isLocalType()) { + if (!context.ignoreEnclosingClass && !ref.isLocalType() && !ref.getDeclaringType().isAnonymous()) { scan(ref.getDeclaringType()); write("."); } diff --git a/src/test/java/spoon/test/fieldaccesses/FieldAccessTest.java b/src/test/java/spoon/test/fieldaccesses/FieldAccessTest.java index a7bfa8bc576..363005bda32 100644 --- a/src/test/java/spoon/test/fieldaccesses/FieldAccessTest.java +++ b/src/test/java/spoon/test/fieldaccesses/FieldAccessTest.java @@ -3,17 +3,16 @@ import org.junit.Test; import spoon.Launcher; import spoon.reflect.code.CtArrayWrite; - import spoon.reflect.code.CtExpression; import spoon.reflect.code.CtFieldAccess; import spoon.reflect.code.CtFieldRead; import spoon.reflect.code.CtFieldWrite; import spoon.reflect.code.CtLambda; import spoon.reflect.code.CtLocalVariable; +import spoon.reflect.code.CtOperatorAssignment; import spoon.reflect.code.CtUnaryOperator; import spoon.reflect.code.CtVariableWrite; import spoon.reflect.code.UnaryOperatorKind; -import spoon.reflect.code.CtOperatorAssignment; import spoon.reflect.declaration.CtField; import spoon.reflect.declaration.CtMethod; import spoon.reflect.declaration.CtType; @@ -23,6 +22,8 @@ import spoon.reflect.visitor.filter.NameFilter; import spoon.reflect.visitor.filter.TypeFilter; import spoon.test.fieldaccesses.testclasses.Panini; +import spoon.test.fieldaccesses.testclasses.Pozole; +import spoon.testing.Assert; import java.util.List; import java.util.logging.Logger; @@ -31,6 +32,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import static spoon.testing.Assert.*; import static spoon.testing.utils.ModelUtils.build; import static spoon.testing.utils.ModelUtils.buildClass; @@ -264,4 +266,16 @@ public void testFieldWriteWithPlusEqualsOperation() throws Exception { assertEquals("array[0] += 0", arrays.get(0).getParent().toString()); assertEquals("array[0]", arrays.get(0).toString()); } + + @Test + public void testTypeDeclaredInAnonymousClass() throws Exception { + // contract: Type declared in an anonymous class shouldn't include the anonymous qualified name + // in its own fully qualified name. + final CtType aPozole = buildClass(Pozole.class); + final List elements = aPozole.getElements(new TypeFilter<>(CtField.class)); + + assertEquals(1, elements.size()); + assertTrue(elements.get(0).getType().getDeclaringType().isAnonymous()); + assertThat(elements.get(0)).isEqualTo("private final Test test = new Test();"); + } } diff --git a/src/test/java/spoon/test/fieldaccesses/testclasses/Pozole.java b/src/test/java/spoon/test/fieldaccesses/testclasses/Pozole.java new file mode 100644 index 00000000000..52a6ef67d09 --- /dev/null +++ b/src/test/java/spoon/test/fieldaccesses/testclasses/Pozole.java @@ -0,0 +1,24 @@ +package spoon.test.fieldaccesses.testclasses; + +public class Pozole { + interface Interface1 { + } + class Cook { + public Interface1 m() { + return null; + } + } + public Cook cook() { + return new Cook() { + @Override + public Interface1 m() { + return new Interface1() { + private final Test test = new Test(); + }; + } + + class Test implements Interface1 { + } + }; + } +}