aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/resources/com/puppycrawl/tools/checkstyle/grammars/java.g14
-rw-r--r--src/test/java/com/puppycrawl/tools/checkstyle/grammars/java8/AnnotationTest.java150
-rw-r--r--src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest1.java14
-rw-r--r--src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest10.java23
-rw-r--r--src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest2.java15
-rw-r--r--src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest3.java18
-rw-r--r--src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest4.java17
-rw-r--r--src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest5.java16
-rw-r--r--src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest6.java17
-rw-r--r--src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest7.java19
-rw-r--r--src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest8.java34
-rw-r--r--src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest9.java15
12 files changed, 348 insertions, 4 deletions
diff --git a/src/main/resources/com/puppycrawl/tools/checkstyle/grammars/java.g b/src/main/resources/com/puppycrawl/tools/checkstyle/grammars/java.g
index c4b51b269..2eebc040c 100644
--- a/src/main/resources/com/puppycrawl/tools/checkstyle/grammars/java.g
+++ b/src/main/resources/com/puppycrawl/tools/checkstyle/grammars/java.g
@@ -259,7 +259,9 @@ classTypeSpec[boolean addImagNode]
;
classOrInterfaceType[boolean addImagNode]
- : IDENT (options{warnWhenFollowAmbig=false;}: typeArguments[addImagNode])?
+ : ({LA(1) == AT}? annotations
+ | )
+ IDENT (options{warnWhenFollowAmbig=false;}: typeArguments[addImagNode])?
(options{greedy=true; }: // match as many as possible
DOT^
IDENT (options{warnWhenFollowAmbig=false;}: typeArguments[addImagNode])?
@@ -268,9 +270,11 @@ classOrInterfaceType[boolean addImagNode]
// A generic type argument is a class type, a possibly bounded wildcard type or a built-in type array
typeArgument[boolean addImagNode]
-: ( classTypeSpec[addImagNode]
+: ( ({LA(1) == AT}? annotations
+ | ) (
+ classTypeSpec[addImagNode]
| builtInTypeArraySpec[addImagNode]
- | wildcardType[addImagNode]
+ | wildcardType[addImagNode])
)
{#typeArgument = #(#[TYPE_ARGUMENT,"TYPE_ARGUMENT"], #typeArgument);}
;
@@ -912,7 +916,8 @@ ctorHead
// This is a list of exception classes that the method is declared to throw
throwsClause
- : "throws"^ identifier ( COMMA identifier )*
+ : "throws"^ ({LA(1) == AT}? annotations
+ | ) identifier ( COMMA identifier )*
;
@@ -1397,6 +1402,7 @@ postfixExpression
)
| "class"
| newExpression
+ | annotations
)
//Java 8 method references. For example: List<Integer> numbers = Arrays.asList(1,2,3,4,5,6); numbers.forEach(System.out::println);
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/grammars/java8/AnnotationTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/grammars/java8/AnnotationTest.java
new file mode 100644
index 000000000..a68537758
--- /dev/null
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/grammars/java8/AnnotationTest.java
@@ -0,0 +1,150 @@
+////////////////////////////////////////////////////////////////////////////////
+// checkstyle: Checks Java source code for adherence to a set of rules.
+// Copyright (C) 2001-2014 Oliver Burn
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+////////////////////////////////////////////////////////////////////////////////
+package com.puppycrawl.tools.checkstyle.grammars.java8;
+
+import org.junit.Test;
+
+import com.puppycrawl.tools.checkstyle.BaseCheckTestSupport;
+import com.puppycrawl.tools.checkstyle.DefaultConfiguration;
+import com.puppycrawl.tools.checkstyle.checks.naming.MemberNameCheck;
+
+public class AnnotationTest extends BaseCheckTestSupport
+{
+
+ @Test
+ public void testSimpleTypeAnnotation()
+ throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(MemberNameCheck.class);
+ final String[] expected = {};
+ verify(checkConfig,
+ getPath("grammars/java8/InputAnnotationsTest1.java"), expected);
+
+ }
+
+ @Test
+ public void testAnnotationOnClass()
+ throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(MemberNameCheck.class);
+ final String[] expected = {};
+ verify(checkConfig,
+ getPath("grammars/java8/InputAnnotationsTest2.java"), expected);
+
+ }
+
+ @Test
+ public void testClassCastTypeAnnotation()
+ throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(MemberNameCheck.class);
+ final String[] expected = {};
+ verify(checkConfig,
+ getPath("grammars/java8/InputAnnotationsTest3.java"), expected);
+
+ }
+
+ @Test
+ public void testMethodParametersTypeAnnotation()
+ throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(MemberNameCheck.class);
+ final String[] expected = {};
+ verify(checkConfig,
+ getPath("grammars/java8/InputAnnotationsTest4.java"), expected);
+
+ }
+
+ @Test
+ public void testAnnotationInThrows()
+ throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(MemberNameCheck.class);
+ final String[] expected = {};
+ verify(checkConfig,
+ getPath("grammars/java8/InputAnnotationsTest5.java"), expected);
+
+ }
+
+ @Test
+ public void testAnnotationInGeneric()
+ throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(MemberNameCheck.class);
+ final String[] expected = {};
+ verify(checkConfig,
+ getPath("grammars/java8/InputAnnotationsTest6.java"), expected);
+
+ }
+
+ @Test
+ public void testAnnotationOnConstructorCall()
+ throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(MemberNameCheck.class);
+ final String[] expected = {};
+ verify(checkConfig,
+ getPath("grammars/java8/InputAnnotationsTest7.java"), expected);
+
+ }
+
+ @Test
+ public void testAnnotationNestedCall()
+ throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(MemberNameCheck.class);
+ final String[] expected = {};
+ verify(checkConfig,
+ getPath("grammars/java8/InputAnnotationsTest8.java"), expected);
+
+ }
+
+ @Test
+ public void testAnnotationOnWildcards()
+ throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(MemberNameCheck.class);
+ final String[] expected = {};
+ verify(checkConfig,
+ getPath("grammars/java8/InputAnnotationsTest9.java"), expected);
+
+ }
+
+ @Test
+ public void testAnnotationInCatchParameters()
+ throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(MemberNameCheck.class);
+ final String[] expected = {};
+ verify(checkConfig,
+ getPath("grammars/java8/InputAnnotationsTest10.java"), expected);
+
+ }
+
+}
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest1.java b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest1.java
new file mode 100644
index 000000000..e17bd3e81
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest1.java
@@ -0,0 +1,14 @@
+package com.puppycrawl.tools.checkstyle.grammars.java8;
+
+import java.util.List;
+
+public class InputAnnotationsTest1 {
+
+ @NonNull
+ List<Integer> numbers;
+
+ @interface NonNull {
+
+ }
+
+} \ No newline at end of file
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest10.java b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest10.java
new file mode 100644
index 000000000..0783b13c1
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest10.java
@@ -0,0 +1,23 @@
+package com.puppycrawl.tools.checkstyle.grammars.java8;
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+public class InputAnnotationsTest10 {
+ public static Object methodName(Object str) {
+ try {
+ return null;
+
+ } catch (@MyAnnotation1(name = "ABC", version = 1) Exception ex) {
+ return "";
+ }
+ }
+
+ @Target(ElementType.TYPE_USE)
+ @interface MyAnnotation1 {
+
+ String name();
+ int version();
+ }
+} \ No newline at end of file
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest2.java b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest2.java
new file mode 100644
index 000000000..672f0f1f0
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest2.java
@@ -0,0 +1,15 @@
+package com.puppycrawl.tools.checkstyle.grammars.java8;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+@Schedule
+public class InputAnnotationsTest2 {
+
+
+}
+
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@interface Schedule {
+
+} \ No newline at end of file
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest3.java b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest3.java
new file mode 100644
index 000000000..fbd9e8b0a
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest3.java
@@ -0,0 +1,18 @@
+package com.puppycrawl.tools.checkstyle.grammars.java8;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+
+
+public class InputAnnotationsTest3 {
+
+ public static void methodName(Object str) {
+ String myString = (@NonNull String) str;
+ }
+
+ @Target(ElementType.TYPE_USE)
+ @interface NonNull {
+ }
+
+} \ No newline at end of file
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest4.java b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest4.java
new file mode 100644
index 000000000..fab0f7b45
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest4.java
@@ -0,0 +1,17 @@
+package com.puppycrawl.tools.checkstyle.grammars.java8;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+
+public class InputAnnotationsTest4 {
+
+ public static void methodName(@NotNull String args) {
+
+ }
+
+ @Target(ElementType.TYPE_USE)
+ @interface NotNull {
+
+ }
+} \ No newline at end of file
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest5.java b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest5.java
new file mode 100644
index 000000000..fc0393109
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest5.java
@@ -0,0 +1,16 @@
+package com.puppycrawl.tools.checkstyle.grammars.java8;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+
+public class InputAnnotationsTest5 {
+
+
+ void monitorTemperature() throws @Critical Exception { }
+
+ @Target(ElementType.TYPE_USE)
+ @interface Critical {
+
+ }
+} \ No newline at end of file
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest6.java b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest6.java
new file mode 100644
index 000000000..30f3e241f
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest6.java
@@ -0,0 +1,17 @@
+package com.puppycrawl.tools.checkstyle.grammars.java8;
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+import java.util.List;
+
+public class InputAnnotationsTest6 {
+
+ abstract class UnmodifiableList<T> implements @Readonly List<@Readonly T> {
+ }
+
+ @Target(ElementType.TYPE_USE)
+ @interface Readonly {
+
+ }
+}
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest7.java b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest7.java
new file mode 100644
index 000000000..6c26e9315
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest7.java
@@ -0,0 +1,19 @@
+package com.puppycrawl.tools.checkstyle.grammars.java8;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+import java.util.List;
+
+public class InputAnnotationsTest7 {
+
+ public static void main(String[] args) {
+ Object object = new @Interned Object();
+
+ }
+
+ @Target(ElementType.TYPE_USE)
+ @interface Interned {
+
+ }
+
+} \ No newline at end of file
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest8.java b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest8.java
new file mode 100644
index 000000000..c882d1434
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest8.java
@@ -0,0 +1,34 @@
+package com.puppycrawl.tools.checkstyle.grammars.java8;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+import java.util.Map;
+
+public class InputAnnotationsTest8 {
+
+ public void main(String[] args) {
+ Map.@NotNull Entry entry;
+ MyObject myObject = new MyObject();
+ myObject.<@NotBlank String>myMethod();
+ myObject.new @NotNull MyObject2();
+
+ }
+
+ @Target(ElementType.TYPE_USE)
+ @interface NotNull {
+
+ }
+
+ @Target(ElementType.TYPE_USE)
+ @interface NotBlank {
+
+ }
+
+ class MyObject{
+
+ public void myMethod(){};
+
+ class MyObject2{}
+ }
+
+} \ No newline at end of file
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest9.java b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest9.java
new file mode 100644
index 000000000..f91a5532f
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/java8/InputAnnotationsTest9.java
@@ -0,0 +1,15 @@
+package com.puppycrawl.tools.checkstyle.grammars.java8;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+import java.util.List;
+
+public class InputAnnotationsTest9 {
+ public static <T> void methodName(Object str) {
+ List<@Immutable ? extends Comparable<T>> unchangeable;
+ }
+
+ @Target(ElementType.TYPE_USE)
+ @interface Immutable {
+ }
+} \ No newline at end of file