diff --git a/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/NamespaceManager.java b/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/NamespaceManager.java
index 37675eb..861b91e 100644
--- a/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/NamespaceManager.java
+++ b/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/NamespaceManager.java
@@ -50,7 +50,7 @@
      */
     public NamespaceManager()
     {
-        this.namespaces = new ArrayList<NS>();
+        this.namespaces = new ArrayList<>();
     }
 
     public void reset()
diff --git a/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/SAXCompiler.java b/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/SAXCompiler.java
index 282a3df..53d638b 100644
--- a/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/SAXCompiler.java
+++ b/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/SAXCompiler.java
@@ -649,10 +649,10 @@
             else if (inCompositeImplementation && 
                 (CompositeLibrary.NAMESPACE.equals(uri) || CompositeLibrary.ALIAS_NAMESPACE.equals(uri)) )
             {
-                if ( "insertFacet".equals(localName) ||
-                     "renderFacet".equals(localName) ||
-                     "insertChildren".equals(localName) || 
-                     ImplementationHandler.NAME.equals(localName))
+                if ("insertFacet".equals(localName) ||
+                    "renderFacet".equals(localName) ||
+                    "insertChildren".equals(localName) || 
+                    ImplementationHandler.NAME.equals(localName))
                 {
                     this.unit.popTag();
                 }
@@ -689,10 +689,8 @@
             {
                 throw new SAXException("Error Traced[line: " + this.locator.getLineNumber() + "] " + e.getMessage());
             }
-            else
-            {
-                throw e;
-            }
+
+            throw e;
         }
 
         @Override
@@ -798,7 +796,8 @@
         @Override
         public void processingInstruction(String target, String data) throws SAXException
         {
-            if (inDocument && inCompositeInterface
+            if (inDocument
+                && inCompositeInterface
                 && !unit.getFaceletsProcessingInstructions().isConsumeProcessingInstructions())
             {
                 StringBuilder sb = new StringBuilder(64);
@@ -983,11 +982,11 @@
             {
                 if (entry.getValue() instanceof ValueExpression)
                 {
-                    stringValue = ((ValueExpression)entry.getValue()).getExpressionString();
+                    stringValue = ((ValueExpression) entry.getValue()).getExpressionString();
                 }
                 else if (entry.getValue() instanceof MethodExpression)
                 {
-                    stringValue = ((MethodExpression)entry.getValue()).getExpressionString();
+                    stringValue = ((MethodExpression) entry.getValue()).getExpressionString();
                 }
                 else if (entry.getValue() != null)
                 {
diff --git a/impl/src/main/java/org/apache/myfaces/view/facelets/component/RepeatStatus.java b/impl/src/main/java/org/apache/myfaces/view/facelets/component/RepeatStatus.java
index ce4ccbd..a3aabf9 100644
--- a/impl/src/main/java/org/apache/myfaces/view/facelets/component/RepeatStatus.java
+++ b/impl/src/main/java/org/apache/myfaces/view/facelets/component/RepeatStatus.java
@@ -63,12 +63,12 @@
         return last;
     }
     
-    public boolean isEven ()
+    public boolean isEven()
     {
-        return ((count % 2) == 0);
+        return (count % 2) == 0;
     }
     
-    public boolean isOdd ()
+    public boolean isOdd()
     {
         return !isEven();
     }
diff --git a/impl/src/main/java/org/apache/myfaces/view/facelets/component/UIRepeat.java b/impl/src/main/java/org/apache/myfaces/view/facelets/component/UIRepeat.java
index ef6519c..fb48808 100644
--- a/impl/src/main/java/org/apache/myfaces/view/facelets/component/UIRepeat.java
+++ b/impl/src/main/java/org/apache/myfaces/view/facelets/component/UIRepeat.java
@@ -190,12 +190,12 @@
     }
     
     @JSFProperty(literalOnly=true)
-    public String getVarStatus ()
+    public String getVarStatus()
     {
         return (String) getStateHelper().get(PropertyKeys.varStatus);
     }
     
-    public void setVarStatus (String varStatus)
+    public void setVarStatus(String varStatus)
     {
         getStateHelper().put(PropertyKeys.varStatus, varStatus );
     }
diff --git a/impl/src/main/java/org/apache/myfaces/view/facelets/tag/ui/UIDebug.java b/impl/src/main/java/org/apache/myfaces/view/facelets/tag/ui/UIDebug.java
index d8e1ce7..0e2e448 100644
--- a/impl/src/main/java/org/apache/myfaces/view/facelets/tag/ui/UIDebug.java
+++ b/impl/src/main/java/org/apache/myfaces/view/facelets/tag/ui/UIDebug.java
@@ -158,7 +158,7 @@
                 @Override
                 protected boolean removeEldestEntry(Entry<String, String> eldest)
                 {
-                    return (this.size() > 5);
+                    return this.size() > 5;
                 }
             };
             
diff --git a/impl/src/main/java/org/apache/myfaces/view/facelets/util/Classpath.java b/impl/src/main/java/org/apache/myfaces/view/facelets/util/Classpath.java
index ade0472..b42e27a 100644
--- a/impl/src/main/java/org/apache/myfaces/view/facelets/util/Classpath.java
+++ b/impl/src/main/java/org/apache/myfaces/view/facelets/util/Classpath.java
@@ -63,7 +63,7 @@
 
     public static URL[] search(ClassLoader loader, String prefix, String suffix) throws IOException
     {
-        Set<URL> all = new LinkedHashSet<URL>();
+        Set<URL> all = new LinkedHashSet<>();
 
         _searchResource(all, loader, prefix, prefix, suffix);
         _searchResource(all, loader, prefix + "MANIFEST.MF", prefix, suffix);
@@ -121,6 +121,7 @@
         {
             dirExists = dir.exists();
         }
+
         if (dirExists && dir.isDirectory())
         {
             File[] dirFiles = dir.listFiles();
@@ -163,47 +164,49 @@
     {
         boolean done = false;
 
-        InputStream is = _getInputStream(url);
-        if (is != null)
+        try (InputStream is = _getInputStream(url))
         {
-            try
+            if (is != null)
             {
-                ZipInputStream zis;
-                if (is instanceof ZipInputStream)
-                {
-                    zis = (ZipInputStream) is;
-                }
-                else
-                {
-                    zis = new ZipInputStream(is);
-                }
-
                 try
                 {
-                    ZipEntry entry = zis.getNextEntry();
-                    // initial entry should not be null
-                    // if we assume this is some inner jar
-                    done = entry != null;
-
-                    while (entry != null)
+                    ZipInputStream zis;
+                    if (is instanceof ZipInputStream)
                     {
-                        String entryName = entry.getName();
-                        if (entryName.endsWith(suffix))
-                        {
-                            result.add(new URL(url.toExternalForm() + entryName));
-                        }
+                        zis = (ZipInputStream) is;
+                    }
+                    else
+                    {
+                        zis = new ZipInputStream(is);
+                    }
 
-                        entry = zis.getNextEntry();
+                    try
+                    {
+                        ZipEntry entry = zis.getNextEntry();
+                        // initial entry should not be null
+                        // if we assume this is some inner jar
+                        done = entry != null;
+
+                        while (entry != null)
+                        {
+                            String entryName = entry.getName();
+                            if (entryName.endsWith(suffix))
+                            {
+                                result.add(new URL(url.toExternalForm() + entryName));
+                            }
+
+                            entry = zis.getNextEntry();
+                        }
+                    }
+                    finally
+                    {
+                        zis.close();
                     }
                 }
-                finally
+                catch (Exception ignore)
                 {
-                    zis.close();
                 }
             }
-            catch (Exception ignore)
-            {
-            }
         }
 
         if (!done && prefix.length() > 0)
diff --git a/impl/src/main/java/org/apache/myfaces/view/facelets/util/FaceletsViewDeclarationLanguageUtils.java b/impl/src/main/java/org/apache/myfaces/view/facelets/util/FaceletsViewDeclarationLanguageUtils.java
index 1c2858d..1a70b70 100644
--- a/impl/src/main/java/org/apache/myfaces/view/facelets/util/FaceletsViewDeclarationLanguageUtils.java
+++ b/impl/src/main/java/org/apache/myfaces/view/facelets/util/FaceletsViewDeclarationLanguageUtils.java
@@ -43,11 +43,13 @@
         {
             throw new FacesException("Invalid method signature:" + signature);
         }
+
         int end = signature.lastIndexOf(' ', endName);
         if (end < 0)
         {
             throw new FacesException("Invalid method signature:" + signature);
         }
+
         try
         {
             return ClassUtils.javaDefaultTypeToClass(signature.substring(0, end));
@@ -65,7 +67,8 @@
      */
     public static Class[] getParameters(String signature) throws FacesException
     {
-        ArrayList<Class> params = new ArrayList<Class>();
+        ArrayList<Class> params = new ArrayList<>();
+
         // Signature is of the form
         // <return-type> S <method-name S? '('
         // < <arg-type> ( ',' <arg-type> )* )? ')'
@@ -83,6 +86,7 @@
                 }
                 lastArg = true;
             }
+
             String arg = signature.substring(start, p);
             if (StringUtils.isNotBlank(arg))
             {
@@ -95,12 +99,15 @@
                     throw new FacesException("Invalid method signature:" + signature);
                 }
             }
+            
             if (lastArg)
             {
                 break;
             }
+
             start = p + 1;
         }
+
         return params.toArray(new Class[params.size()]);
     }
 
