diff --git a/build.xml b/build.xml
index d3a08b1..42b17e0 100644
--- a/build.xml
+++ b/build.xml
@@ -103,6 +103,7 @@
           <include name="fop*.jar"/>
         </fileset>
       </classpath>
+      <compilerarg value="-Xlint"/>
     </javac>
   </target>
   
diff --git a/test/java/org/apache/fop/render/pdf/DocumentRootModifierTestCase.java b/test/java/org/apache/fop/render/pdf/DocumentRootModifierTestCase.java
index 4ce82ec..c0eacea 100644
--- a/test/java/org/apache/fop/render/pdf/DocumentRootModifierTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/DocumentRootModifierTestCase.java
@@ -53,7 +53,7 @@
         pdfDoc.makeStructTreeRoot(null);
         PDFStructTreeRoot structTreeRoot = pdfDoc.getRoot().getStructTreeRoot();
         PDFDictionary rootBaseRoleMap = new PDFDictionary();
-        PDFBoxAdapter adapter = new PDFBoxAdapter(page, new HashMap(),  new HashMap<Integer, PDFArray>());
+        PDFBoxAdapter adapter = new PDFBoxAdapter(page, new HashMap<>(),  new HashMap<Integer, PDFArray>());
         DocumentRootModifier modifier = new DocumentRootModifier(adapter, pdfDoc);
         COSDictionary root = new COSDictionary();
         COSDictionary mapRole = new COSDictionary();
@@ -83,7 +83,7 @@
 
 
         PDDocument doc = PDFBoxAdapterTestCase.load(CLASSMAP);
-        COSDictionary temp = (COSDictionary)doc.getDocumentCatalog().getStructureTreeRoot().getCOSObject();
+        COSDictionary temp = doc.getDocumentCatalog().getStructureTreeRoot().getCOSObject();
         PDFDictionary classMap = new PDFDictionary();
         PDFDictionary inner = new PDFDictionary();
         inner.put("StartIndent", 0);
diff --git a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
index 8124d10..7f82387 100644
--- a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
@@ -139,7 +139,7 @@
         doc.setFormXObjectEnabled(formXObject);
         pdfpage.setDocument(doc);
         pdfpage.setObjectNumber(1);
-        return new PDFBoxAdapter(pdfpage, new HashMap(), new HashMap<Integer, PDFArray>());
+        return new PDFBoxAdapter(pdfpage, new HashMap<>(), new HashMap<Integer, PDFArray>());
     }
 
     protected static PDDocument load(String pdf) throws IOException {
@@ -258,7 +258,7 @@
         PDFPage pdfpage = getPDFPage(pdfdoc);
         pdfpage.setDocument(pdfdoc);
         pdfpage.setObjectNumber(1);
-        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), new HashMap<Integer, PDFArray>());
+        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap<>(), new HashMap<Integer, PDFArray>());
         PDDocument doc = load(ANNOT);
         PDPage page = doc.getPage(0);
         AffineTransform at = new AffineTransform();
@@ -294,7 +294,7 @@
         PDFPage pdfpage = getPDFPage(pdfdoc);
         pdfpage.setDocument(pdfdoc);
         pdfpage.setObjectNumber(1);
-        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), new HashMap<Integer, PDFArray>());
+        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap<>(), new HashMap<Integer, PDFArray>());
         PDDocument doc = load(ACCESSIBLERADIOBUTTONS);
         PDPage page = doc.getPage(0);
         AffineTransform at = new AffineTransform();
@@ -314,7 +314,7 @@
         PDFPage pdfpage = getPDFPage(pdfdoc);
         pdfpage.setDocument(pdfdoc);
         pdfpage.setObjectNumber(1);
-        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), new HashMap<Integer, PDFArray>());
+        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap<>(), new HashMap<Integer, PDFArray>());
         PDDocument doc = load(ACCESSIBLERADIOBUTTONS);
         COSArray fields = (COSArray)
                 doc.getDocumentCatalog().getAcroForm().getCOSObject().getDictionaryObject(COSName.FIELDS);
@@ -336,7 +336,7 @@
         pdfpage.setDocument(pdfdoc);
         pdfpage.setObjectNumber(1);
         Map<Integer, PDFArray> pageNumbers = new HashMap<Integer, PDFArray>();
-        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), pageNumbers);
+        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap<>(), pageNumbers);
         PDDocument doc = load(LINK);
         PDPage page = doc.getPage(0);
         AffineTransform at = new AffineTransform();
@@ -358,7 +358,7 @@
         pdfpage.setDocument(pdfdoc);
         pdfpage.setObjectNumber(1);
         Map<Integer, PDFArray> pageNumbers = new HashMap<Integer, PDFArray>();
-        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), pageNumbers);
+        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap<>(), pageNumbers);
         PDDocument doc = load(XFORM);
         PDPage page = doc.getPage(0);
         AffineTransform at = new AffineTransform();
@@ -508,7 +508,7 @@
         PDFPage pdfpage = getPDFPage(pdfdoc);
         pdfdoc.assignObjectNumber(pdfpage);
         pdfpage.setDocument(pdfdoc);
-        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), new HashMap<Integer, PDFArray>());
+        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap<>(), new HashMap<Integer, PDFArray>());
         PDDocument doc = load(src);
         PDPage page = doc.getPage(0);
         adapter.createStreamFromPDFBoxPage(doc, page, "key", new AffineTransform(), null, new Rectangle());
@@ -688,7 +688,7 @@
         PDFPage pdfpage = getPDFPage(pdfdoc);
         pdfpage.setDocument(pdfdoc);
         pdfpage.setObjectNumber(1);
-        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap(), new HashMap<Integer, PDFArray>());
+        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap<>(), new HashMap<Integer, PDFArray>());
         PDDocument doc = load(pdf);
         PDPage page = doc.getPage(0);
         AffineTransform at = new AffineTransform();
diff --git a/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java b/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java
index 3b6a49a..7f2ab49 100644
--- a/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java
@@ -67,7 +67,7 @@
         COSArray markedContentParents = finder.getPageParentTreeArray(doc);
         PDFStructElem elem = new PDFStructElem();
         elem.setObjectNumber(2);
-        adapter = new PDFBoxAdapter(pdfPage, new HashMap(), new HashMap<Integer, PDFArray>());
+        adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<Integer, PDFArray>());
         adapter.setCurrentMCID(1);
         PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
         StructureTreeMerger merger = new StructureTreeMerger(elem, handler, adapter, srcPage);
@@ -87,7 +87,7 @@
         markedContentParents.add(0, null);
         PDFStructElem elem = new PDFStructElem();
         elem.setObjectNumber(2);
-        adapter = new PDFBoxAdapter(pdfPage, new HashMap(), new HashMap<Integer, PDFArray>());
+        adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<Integer, PDFArray>());
         PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
         StructureTreeMerger merger = new StructureTreeMerger(elem, handler, adapter, srcPage);
         merger.copyStructure(markedContentParents);
@@ -103,7 +103,7 @@
         COSArray markedContentParents = finder.getPageParentTreeArray(doc);
         PDFStructElem elem = new PDFStructElem();
         elem.setObjectNumber(2);
-        adapter = new PDFBoxAdapter(pdfPage, new HashMap(), new HashMap<Integer, PDFArray>());
+        adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<Integer, PDFArray>());
         PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
         StructureTreeMerger merger = new StructureTreeMerger(elem, handler, adapter, srcPage);
         merger.copyStructure(markedContentParents);
@@ -125,7 +125,7 @@
 
     private void checkMarkedContentsParentsForLinkTest(PDFArray array) {
         PDFStructElem first = (PDFStructElem)array.get(0);
-        List firstKids = first.getKids();
+        List<PDFObject> firstKids = first.getKids();
         PDFDictionary firstKid = (PDFDictionary) firstKids.get(0);
         int test = ((PDFNumber)firstKid.get("MCID")).getNumber().intValue();
         int expected = 1;
@@ -135,7 +135,7 @@
         expected = 3;
         Assert.assertEquals(test, expected);
         PDFStructElem second = (PDFStructElem)array.get(1);
-        List secondKids = second.getKids();
+        List<PDFObject> secondKids = second.getKids();
         PDFDictionary secKid = (PDFDictionary) secondKids.get(0);
         test = ((PDFNumber)secKid.get("MCID")).getNumber().intValue();
         expected = 2;
@@ -186,7 +186,7 @@
         COSArray kids = (COSArray) parent.getDictionaryObject(COSName.K);
         COSDictionary kid = (COSDictionary) kids.get(1);
         kid.setItem(COSName.OBJ, nullObj);
-        adapter = new PDFBoxAdapter(pdfPage, new HashMap(), new HashMap<Integer, PDFArray>());
+        adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<Integer, PDFArray>());
         PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
         StructureTreeMerger merger = new StructureTreeMerger(elem, handler, adapter, srcPage);
         merger.copyStructure(markedContentParents);
@@ -200,7 +200,7 @@
     public void testDirectDescedants() throws IOException {
         PDFStructElem elem = new PDFStructElem();
         elem.setObjectNumber(100);
-        adapter = new PDFBoxAdapter(pdfPage, new HashMap(), new HashMap<Integer, PDFArray>());
+        adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<Integer, PDFArray>());
         PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
         PDPage srcPage = new PDPage();
         StructureTreeMerger merger = new StructureTreeMerger(elem, handler, adapter, srcPage);
@@ -221,7 +221,7 @@
 
     @Test
     public void testEmptyDict() throws IOException {
-        adapter = new PDFBoxAdapter(pdfPage, new HashMap(), new HashMap<Integer, PDFArray>());
+        adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<Integer, PDFArray>());
         StructureTreeMerger structureTreeMerger = new StructureTreeMerger(null, null, adapter, null);
         COSArray cosArray = new COSArray();
         COSObject o = new COSObject(new COSDictionary());
diff --git a/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java b/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java
index 16ed0bd..3344486 100644
--- a/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java
@@ -94,7 +94,7 @@
         PDPage srcPage = doc.getPage(0);
         elem.setObjectNumber(2);
         PDFBoxAdapter adapter = new PDFBoxAdapter(
-                pdfPage, new HashMap(),  new HashMap<Integer, PDFArray>());
+                pdfPage, new HashMap<>(),  new HashMap<Integer, PDFArray>());
         PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
         new TaggedPDFConductor(elem, handler, srcPage, adapter).handleLogicalStructure(doc);
     }
@@ -135,9 +135,9 @@
             expected = 2;
             Assert.assertEquals(test, expected);
             PDFStructElem second = (PDFStructElem)list.get(1);
-            List secondKids = second.getKids();
+            List<PDFObject> secondKids = second.getKids();
             PDFStructElem secKid = (PDFStructElem) secondKids.get(0);
-            List secondKidKids = secKid.getKids();
+            List<PDFObject> secondKidKids = secKid.getKids();
             PDFDictionary leafElem = (PDFDictionary)secondKidKids.get(0);
             test = ((PDFNumber)leafElem.get("MCID")).getNumber().intValue();
             expected = 1;
