/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ /* * This file is to test the JavaCC java grammer, whether we can parse specific java constructs without * throwing a syntax error. */ class Superclass { public Superclass() { } public <V> Superclass(Class<V> clazz) { } <T> T doStuff(T s) { return s; } } class Outer { Outer() { System.out.println("Outer constructor"); } class Inner { Inner() { System.out.println("Inner constructor"); } } } class Child extends Outer.Inner { Child(Outer o) { o.super(); System.out.println("Child constructor"); } } public class ParserCornerCases extends Superclass { public ParserCornerCases() { super(); } public ParserCornerCases(int a) { <Integer> this(a, 2); } public <W> ParserCornerCases(int a, int b) { <String> super(String.class); } public ParserCornerCases(String title) { this(); } public strictfp void testGeneric() { String o = super.<String> doStuff("foo"); String v = this.<String> thisGeneric("bar"); } <X> X thisGeneric(X x) { return x; } Class getByteArrayClass() { return (byte[].class); } public void bitwiseOperator() { if ((modifiers & InputEvent.SHIFT_DOWN_MASK) != 0 ) { buf.append("shift "); } } } /** * Test case from http://jira.codehaus.org/browse/MPMD-126 */ class PmdTestParent { public PmdTestParent(Object obj) {} } class PmdTestChild extends PmdTestParent { public PmdTestChild() { // the following line produced a parsing problem super(new Object() { public Object create() { Object memoryMonitor = null; if (memoryMonitor == null) { memoryMonitor = new Object(); } return memoryMonitor; } }); } } /* * Test cases for bug #1020 Parsing Error */ class SimpleBean { String name; } class SimpleBeanUser { SimpleBeanUser(SimpleBean o) { } SimpleBeanUser() { this(new SimpleBean() {{ name = "test"; }}); } } class SimpleBeanUser2 extends SimpleBeanUser { SimpleBeanUser2() { super(new SimpleBean(){{ name = "test2"; }}); } } /* * Test case for bug #1007 Parse Exception with annotation */ class TestParseAnnototation { void parse() { for (@SuppressWarnings("unchecked") int i = 0; i < 10; i++) { } for (@SuppressWarnings("unchecked") Iterator it = Fachabteilung.values().iterator(); it.hasNext();) { } List<String> l = new ArrayList<String>(); for (@SuppressWarnings("unchecked") String s : l) { } } } /* * Test case for bug #956 PMD Parse Exception */ class FooBlock {} class MyFoo { MyFoo(FooBlock b) { } } class Foo extends MyFoo { public Foo() { super(new FooBlock() { public Object valueOf(Object object) { String fish = "salmon"; return fish; } }); } } /* * Verifies #1122 parse error at class.super */ class SuperTest { /** * @throws UnsupportedOperationException */ public Iterator<E> iterator() { if (this.mods.contains(Modification.Iterator)) { return new Iterator<E>() { Iterator<E> wrapped = ImmutableSet.super.iterator(); public boolean hasNext() { return this.wrapped.hasNext(); } public E next() { return this.wrapped.next(); } public void remove() { if (ImmutableSet.this.mods.contains(Modification.RemoveIter)) { this.wrapped.remove(); } throw new UnsupportedOperationException(); } }; } throw new UnsupportedOperationException(); } } /* * Test case for #1310 PMD cannot parse int.class */ class ClazzPropertyOfPrimitiveTypes { public void test() { Class<?> c = int.class; c = short.class; c = long.class; c = float.class; c = double.class; c = char.class; c = byte.class; c = void.class; if (c == int.class || c == short.class || c == long.class || c == double.class || c == char.class || c == byte.class || c == void.class) { } if ("a".equals((int.class).getName())) { } if ((Integer.class.equals(clazz)) || (int.class.equals(clazz))) { } } }