1 package com.github.javaparser.ast.validator;
2 
3 import com.github.javaparser.JavaParser;
4 import com.github.javaparser.ParseResult;
5 import com.github.javaparser.ParseStart;
6 import com.github.javaparser.ParserConfiguration;
7 import com.github.javaparser.ast.CompilationUnit;
8 import com.github.javaparser.ast.body.Parameter;
9 import com.github.javaparser.ast.stmt.Statement;
10 import org.junit.Test;
11 
12 import static com.github.javaparser.ParseStart.*;
13 import static com.github.javaparser.ParseStart.COMPILATION_UNIT;
14 import static com.github.javaparser.ParserConfiguration.LanguageLevel.*;
15 import static com.github.javaparser.Providers.provider;
16 import static com.github.javaparser.ast.validator.Java1_1ValidatorTest.allModifiers;
17 import static com.github.javaparser.utils.TestUtils.assertNoProblems;
18 import static com.github.javaparser.utils.TestUtils.assertProblems;
19 
20 public class Java5ValidatorTest {
21     public static final JavaParser javaParser = new JavaParser(new ParserConfiguration().setLanguageLevel(JAVA_5));
22 
23     @Test
genericsWithoutDiamond()24     public void genericsWithoutDiamond() {
25         ParseResult<CompilationUnit> result = javaParser.parse(COMPILATION_UNIT, provider("class X<A>{List<String> b = new ArrayList<>();}"));
26         assertProblems(result, "(line 1,col 33) The diamond operator is not supported.");
27     }
28 
29     @Test
topAnnotationDeclaration()30     public void topAnnotationDeclaration() {
31         ParseResult<CompilationUnit> result = javaParser.parse(COMPILATION_UNIT, provider(allModifiers + "@interface X{}"));
32         assertProblems(result,
33                 "(line 1,col 1) Can have only one of 'public', 'protected', 'private'.",
34                 "(line 1,col 1) Can have only one of 'final', 'abstract'.",
35                 "(line 1,col 1) Can have only one of 'native', 'strictfp'.",
36                 "(line 1,col 1) 'transient' is not allowed here.",
37                 "(line 1,col 1) 'volatile' is not allowed here.",
38                 "(line 1,col 1) 'synchronized' is not allowed here.",
39                 "(line 1,col 1) 'default' is not allowed here.",
40                 "(line 1,col 1) 'native' is not allowed here.",
41                 "(line 1,col 1) 'transitive' is not allowed here.",
42                 "(line 1,col 1) 'static' is not allowed here.",
43                 "(line 1,col 1) 'final' is not allowed here.",
44                 "(line 1,col 1) 'private' is not allowed here.",
45                 "(line 1,col 1) 'protected' is not allowed here."
46         );
47     }
48 
49     @Test
nestedAnnotationDeclaration()50     public void nestedAnnotationDeclaration() {
51         ParseResult<CompilationUnit> result = javaParser.parse(COMPILATION_UNIT, provider("class X{" + allModifiers + "@interface I{}}"));
52         assertProblems(result,
53                 "(line 1,col 9) Can have only one of 'public', 'protected', 'private'.",
54                 "(line 1,col 9) Can have only one of 'final', 'abstract'.",
55                 "(line 1,col 9) Can have only one of 'native', 'strictfp'.",
56                 "(line 1,col 9) 'transient' is not allowed here.",
57                 "(line 1,col 9) 'volatile' is not allowed here.",
58                 "(line 1,col 9) 'default' is not allowed here.",
59                 "(line 1,col 9) 'final' is not allowed here.",
60                 "(line 1,col 9) 'synchronized' is not allowed here.",
61                 "(line 1,col 9) 'native' is not allowed here.",
62                 "(line 1,col 9) 'transitive' is not allowed here."
63         );
64     }
65 
66     @Test
annotationMember()67     public void annotationMember() {
68         ParseResult<CompilationUnit> result = javaParser.parse(COMPILATION_UNIT, provider("@interface X{" + allModifiers + "int x();}"));
69         assertProblems(result,
70                 "(line 1,col 14) Can have only one of 'public', 'protected', 'private'.",
71                 "(line 1,col 14) Can have only one of 'final', 'abstract'.",
72                 "(line 1,col 14) Can have only one of 'native', 'strictfp'.",
73                 "(line 1,col 14) 'transient' is not allowed here.",
74                 "(line 1,col 14) 'volatile' is not allowed here.",
75                 "(line 1,col 14) 'final' is not allowed here.",
76                 "(line 1,col 14) 'synchronized' is not allowed here.",
77                 "(line 1,col 14) 'default' is not allowed here.",
78                 "(line 1,col 14) 'native' is not allowed here.",
79                 "(line 1,col 14) 'protected' is not allowed here.",
80                 "(line 1,col 14) 'private' is not allowed here.",
81                 "(line 1,col 14) 'strictfp' is not allowed here.",
82                 "(line 1,col 14) 'static' is not allowed here.",
83                 "(line 1,col 14) 'transitive' is not allowed here."
84         );
85     }
86 
87     @Test
topEnum()88     public void topEnum() {
89         ParseResult<CompilationUnit> result = javaParser.parse(COMPILATION_UNIT, provider(allModifiers + "enum X{}"));
90         assertProblems(result,
91                 "(line 1,col 1) Can have only one of 'public', 'protected', 'private'.",
92                 "(line 1,col 1) Can have only one of 'final', 'abstract'.",
93                 "(line 1,col 1) Can have only one of 'native', 'strictfp'.",
94                 "(line 1,col 1) 'transient' is not allowed here.",
95                 "(line 1,col 1) 'volatile' is not allowed here.",
96                 "(line 1,col 1) 'synchronized' is not allowed here.",
97                 "(line 1,col 1) 'default' is not allowed here.",
98                 "(line 1,col 1) 'native' is not allowed here.",
99                 "(line 1,col 1) 'transitive' is not allowed here.",
100                 "(line 1,col 1) 'static' is not allowed here.",
101                 "(line 1,col 1) 'abstract' is not allowed here.",
102                 "(line 1,col 1) 'final' is not allowed here.",
103                 "(line 1,col 1) 'private' is not allowed here.",
104                 "(line 1,col 1) 'protected' is not allowed here."
105         );
106     }
107 
108     @Test
nestedEnum()109     public void nestedEnum() {
110         ParseResult<CompilationUnit> result = javaParser.parse(COMPILATION_UNIT, provider("class X{" + allModifiers + "enum I{}}"));
111         assertProblems(result,
112                 "(line 1,col 9) Can have only one of 'public', 'protected', 'private'.",
113                 "(line 1,col 9) Can have only one of 'final', 'abstract'.",
114                 "(line 1,col 9) Can have only one of 'native', 'strictfp'.",
115                 "(line 1,col 9) 'transient' is not allowed here.",
116                 "(line 1,col 9) 'volatile' is not allowed here.",
117                 "(line 1,col 9) 'default' is not allowed here.",
118                 "(line 1,col 9) 'abstract' is not allowed here.",
119                 "(line 1,col 9) 'final' is not allowed here.",
120                 "(line 1,col 9) 'synchronized' is not allowed here.",
121                 "(line 1,col 9) 'native' is not allowed here.",
122                 "(line 1,col 9) 'transitive' is not allowed here."
123         );
124     }
125 
126     @Test
varargs()127     public void varargs() {
128         ParseResult<Parameter> result = javaParser.parse(PARAMETER, provider("String... x"));
129         assertNoProblems(result);
130     }
131 
132     @Test
foreach()133     public void foreach() {
134         ParseResult<Statement> result = javaParser.parse(STATEMENT, provider("for(X x: xs){}"));
135         assertNoProblems(result);
136     }
137 
138     @Test
staticImport()139     public void staticImport() {
140         ParseResult<CompilationUnit> result = javaParser.parse(COMPILATION_UNIT, provider("import static x;import static x.*;import x.X;import x.*;"));
141         assertNoProblems(result);
142     }
143 
144     @Test
noPrimitiveTypeArguments()145     public void noPrimitiveTypeArguments() {
146         ParseResult<CompilationUnit> result = javaParser.parse(COMPILATION_UNIT, provider("class X extends Y<int> {}"));
147         assertProblems(result, "(line 1,col 17) Type arguments may not be primitive.");
148     }
149 
150     @Test
enumAllowedAsIdentifier()151     public void enumAllowedAsIdentifier() {
152         ParseResult<Statement> result = javaParser.parse(STATEMENT, provider("int enum;"));
153         assertProblems(result, "(line 1,col 5) 'enum' cannot be used as an identifier as it is a keyword.");
154     }
155 }
156