175565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti/* 275565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * Copyright (C) 2007-2010 Júlio Vilmar Gesser. 375565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * Copyright (C) 2011, 2013-2016 The JavaParser Team. 475565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * 575565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * This file is part of JavaParser. 675565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * 775565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * JavaParser can be used either under the terms of 875565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * a) the GNU Lesser General Public License as published by 975565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * the Free Software Foundation, either version 3 of the License, or 1075565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * (at your option) any later version. 1175565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * b) the terms of the Apache License 1275565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * 1375565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * You should have received a copy of both licenses in LICENCE.LGPL and 1475565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * LICENCE.APACHE. Please refer to those files for details. 1575565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * 1675565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * JavaParser is distributed in the hope that it will be useful, 1775565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * but WITHOUT ANY WARRANTY; without even the implied warranty of 1875565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1975565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * GNU Lesser General Public License for more details. 2075565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti */ 2175565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti 22140ec181289990affd436cc4320c9abb59314f8aFederico Tomassettipackage com.github.javaparser.printer.lexicalpreservation.transformations.ast.body; 2375565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti 2475565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassettiimport com.github.javaparser.ast.Modifier; 251ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassettiimport com.github.javaparser.ast.NodeList; 2675565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassettiimport com.github.javaparser.ast.body.AnnotationMemberDeclaration; 27907aca107a26ba902127213aa530261d4d40ea77Federico Tomassettiimport com.github.javaparser.ast.expr.IntegerLiteralExpr; 281ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassettiimport com.github.javaparser.ast.expr.Name; 291ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassettiimport com.github.javaparser.ast.expr.NormalAnnotationExpr; 30140ec181289990affd436cc4320c9abb59314f8aFederico Tomassettiimport com.github.javaparser.printer.lexicalpreservation.AbstractLexicalPreservingTest; 3175565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassettiimport org.junit.Test; 3275565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti 3375565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassettiimport java.util.EnumSet; 3475565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti 35323364614fbfb579d4d2e82a7f80414d2c11944bFederico Tomassettiimport static com.github.javaparser.utils.Utils.EOL; 3675565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassettiimport static org.junit.Assert.assertEquals; 37530169d1045593c598adb7ab63334c62de2fa141Federico Tomassettiimport static org.junit.Assert.assertTrue; 3875565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti 3975565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti/** 4075565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * Transforming AnnotationMemberDeclaration and verifying the LexicalPreservation works as expected. 4175565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti */ 4275565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassettipublic class AnnotationMemberDeclarationTransformationsTest extends AbstractLexicalPreservingTest { 4375565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti 44c5c19b4b5f1a3c3b4ed52001f0cd28225e211ca7Federico Tomassetti protected AnnotationMemberDeclaration consider(String code) { 4575565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti considerCode("@interface AD { " + code + " }"); 46872ea1cf8fce25fc8ad7390eb8779ad878f2f1d4Danny van Bruggen return cu.getAnnotationDeclarationByName("AD").get().getMember(0).asAnnotationMemberDeclaration(); 4775565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti } 4875565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti 49907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti // Name 50907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti 5175565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti @Test 521016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen public void changingName() { 5375565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti AnnotationMemberDeclaration md = consider("int foo();"); 5475565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti md.setName("bar"); 5575565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti assertTransformedToString("int bar();", md); 5675565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti } 5775565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti 5875565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti // Type 5975565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti 60907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti @Test 611016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen public void changingType() { 62907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti AnnotationMemberDeclaration md = consider("int foo();"); 63907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti md.setType("String"); 64907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti assertTransformedToString("String foo();", md); 65907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti } 66907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti 6775565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti // Modifiers 6875565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti 69907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti @Test 701016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen public void addingModifiers() { 71907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti AnnotationMemberDeclaration md = consider("int foo();"); 72907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti md.setModifiers(EnumSet.of(Modifier.PUBLIC)); 73907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti assertTransformedToString("public int foo();", md); 74907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti } 75907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti 76907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti @Test 771016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen public void removingModifiers() { 78907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti AnnotationMemberDeclaration md = consider("public int foo();"); 79907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti md.setModifiers(EnumSet.noneOf(Modifier.class)); 80907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti assertTransformedToString("int foo();", md); 81907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti } 82907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti 83907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti @Test 841016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen public void replacingModifiers() { 85907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti AnnotationMemberDeclaration md = consider("public int foo();"); 86907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti md.setModifiers(EnumSet.of(Modifier.PROTECTED)); 87907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti assertTransformedToString("protected int foo();", md); 88907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti } 89907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti 9075565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti // Default value 9175565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti 92907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti @Test 931016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen public void addingDefaultValue() { 94907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti AnnotationMemberDeclaration md = consider("int foo();"); 95907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti md.setDefaultValue(new IntegerLiteralExpr("10")); 96907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti assertTransformedToString("int foo() default 10;", md); 97907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti } 98907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti 99907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti @Test 1001016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen public void removingDefaultValue() { 101907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti AnnotationMemberDeclaration md = consider("int foo() default 10;"); 102907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti assertEquals(true, md.getDefaultValue().get().remove()); 103907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti assertTransformedToString("int foo();", md); 104907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti } 105907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti 106907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti @Test 1071016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen public void replacingDefaultValue() { 108907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti AnnotationMemberDeclaration md = consider("int foo() default 10;"); 109907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti md.setDefaultValue(new IntegerLiteralExpr("11")); 110907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti assertTransformedToString("int foo() default 11;", md); 111907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti } 112907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti 11375565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti // Annotations 11475565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti 1151ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti @Test 1161016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen public void addingAnnotation() { 1171ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti AnnotationMemberDeclaration it = consider("int foo();"); 1181ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti it.addAnnotation("myAnno"); 1191016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen assertTransformedToString("@myAnno()" + EOL + "int foo();", it); 1201ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti } 1211ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti 1221ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti @Test 1231016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen public void addingTwoAnnotations() { 1241016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen AnnotationMemberDeclaration it = consider("int foo();"); 1251016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen it.addAnnotation("myAnno"); 1261016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen it.addAnnotation("myAnno2"); 1271016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen assertTransformedToString("@myAnno()" + EOL + "@myAnno2()" + EOL + "int foo();", it); 1281016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen } 1291016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen 1301016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen @Test 1311016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen public void removingAnnotationOnSomeLine() { 1321ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti AnnotationMemberDeclaration it = consider("@myAnno int foo();"); 1331ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti it.getAnnotations().remove(0); 1341ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti assertTransformedToString("int foo();", it); 1351ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti } 1361ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti 1371ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti @Test 1381016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen public void removingAnnotationOnPrevLine() { 139323364614fbfb579d4d2e82a7f80414d2c11944bFederico Tomassetti AnnotationMemberDeclaration it = consider("@myAnno" + EOL + "int foo();"); 1401ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti it.getAnnotations().remove(0); 1411ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti assertTransformedToString("int foo();", it); 1421ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti } 1431ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti 1441ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti @Test 1451016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen public void replacingAnnotation() { 1461ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti AnnotationMemberDeclaration it = consider("@myAnno int foo();"); 1471ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti it.getAnnotations().set(0, new NormalAnnotationExpr(new Name("myOtherAnno"), new NodeList<>())); 148ed7f4a6532043b5ac8c8da55923fbd91f72ec574Federico Tomassetti assertTransformedToString("@myOtherAnno() int foo();", it); 1491ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti } 1501ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti 15175565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti // Javadoc 15275565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti 153530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti @Test 1541016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen public void addingJavadoc() { 155530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti AnnotationMemberDeclaration it = consider("int foo();"); 156ec6b8a24af3e65b6d869ee96d00daca12f7247feFederico Tomassetti it.setJavadocComment("Cool this annotation!"); 1578e1dfeb3c2c1c651b5b14bd5c5ff155ea8e30bd5Danny van Bruggen assertTransformedToString("@interface AD { /** Cool this annotation!*/" + EOL + 158530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti "int foo(); }", it.getParentNode().get()); 159530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti } 160530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti 161530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti @Test 1621016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen public void removingJavadoc() { 1638e1dfeb3c2c1c651b5b14bd5c5ff155ea8e30bd5Danny van Bruggen AnnotationMemberDeclaration it = consider("/** Cool this annotation!*/ int foo();"); 164f75eb59f8930d3d53864470e115772345f40363cFederico Tomassetti assertTrue(it.getJavadocComment().get().remove()); 165530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti assertTransformedToString("@interface AD { int foo(); }", it.getParentNode().get()); 166530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti } 167530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti 168530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti @Test 1691016ea6bead76127375a4c7b98c82b28fc133f0bDanny van Bruggen public void replacingJavadoc() { 1708e1dfeb3c2c1c651b5b14bd5c5ff155ea8e30bd5Danny van Bruggen AnnotationMemberDeclaration it = consider("/** Cool this annotation!*/ int foo();"); 171ec6b8a24af3e65b6d869ee96d00daca12f7247feFederico Tomassetti it.setJavadocComment("Super extra cool this annotation!!!"); 1728e1dfeb3c2c1c651b5b14bd5c5ff155ea8e30bd5Danny van Bruggen assertTransformedToString("@interface AD { /** Super extra cool this annotation!!!*/ int foo(); }", it.getParentNode().get()); 173530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti } 174530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti 17575565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti} 176