diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 85e85c8..f0f1410 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -32,16 +32,11 @@
 
     steps:
     - uses: actions/checkout@v2.3.4
-    - uses: actions/cache@v2.1.5
-      with:
-        path: ~/.m2/repository
-        key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
-        restore-keys: |
-          ${{ runner.os }}-maven-
     - name: Set up JDK ${{ matrix.java }}
       uses: actions/setup-java@v2
       with:
         distribution: adopt
         java-version: ${{ matrix.java }}
+        cache: 'maven'
     - name: Build with Maven
       run: mvn -V -Ddoclint=all --file pom.xml --no-transfer-progress
diff --git a/.travis.yml b/.travis.yml
index cc26727..cefab1c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -22,7 +22,7 @@
 jdk:
   - openjdk8
   - openjdk11
-  - openjdk15
+  - openjdk16
   - openjdk-ea
 
 matrix:
diff --git a/pom.xml b/pom.xml
index 85919ec..4ac81b2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -190,13 +190,13 @@
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
-      <version>4.13.1</version>
+      <version>4.13.2</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.easymock</groupId>
       <artifactId>easymock</artifactId>
-      <version>4.2</version>
+      <version>4.3</version>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -213,7 +213,7 @@
     <dependency>
       <groupId>ognl</groupId>
       <artifactId>ognl</artifactId>
-      <version>3.2.18</version>
+      <version>3.2.21</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
@@ -398,7 +398,7 @@
           </plugin>
           <plugin>
             <artifactId>maven-pmd-plugin</artifactId>
-            <version>3.14.0</version>
+            <version>3.15.0</version>
             <configuration>
               <targetJdk>${maven.compile.target}</targetJdk>
             </configuration>
@@ -481,7 +481,7 @@
         <dependency>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-api</artifactId>
-          <version>1.7.30</version>
+          <version>1.7.32</version>
           <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/src/main/java/org/apache/commons/ognl/ASTAdd.java b/src/main/java/org/apache/commons/ognl/ASTAdd.java
index 89885e9..04a4427 100644
--- a/src/main/java/org/apache/commons/ognl/ASTAdd.java
+++ b/src/main/java/org/apache/commons/ognl/ASTAdd.java
@@ -143,7 +143,7 @@
     {
         try
         {
-            String result = "";
+            StringBuilder result = new StringBuilder();
             NodeType lastType = null;
 
             // go through once to determine the ultimate type
@@ -159,7 +159,7 @@
                 {
                     aChildren.toGetSourceString( context, target );
 
-                    if ( NodeType.class.isInstance( aChildren ) && ( (NodeType) aChildren ).getGetterClass() != null
+                    if ( aChildren instanceof NodeType && ( (NodeType) aChildren ).getGetterClass() != null
                         && isWider( (NodeType) aChildren, lastType ) )
                     {
                         lastType = (NodeType) aChildren;
@@ -183,13 +183,13 @@
                 {
                     if ( i > 0 )
                     {
-                        result += " " + getExpressionOperator( i ) + " ";
+                        result.append(" ").append(getExpressionOperator(i)).append(" ");
                     }
 
                     String expr = children[i].toGetSourceString( context, target );
 
                     if ( ( "null".equals( expr ) )
-                        || ( !ASTConst.class.isInstance( children[i] )
+                        || ( !(children[i] instanceof ASTConst)
                         && ( expr == null || expr.trim().isEmpty() ) ) )
                     {
                         expr = "null";
@@ -198,12 +198,12 @@
                     // System.out.println("astadd child class: " + _children[i].getClass().getName() +
                     // " and return expr: " + expr);
 
-                    if ( ASTProperty.class.isInstance( children[i] ) )
+                    if (children[i] instanceof ASTProperty)
                     {
                         expr = ExpressionCompiler.getRootExpression( children[i], context.getRoot(), context ) + expr;
                         context.setCurrentAccessor( context.getRoot().getClass() );
                     }
-                    else if ( ASTMethod.class.isInstance( children[i] ) )
+                    else if (children[i] instanceof ASTMethod)
                     {
                         String chain = (String) context.get( "_currentChain" );
                         String rootExpr =
@@ -222,17 +222,17 @@
                         context.setCurrentAccessor( context.getRoot().getClass() );
 
                     }
-                    else if ( ExpressionNode.class.isInstance( children[i] ) )
+                    else if (children[i] instanceof ExpressionNode)
                     {
                         expr = "(" + expr + ")";
                     }
-                    else if ( ( parent == null || !ASTChain.class.isInstance( parent ) )
-                        && ASTChain.class.isInstance( children[i] ) )
+                    else if ( ( parent == null || !(parent instanceof ASTChain))
+                        && children[i] instanceof ASTChain)
                     {
                         String rootExpr =
                             ExpressionCompiler.getRootExpression( children[i], context.getRoot(), context );
 
-                        if ( !ASTProperty.class.isInstance( children[i].jjtGetChild( 0 ) ) && rootExpr.endsWith( ")" )
+                        if ( !(children[i].jjtGetChild(0) instanceof ASTProperty) && rootExpr.endsWith( ")" )
                             && expr.startsWith( ")" ) )
                         {
                             expr = expr.substring( 1 );
@@ -253,7 +253,7 @@
                     // turn quoted characters into quoted strings
 
                     if ( context.getCurrentType() != null && context.getCurrentType() == Character.class
-                        && ASTConst.class.isInstance( children[i] ) )
+                        && children[i] instanceof ASTConst)
                     {
                         expr = expr.replace( "'", "\"" );
                         context.setCurrentType( String.class );
@@ -262,14 +262,14 @@
                     {
 
                         if ( !ASTVarRef.class.isAssignableFrom( children[i].getClass() )
-                            && !ASTProperty.class.isInstance( children[i] )
-                            && !ASTMethod.class.isInstance( children[i] )
-                            && !ASTSequence.class.isInstance( children[i] )
-                            && !ASTChain.class.isInstance( children[i] )
+                            && !(children[i] instanceof ASTProperty)
+                            && !(children[i] instanceof ASTMethod)
+                            && !(children[i] instanceof ASTSequence)
+                            && !(children[i] instanceof ASTChain)
                             && !NumericExpression.class.isAssignableFrom( children[i].getClass() )
-                            && !ASTStaticField.class.isInstance( children[i] )
-                            && !ASTStaticMethod.class.isInstance( children[i] )
-                            && !ASTTest.class.isInstance( children[i] ) )
+                            && !(children[i] instanceof ASTStaticField)
+                            && !(children[i] instanceof ASTStaticMethod)
+                            && !(children[i] instanceof ASTTest))
                         {
                             if ( lastType != null && String.class.isAssignableFrom( lastType.getGetterClass() ) )
                             {
@@ -282,7 +282,7 @@
                         }
                     }
 
-                    result += expr;
+                    result.append(expr);
 
                     // hanlde addition for numeric types when applicable or just string concatenation
 
@@ -292,16 +292,16 @@
                     {
                         if ( context.getCurrentType() != null
                             && Number.class.isAssignableFrom( context.getCurrentType() )
-                            && !ASTMethod.class.isInstance( children[i] ) )
+                            && !(children[i] instanceof ASTMethod))
                         {
-                            if ( ASTVarRef.class.isInstance( children[i] )
-                                || ASTProperty.class.isInstance( children[i] )
-                                || ASTChain.class.isInstance( children[i] ) )
+                            if ( children[i] instanceof ASTVarRef
+                                || children[i] instanceof ASTProperty
+                                || children[i] instanceof ASTChain)
                             {
-                                result += ".";
+                                result.append(".");
                             }
 
-                            result += OgnlRuntime.getNumericValueGetter( context.getCurrentType() );
+                            result.append(OgnlRuntime.getNumericValueGetter(context.getCurrentType()));
                             context.setCurrentType( OgnlRuntime.getPrimitiveWrapperClass( context.getCurrentType() ) );
                         }
                     }
@@ -335,7 +335,7 @@
                 throw OgnlOps.castToRuntime( t );
             }
 
-            return result;
+            return result.toString();
 
         }
         catch ( Throwable t )
diff --git a/src/main/java/org/apache/commons/ognl/ASTAssign.java b/src/main/java/org/apache/commons/ognl/ASTAssign.java
index b394435..7a6d3aa 100644
--- a/src/main/java/org/apache/commons/ognl/ASTAssign.java
+++ b/src/main/java/org/apache/commons/ognl/ASTAssign.java
@@ -53,7 +53,7 @@
         String first = children[0].toGetSourceString( context, target );
         String second = "";
 
-        if ( ASTProperty.class.isInstance( children[1] ) )
+        if (children[1] instanceof ASTProperty)
         {
             second += "((" + OgnlRuntime.getCompiler( context ).getClassName( target.getClass() ) + ")$2).";
         }
@@ -79,8 +79,8 @@
                                                                 Object.class );
         }
 
-        if ( NodeType.class.isInstance( children[1] ) && !ASTProperty.class.isInstance( children[1] )
-            && ( (NodeType) children[1] ).getGetterClass() != null && !OrderedReturn.class.isInstance( children[1] ) )
+        if ( children[1] instanceof NodeType && !(children[1] instanceof ASTProperty)
+            && ( (NodeType) children[1] ).getGetterClass() != null && !(children[1] instanceof OrderedReturn))
         {
 
             second = "new " + ( (NodeType) children[1] ).getGetterClass().getName() + "(" + second + ")";
@@ -113,7 +113,7 @@
 
         result += children[0].toSetSourceString( context, target );
 
-        if ( ASTProperty.class.isInstance( children[1] ) )
+        if (children[1] instanceof ASTProperty)
         {
             result += "((" + OgnlRuntime.getCompiler( context ).getClassName( target.getClass() ) + ")$2).";
         }
@@ -133,7 +133,7 @@
             value = seq.getLastExpression();
         }
 
-        if ( NodeType.class.isInstance( children[1] ) && !ASTProperty.class.isInstance( children[1] )
+        if ( children[1] instanceof NodeType && !(children[1] instanceof ASTProperty)
             && ( (NodeType) children[1] ).getGetterClass() != null )
         {
 
diff --git a/src/main/java/org/apache/commons/ognl/ASTBitNegate.java b/src/main/java/org/apache/commons/ognl/ASTBitNegate.java
index 316fd92..f612e45 100644
--- a/src/main/java/org/apache/commons/ognl/ASTBitNegate.java
+++ b/src/main/java/org/apache/commons/ognl/ASTBitNegate.java
@@ -45,7 +45,7 @@
     {
         String source = children[0].toGetSourceString( context, target );
 
-        if ( !ASTBitNegate.class.isInstance( children[0] ) )
+        if ( !(children[0] instanceof ASTBitNegate))
         {
             return "~(" + super.coerceToNumeric( source, context, children[0] ) + ")";
         }
diff --git a/src/main/java/org/apache/commons/ognl/ASTChain.java b/src/main/java/org/apache/commons/ognl/ASTChain.java
index 8ca6e3c..8344376 100644
--- a/src/main/java/org/apache/commons/ognl/ASTChain.java
+++ b/src/main/java/org/apache/commons/ognl/ASTChain.java
@@ -295,22 +295,22 @@
 
                     // System.out.println("astchain child returned >>  " + value + "  <<");
 
-                    if ( ASTCtor.class.isInstance( child ) )
+                    if (child instanceof ASTCtor)
                     {
                         constructor = true;
                     }
 
-                    if ( NodeType.class.isInstance( child ) && ( (NodeType) child ).getGetterClass() != null )
+                    if ( child instanceof NodeType && ( (NodeType) child ).getGetterClass() != null )
                     {
                         lastType = (NodeType) child;
                     }
 
                     // System.out.println("Astchain i: " + i + " currentobj : " + context.getCurrentObject() +
                     // " and root: " + context.getRoot());
-                    if ( !ASTVarRef.class.isInstance( child ) && !constructor && !(
-                        OrderedReturn.class.isInstance( child )
+                    if ( !(child instanceof ASTVarRef) && !constructor && !(
+                        child instanceof OrderedReturn
                             && ( (OrderedReturn) child ).getLastExpression() != null ) && ( parent == null
-                        || !ASTSequence.class.isInstance( parent ) ) )
+                        || !(parent instanceof ASTSequence)) )
                     {
                         value = OgnlRuntime.getCompiler( context ).castExpression( context, child, value );
                     }
@@ -321,7 +321,7 @@
                      * context.getPreviousType() + " prev accessor " + context.getPreviousAccessor());
                      */
 
-                    if ( OrderedReturn.class.isInstance( child )
+                    if ( child instanceof OrderedReturn
                         && ( (OrderedReturn) child ).getLastExpression() != null )
                     {
                         ordered = true;
@@ -343,8 +343,8 @@
                             lastExpression = context.remove( ExpressionCompiler.PRE_CAST ) + lastExpression;
                         }
                     }
-                    else if ( ASTOr.class.isInstance( child ) || ASTAnd.class.isInstance( child )
-                        || ASTCtor.class.isInstance( child ) || ( ASTStaticField.class.isInstance( child )
+                    else if ( child instanceof ASTOr || child instanceof ASTAnd
+                        || child instanceof ASTCtor || ( child instanceof ASTStaticField
                         && parent == null ) )
                     {
                         context.put( "_noRoot", "true" );
@@ -403,7 +403,7 @@
         {
             if ( ( children != null ) && ( children.length > 0 ) )
             {
-                if ( ASTConst.class.isInstance( children[0] ) )
+                if (children[0] instanceof ASTConst)
                 {
                     throw new UnsupportedCompilationException( "Can't modify constant values." );
                 }
@@ -423,22 +423,22 @@
 
                     // System.out.println("astchain setter child returned >>  " + value + "  <<");
 
-                    if ( ASTCtor.class.isInstance( children[i] ) )
+                    if (children[i] instanceof ASTCtor)
                     {
                         constructor = true;
                     }
 
-                    if ( NodeType.class.isInstance( children[i] )
+                    if ( children[i] instanceof NodeType
                         && ( (NodeType) children[i] ).getGetterClass() != null )
                     {
                         lastType = (NodeType) children[i];
                     }
 
-                    if ( !ASTVarRef.class.isInstance( children[i] )
+                    if ( !(children[i] instanceof ASTVarRef)
                         && !constructor
-                        && !( OrderedReturn.class.isInstance( children[i] )
+                        && !( children[i] instanceof OrderedReturn
                         && ( (OrderedReturn) children[i] ).getLastExpression() != null )
-                        && ( parent == null || !ASTSequence.class.isInstance( parent ) ) )
+                        && ( parent == null || !(parent instanceof ASTSequence)) )
                     {
                         value = OgnlRuntime.getCompiler( context ).castExpression( context, children[i], value );
                     }
@@ -451,8 +451,8 @@
                      * OgnlRuntime.getCompiler().castExpression(context, _children[i], value); }
                      */
 
-                    if ( ASTOr.class.isInstance( children[i] ) || ASTAnd.class.isInstance( children[i] )
-                        || ASTCtor.class.isInstance( children[i] ) || ASTStaticField.class.isInstance( children[i] ) )
+                    if ( children[i] instanceof ASTOr || children[i] instanceof ASTAnd
+                        || children[i] instanceof ASTCtor || children[i] instanceof ASTStaticField)
                     {
                         context.put( "_noRoot", "true" );
                         result = value;
diff --git a/src/main/java/org/apache/commons/ognl/ASTConst.java b/src/main/java/org/apache/commons/ognl/ASTConst.java
index 8139863..9813f3a 100644
--- a/src/main/java/org/apache/commons/ognl/ASTConst.java
+++ b/src/main/java/org/apache/commons/ognl/ASTConst.java
@@ -81,7 +81,7 @@
 
     public String toGetSourceString( OgnlContext context, Object target )
     {
-        if ( value == null && parent != null && ExpressionNode.class.isInstance( parent ) )
+        if ( value == null && parent != null && parent instanceof ExpressionNode)
         {
             context.setCurrentType( null );
             return "null";
@@ -95,7 +95,7 @@
         getterClass = value.getClass();
 
         Object retval = value;
-        if ( parent != null && ASTProperty.class.isInstance( parent ) )
+        if ( parent != null && parent instanceof ASTProperty)
         {
             context.setCurrentObject( value );
 
@@ -121,7 +121,7 @@
 
             return retval.toString();
         }
-        if ( Character.class.isInstance( value ) )
+        if (value instanceof Character)
         {
             Character val = (Character) value;
 
diff --git a/src/main/java/org/apache/commons/ognl/ASTCtor.java b/src/main/java/org/apache/commons/ognl/ASTCtor.java
index b3d33cc..5ac44a6 100644
--- a/src/main/java/org/apache/commons/ognl/ASTCtor.java
+++ b/src/main/java/org/apache/commons/ognl/ASTCtor.java
@@ -142,7 +142,7 @@
 
     public String toGetSourceString( OgnlContext context, Object target )
     {
-        String result = "new " + className;
+        StringBuilder result = new StringBuilder("new " + className);
 
         Class clazz = null;
         Object ctorValue = null;
@@ -179,30 +179,28 @@
                 if ( children[0] instanceof ASTConst )
                 {
 
-                    result = result + "[" + children[0].toGetSourceString( context, target ) + "]";
+                    result.append("[").append(children[0].toGetSourceString(context, target)).append("]");
                 }
-                else if ( ASTProperty.class.isInstance( children[0] ) )
+                else if (children[0] instanceof ASTProperty)
                 {
 
-                    result =
-                        result + "[" + ExpressionCompiler.getRootExpression( children[0], target, context )
-                            + children[0].toGetSourceString( context, target ) + "]";
+                    result.append("[").append(ExpressionCompiler.getRootExpression(children[0], target, context)).append(children[0].toGetSourceString(context, target)).append("]");
                 }
-                else if ( ASTChain.class.isInstance( children[0] ) )
+                else if (children[0] instanceof ASTChain)
                 {
 
-                    result = result + "[" + children[0].toGetSourceString( context, target ) + "]";
+                    result.append("[").append(children[0].toGetSourceString(context, target)).append("]");
                 }
                 else
                 {
 
-                    result = result + "[] " + children[0].toGetSourceString( context, target );
+                    result.append("[] ").append(children[0].toGetSourceString(context, target));
                 }
 
             }
             else
             {
-                result = result + "(";
+                result.append("(");
 
                 if ( ( children != null ) && ( children.length > 0 ) )
                 {
@@ -219,7 +217,7 @@
                         Object objValue = children[i].getValue( context, context.getRoot() );
                         String value = children[i].toGetSourceString( context, target );
 
-                        if ( !ASTRootVarRef.class.isInstance( children[i] ) )
+                        if ( !(children[i] instanceof ASTRootVarRef))
                         {
                             value = ExpressionCompiler.getRootExpression( children[i], target, context ) + value;
                         }
@@ -235,7 +233,7 @@
                             cast = "";
                         }
 
-                        if ( !ASTConst.class.isInstance( children[i] ) )
+                        if ( !(children[i] instanceof ASTConst))
                         {
                             value = cast + value;
                         }
@@ -284,7 +282,7 @@
                     {
                         if ( i > 0 )
                         {
-                            result = result + ", ";
+                            result.append(", ");
                         }
 
                         String value = expressions[i];
@@ -303,15 +301,15 @@
                         {
 
                             if ( values[i] != null && !types[i].isPrimitive() && !values[i].getClass().isArray()
-                                && !ASTConst.class.isInstance( children[i] ) )
+                                && !(children[i] instanceof ASTConst))
                             {
 
                                 value =
                                     "(" + OgnlRuntime.getCompiler( context ).getInterfaceClass( values[i].getClass() ).getName()
                                         + ")" + value;
                             }
-                            else if ( !ASTConst.class.isInstance( children[i] )
-                                || ( ASTConst.class.isInstance( children[i] ) && !types[i].isPrimitive() ) )
+                            else if ( !(children[i] instanceof ASTConst)
+                                || ( children[i] instanceof ASTConst && !types[i].isPrimitive() ) )
                             {
 
                                 if ( !types[i].isArray() && types[i].isPrimitive() && !ctorParamTypes[i].isPrimitive() )
@@ -329,11 +327,11 @@
                             }
                         }
 
-                        result += value;
+                        result.append(value);
                     }
 
                 }
-                result = result + ")";
+                result.append(")");
             }
 
             context.setCurrentType( ctorValue != null ? ctorValue.getClass() : clazz );
@@ -348,7 +346,7 @@
 
         context.remove( "_ctorClass" );
 
-        return result;
+        return result.toString();
     }
 
     public String toSetSourceString( OgnlContext context, Object target )
diff --git a/src/main/java/org/apache/commons/ognl/ASTInstanceof.java b/src/main/java/org/apache/commons/ognl/ASTInstanceof.java
index 3b6b5d9..9eb4b5d 100644
--- a/src/main/java/org/apache/commons/ognl/ASTInstanceof.java
+++ b/src/main/java/org/apache/commons/ognl/ASTInstanceof.java
@@ -72,7 +72,7 @@
 
             String ret = "";
 
-            if ( ASTConst.class.isInstance( children[0] ) )
+            if (children[0] instanceof ASTConst)
             {
                 ret = ( (Boolean) getValueBody( context, target ) ).toString();
             }
diff --git a/src/main/java/org/apache/commons/ognl/ASTList.java b/src/main/java/org/apache/commons/ognl/ASTList.java
index 9709c5d..eb019a7 100644
--- a/src/main/java/org/apache/commons/ognl/ASTList.java
+++ b/src/main/java/org/apache/commons/ognl/ASTList.java
@@ -66,14 +66,8 @@
 
     public String toGetSourceString( OgnlContext context, Object target )
     {
-        String result = "";
-        boolean array = false;
-
-        if ( parent != null && ASTCtor.class.isInstance( parent ) && ( (ASTCtor) parent ).isArray() )
-        {
-
-            array = true;
-        }
+        StringBuilder result = new StringBuilder();
+        boolean array = parent instanceof ASTCtor && ((ASTCtor) parent).isArray();
 
         context.setCurrentType( List.class );
         context.setCurrentAccessor( List.class );
@@ -84,10 +78,10 @@
             {
                 return "java.util.Arrays.asList( new Object[0])";
             }
-            result += "java.util.Arrays.asList( new Object[] ";
+            result.append("java.util.Arrays.asList( new Object[] ");
         }
 
-        result += "{ ";
+        result.append("{ ");
 
         try
         {
@@ -96,7 +90,7 @@
             {
                 if ( i > 0 )
                 {
-                    result = result + ", ";
+                    result.append(", ");
                 }
 
                 Class prevType = context.getCurrentType();
@@ -105,7 +99,7 @@
                 String value = children[i].toGetSourceString( context, target );
 
                 // to undo type setting of constants when used as method parameters
-                if ( ASTConst.class.isInstance( children[i] ) )
+                if (children[i] instanceof ASTConst)
                 {
 
                     context.setCurrentType( prevType );
@@ -124,7 +118,7 @@
                     cast = "";
                 }
 
-                if ( !ASTConst.class.isInstance( children[i] ) )
+                if ( !(children[i] instanceof ASTConst))
                 {
                     value = cast + value;
                 }
@@ -170,7 +164,7 @@
                                     + ctorClass.getName() + ".class)", ctorClass );
 
                     }
-                    else if ( ( NodeType.class.isInstance( children[i] )
+                    else if ( ( children[i] instanceof NodeType
                         && ( (NodeType) children[i] ).getGetterClass() != null
                         && Number.class.isAssignableFrom( ( (NodeType) children[i] ).getGetterClass() ) )
                         || valueClass.isPrimitive() )
@@ -194,7 +188,7 @@
                 {
                     value = "null";
                 }
-                result += value;
+                result.append(value);
             }
 
         }
@@ -206,13 +200,13 @@
         context.setCurrentType( List.class );
         context.setCurrentAccessor( List.class );
 
-        result += "}";
+        result.append("}");
 
         if ( !array )
         {
-            result += ")";
+            result.append(")");
         }
-        return result;
+        return result.toString();
     }
 
     public String toSetSourceString( OgnlContext context, Object target )
diff --git a/src/main/java/org/apache/commons/ognl/ASTMethod.java b/src/main/java/org/apache/commons/ognl/ASTMethod.java
index 4b369aa..0a52322 100644
--- a/src/main/java/org/apache/commons/ognl/ASTMethod.java
+++ b/src/main/java/org/apache/commons/ognl/ASTMethod.java
@@ -274,10 +274,10 @@
         }
 
         String post = "";
-        String result = "." + method.getName() + "(";
+        StringBuilder result = new StringBuilder("." + method.getName() + "(");
 
         if ( method.getReturnType() != void.class && method.getReturnType().isPrimitive() && ( parent == null
-            || !ASTTest.class.isInstance( parent ) ) )
+            || !(parent instanceof ASTTest)) )
         {
             Class wrapper = OgnlRuntime.getPrimitiveWrapperClass( method.getReturnType() );
 
@@ -310,7 +310,7 @@
                 {
                     if ( i > 0 )
                     {
-                        result += ", ";
+                        result.append(", ");
                     }
 
                     Class prevType = context.getCurrentType();
@@ -331,8 +331,8 @@
 
                     if ( parmString == null || parmString.trim().length() < 1 )
                     {
-                        if ( ASTProperty.class.isInstance( child ) || ASTMethod.class.isInstance( child )
-                            || ASTStaticMethod.class.isInstance( child ) || ASTChain.class.isInstance( child ) )
+                        if ( child instanceof ASTProperty || child instanceof ASTMethod
+                            || child instanceof ASTStaticMethod || child instanceof ASTChain)
                         {
                             throw new UnsupportedCompilationException(
                                 "ASTMethod setter child returned null from a sub property expression." );
@@ -341,7 +341,7 @@
                     }
 
                     // to undo type setting of constants when used as method parameters
-                    if ( ASTConst.class.isInstance( child ) )
+                    if (child instanceof ASTConst)
                     {
                         context.setCurrentType( prevType );
                     }
@@ -373,7 +373,7 @@
                             ASTMethodUtil.getParmString( context, parms[i], parmString, child, valueClass, ".class)" );
                     }
 
-                    result += parmString;
+                    result.append(parmString);
                 }
 
                 if ( prevCast != null )
diff --git a/src/main/java/org/apache/commons/ognl/ASTMethodUtil.java b/src/main/java/org/apache/commons/ognl/ASTMethodUtil.java
index b702e8a..55e9eab 100644
--- a/src/main/java/org/apache/commons/ognl/ASTMethodUtil.java
+++ b/src/main/java/org/apache/commons/ognl/ASTMethodUtil.java
@@ -44,7 +44,7 @@
         }
 
         // to undo type setting of constants when used as method parameters
-        if ( ASTConst.class.isInstance( child ) )
+        if (child instanceof ASTConst)
         {
             context.setCurrentType( prevType );
         }
@@ -62,7 +62,7 @@
             cast = "";
         }
 
-        if ( !ASTConst.class.isInstance( child ) )
+        if ( !(child instanceof ASTConst))
         {
             parmString = cast + parmString;
         }
@@ -108,7 +108,7 @@
                                                         parm );
 
         }
-        else if ( ( NodeType.class.isInstance( child ) && ( (NodeType) child ).getGetterClass() != null
+        else if ( ( child instanceof NodeType && ( (NodeType) child ).getGetterClass() != null
             && Number.class.isAssignableFrom( ( (NodeType) child ).getGetterClass() ) ) || ( valueClass != null
             && valueClass.isPrimitive() ) )
         {
diff --git a/src/main/java/org/apache/commons/ognl/ASTNegate.java b/src/main/java/org/apache/commons/ognl/ASTNegate.java
index dd6f2fe..d40322c 100644
--- a/src/main/java/org/apache/commons/ognl/ASTNegate.java
+++ b/src/main/java/org/apache/commons/ognl/ASTNegate.java
@@ -45,7 +45,7 @@
     {
         String source = children[0].toGetSourceString( context, target );
 
-        if ( !ASTNegate.class.isInstance( children[0] ) )
+        if ( !(children[0] instanceof ASTNegate))
         {
             return "-" + source;
         }
diff --git a/src/main/java/org/apache/commons/ognl/ASTProperty.java b/src/main/java/org/apache/commons/ognl/ASTProperty.java
index 9825d80..8a5caf3 100644
--- a/src/main/java/org/apache/commons/ognl/ASTProperty.java
+++ b/src/main/java/org/apache/commons/ognl/ASTProperty.java
@@ -196,7 +196,7 @@
                 // + " and srcString " + srcString + " on target: " + target);
 
                 Object currentObject = context.getCurrentObject();
-                if ( ASTConst.class.isInstance( child ) && Number.class.isInstance( currentObject ) )
+                if ( child instanceof ASTConst && currentObject instanceof Number)
                 {
                     context.setCurrentType( OgnlRuntime.getPrimitiveWrapperClass( currentObject.getClass() ) );
                 }
@@ -300,8 +300,7 @@
 
                         String srcString = child.toGetSourceString( context, context.getRoot() );
 
-                        if ( ASTConst.class.isInstance( child ) && String.class.isInstance(
-                            context.getCurrentObject() ) )
+                        if ( child instanceof ASTConst && context.getCurrentObject() instanceof String)
                         {
                             srcString = "\"" + srcString + "\"";
                         }
@@ -372,11 +371,11 @@
 
     Method getIndexedWriteMethod( PropertyDescriptor pd )
     {
-        if ( IndexedPropertyDescriptor.class.isInstance( pd ) )
+        if (pd instanceof IndexedPropertyDescriptor)
         {
             return ( (IndexedPropertyDescriptor) pd ).getIndexedWriteMethod();
         }
-        if ( ObjectIndexedPropertyDescriptor.class.isInstance( pd ) )
+        if (pd instanceof ObjectIndexedPropertyDescriptor)
         {
             return ( (ObjectIndexedPropertyDescriptor) pd ).getIndexedWriteMethod();
         }
@@ -422,7 +421,7 @@
                     PropertyAccessor propertyAccessor = OgnlRuntime.getPropertyAccessor( target.getClass() );
 
                     Object currentObject = context.getCurrentObject();
-                    if ( ASTConst.class.isInstance( child ) && Number.class.isInstance( currentObject ) )
+                    if ( child instanceof ASTConst && currentObject instanceof Number)
                     {
                         context.setCurrentType( OgnlRuntime.getPrimitiveWrapperClass( currentObject.getClass() ) );
                     }
@@ -577,8 +576,7 @@
 
                         String srcString = child.toGetSourceString( context, context.getRoot() );
 
-                        if ( ASTConst.class.isInstance( child ) && String.class.isInstance(
-                            context.getCurrentObject() ) )
+                        if ( child instanceof ASTConst && context.getCurrentObject() instanceof String)
                         {
                             srcString = "\"" + srcString + "\"";
                         }
@@ -630,7 +628,7 @@
         String srcString = child.toGetSourceString( context, context.getRoot() );
         srcString = ExpressionCompiler.getRootExpression( child, context.getRoot(), context ) + srcString;
 
-        if ( ASTChain.class.isInstance( child ) )
+        if (child instanceof ASTChain)
         {
             String cast = (String) context.remove( ExpressionCompiler.PRE_CAST );
             if ( cast != null )
@@ -639,7 +637,7 @@
             }
         }
 
-        if ( ASTConst.class.isInstance( child ) && String.class.isInstance( context.getCurrentObject() ) )
+        if ( child instanceof ASTConst && context.getCurrentObject() instanceof String)
         {
             srcString = "\"" + srcString + "\"";
         }
diff --git a/src/main/java/org/apache/commons/ognl/ASTSequence.java b/src/main/java/org/apache/commons/ognl/ASTSequence.java
index 4f4d4f6..0142420 100644
--- a/src/main/java/org/apache/commons/ognl/ASTSequence.java
+++ b/src/main/java/org/apache/commons/ognl/ASTSequence.java
@@ -109,12 +109,12 @@
             // System.out.println("astsequence child : " + _children[i].getClass().getName());
             String seqValue = children[i].toGetSourceString( context, target );
 
-            if ( ( i + 1 ) < children.length && ASTOr.class.isInstance( children[i] ) )
+            if ( ( i + 1 ) < children.length && children[i] instanceof ASTOr)
             {
                 seqValue = "(" + seqValue + ")";
             }
 
-            if ( i > 0 && ASTProperty.class.isInstance( children[i] ) && seqValue != null
+            if ( i > 0 && children[i] instanceof ASTProperty && seqValue != null
                 && !seqValue.trim().isEmpty() )
             {
                 String pre = (String) context.get( "_currentChain" );
@@ -144,7 +144,7 @@
             }
             // set last known type from last child with a type
 
-            if ( NodeType.class.isInstance( children[i] ) && ( (NodeType) children[i] ).getGetterClass() != null )
+            if ( children[i] instanceof NodeType && ( (NodeType) children[i] ).getGetterClass() != null )
             {
                 lastType = (NodeType) children[i];
             }
diff --git a/src/main/java/org/apache/commons/ognl/ASTStaticField.java b/src/main/java/org/apache/commons/ognl/ASTStaticField.java
index 7357b93..f6f4ad8 100644
--- a/src/main/java/org/apache/commons/ognl/ASTStaticField.java
+++ b/src/main/java/org/apache/commons/ognl/ASTStaticField.java
@@ -92,15 +92,7 @@
                 result = Modifier.isFinal( field.getModifiers() );
             }
         }
-        catch ( ClassNotFoundException e )
-        {
-            cause = e;
-        }
-        catch ( NoSuchFieldException e )
-        {
-            cause = e;
-        }
-        catch ( SecurityException e )
+        catch ( ClassNotFoundException | SecurityException | NoSuchFieldException e )
         {
             cause = e;
         }
@@ -138,15 +130,7 @@
 
             return field.getType();
         }
-        catch ( ClassNotFoundException e )
-        {
-            cause = e;
-        }
-        catch ( NoSuchFieldException e )
-        {
-            cause = e;
-        }
-        catch ( SecurityException e )
+        catch ( ClassNotFoundException | SecurityException | NoSuchFieldException e )
         {
             cause = e;
         }
diff --git a/src/main/java/org/apache/commons/ognl/ASTStaticMethod.java b/src/main/java/org/apache/commons/ognl/ASTStaticMethod.java
index c41a8bb..7134dfc 100644
--- a/src/main/java/org/apache/commons/ognl/ASTStaticMethod.java
+++ b/src/main/java/org/apache/commons/ognl/ASTStaticMethod.java
@@ -84,7 +84,7 @@
 
     public String toGetSourceString( OgnlContext context, Object target )
     {
-        String result = className + "#" + methodName + "(";
+        StringBuilder result = new StringBuilder(className + "#" + methodName + "(");
 
         try
         {
@@ -113,7 +113,7 @@
                 {
                     if ( i > 0 )
                     {
-                        result = result + ", ";
+                        result.append(", ");
                     }
 
                     Class prevType = context.getCurrentType();
@@ -150,7 +150,7 @@
                                 + ")org.apache.commons.ognl.OgnlOps.convertValue(" + parmString + ","
                                 + parms[i].getName() + ".class)", parms[i] );
                         }
-                        else if ( ( NodeType.class.isInstance( child ) && ( (NodeType) child ).getGetterClass() != null
+                        else if ( ( child instanceof NodeType && ( (NodeType) child ).getGetterClass() != null
                             && Number.class.isAssignableFrom( ( (NodeType) child ).getGetterClass() ) )
                             || valueClass.isPrimitive() )
                         {
@@ -162,11 +162,11 @@
                         }
                     }
 
-                    result += parmString;
+                    result.append(parmString);
                 }
             }
 
-            result += ")";
+            result.append(")");
 
             try
             {
@@ -192,7 +192,7 @@
             throw OgnlOps.castToRuntime( t );
         }
 
-        return result;
+        return result.toString();
     }
 
     public String toSetSourceString( OgnlContext context, Object target )
diff --git a/src/main/java/org/apache/commons/ognl/ASTTest.java b/src/main/java/org/apache/commons/ognl/ASTTest.java
index 0d9ead9..62bb200 100644
--- a/src/main/java/org/apache/commons/ognl/ASTTest.java
+++ b/src/main/java/org/apache/commons/ognl/ASTTest.java
@@ -82,7 +82,7 @@
                 first = OgnlRuntime.getCompiler( context ).createLocalReference( context, first, context.getCurrentType() );
             }
 
-            if ( ExpressionNode.class.isInstance( children[0] ) )
+            if (children[0] instanceof ExpressionNode)
             {
                 first = "(" + first + ")";
             }
@@ -95,7 +95,7 @@
                 second = OgnlRuntime.getCompiler( context ).createLocalReference( context, second, context.getCurrentType() );
             }
 
-            if ( ExpressionNode.class.isInstance( children[1] ) )
+            if (children[1] instanceof ExpressionNode)
             {
                 second = "(" + second + ")";
             }
@@ -109,7 +109,7 @@
 
             }
 
-            if ( ExpressionNode.class.isInstance( children[2] ) )
+            if (children[2] instanceof ExpressionNode)
             {
                 third = "(" + third + ")";
             }
diff --git a/src/main/java/org/apache/commons/ognl/ASTVarRef.java b/src/main/java/org/apache/commons/ognl/ASTVarRef.java
index 28f8c2d..53d5fef 100644
--- a/src/main/java/org/apache/commons/ognl/ASTVarRef.java
+++ b/src/main/java/org/apache/commons/ognl/ASTVarRef.java
@@ -124,7 +124,7 @@
             post = ")";
         }
 
-        if ( parent != null && ASTAssign.class.isInstance( parent ) )
+        if ( parent != null && parent instanceof ASTAssign)
         {
             core = "$1.put(\"" + name + "\",";
             last = pre + "$1.get(\"" + name + "\")" + post;
diff --git a/src/main/java/org/apache/commons/ognl/ArrayPropertyAccessor.java b/src/main/java/org/apache/commons/ognl/ArrayPropertyAccessor.java
index ca6094f..5c32cf0 100644
--- a/src/main/java/org/apache/commons/ognl/ArrayPropertyAccessor.java
+++ b/src/main/java/org/apache/commons/ognl/ArrayPropertyAccessor.java
@@ -184,7 +184,7 @@
             // means it needs to be cast first as well
 
             String toString =
-                String.class.isInstance( index ) && context.getCurrentType() != Object.class ? "" : ".toString()";
+                index instanceof String && context.getCurrentType() != Object.class ? "" : ".toString()";
 
             indexStr = format( "org.apache.commons.ognl.OgnlOps#getIntValue(%s%s)", indexStr, toString );
         }
diff --git a/src/main/java/org/apache/commons/ognl/Evaluation.java b/src/main/java/org/apache/commons/ognl/Evaluation.java
index 7b1b121..e348dac 100644
--- a/src/main/java/org/apache/commons/ognl/Evaluation.java
+++ b/src/main/java/org/apache/commons/ognl/Evaluation.java
@@ -277,33 +277,32 @@
      */
     public String toString( boolean compact, boolean showChildren, String depth )
     {
-        String stringResult;
+        StringBuilder stringResult;
 
         if ( compact )
         {
-            stringResult = depth + "<" + node.getClass().getName() + " " + System.identityHashCode( this ) + ">";
+            stringResult = new StringBuilder(depth + "<" + node.getClass().getName() + " " + System.identityHashCode(this) + ">");
         }
         else
         {
             String ss = ( source != null ) ? source.getClass().getName() : "null", rs =
                 ( result != null ) ? result.getClass().getName() : "null";
 
-            stringResult =
-                depth + "<" + node.getClass().getName() + ": [" + ( setOperation ? "set" : "get" ) + "] source = " + ss
-                    + ", result = " + result + " [" + rs + "]>";
+            stringResult = new StringBuilder(depth + "<" + node.getClass().getName() + ": [" + (setOperation ? "set" : "get") + "] source = " + ss
+                    + ", result = " + result + " [" + rs + "]>");
         }
         if ( showChildren )
         {
             Evaluation child = firstChild;
 
-            stringResult += "\n";
+            stringResult.append("\n");
             while ( child != null )
             {
-                stringResult += child.toString( compact, depth + "  " );
+                stringResult.append(child.toString(compact, depth + "  "));
                 child = child.next;
             }
         }
-        return stringResult;
+        return stringResult.toString();
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/ognl/ExpressionNode.java b/src/main/java/org/apache/commons/ognl/ExpressionNode.java
index 76e4a7b..4fdf017 100644
--- a/src/main/java/org/apache/commons/ognl/ExpressionNode.java
+++ b/src/main/java/org/apache/commons/ognl/ExpressionNode.java
@@ -94,13 +94,13 @@
 
                 String value = children[i].toGetSourceString( context, target );
 
-                if ( ( ASTProperty.class.isInstance( children[i] ) || ASTMethod.class.isInstance( children[i] )
-                    || ASTSequence.class.isInstance( children[i] ) || ASTChain.class.isInstance( children[i] ) )
+                if ( ( children[i] instanceof ASTProperty || children[i] instanceof ASTMethod
+                    || children[i] instanceof ASTSequence || children[i] instanceof ASTChain)
                     && value != null && !value.trim().isEmpty() )
                 {
 
                     String pre = null;
-                    if ( ASTMethod.class.isInstance( children[i] ) )
+                    if (children[i] instanceof ASTMethod)
                     {
                         pre = (String) context.get( "_currentChain" );
                     }
diff --git a/src/main/java/org/apache/commons/ognl/ListPropertyAccessor.java b/src/main/java/org/apache/commons/ognl/ListPropertyAccessor.java
index cfc955d..bafd9cc 100644
--- a/src/main/java/org/apache/commons/ognl/ListPropertyAccessor.java
+++ b/src/main/java/org/apache/commons/ognl/ListPropertyAccessor.java
@@ -183,7 +183,7 @@
     {
         String indexStr = index.toString().replace( "\"", "" );
 
-        if ( String.class.isInstance( index ) )
+        if (index instanceof String)
         {
             if ( "size".equals( indexStr ) )
             {
@@ -231,7 +231,7 @@
     {
         Object currentObject = context.getCurrentObject();
         Class<?> currentType = context.getCurrentType();
-        if ( currentObject != null && !Number.class.isInstance( currentObject ) )
+        if ( currentObject != null && !(currentObject instanceof Number))
         {
             try
             {
@@ -274,7 +274,7 @@
         {
             // means it needs to be cast first as well
 
-            String toString = String.class.isInstance( index ) && currentType != Object.class ? "" : ".toString()";
+            String toString = index instanceof String && currentType != Object.class ? "" : ".toString()";
 
             indexStr = "org.apache.commons.ognl.OgnlOps#getIntValue(" + indexStr + toString + ")";
         }
diff --git a/src/main/java/org/apache/commons/ognl/MapPropertyAccessor.java b/src/main/java/org/apache/commons/ognl/MapPropertyAccessor.java
index 833ab5e..df526d4 100644
--- a/src/main/java/org/apache/commons/ognl/MapPropertyAccessor.java
+++ b/src/main/java/org/apache/commons/ognl/MapPropertyAccessor.java
@@ -118,7 +118,7 @@
         context.setCurrentAccessor( Map.class );
         context.setCurrentType( Object.class );
 
-        if ( String.class.isInstance( index ) && !indexedAccess )
+        if ( index instanceof String && !indexedAccess )
         {
             String key = indexStr.replace( "\"", "" );
 
@@ -154,7 +154,7 @@
 
         String indexStr = index.toString();
 
-        if ( String.class.isInstance( index ) )
+        if (index instanceof String)
         {
             String key = indexStr.replace( "\"", "" );
 
diff --git a/src/main/java/org/apache/commons/ognl/NumericExpression.java b/src/main/java/org/apache/commons/ognl/NumericExpression.java
index 06dc46a..266ba46 100644
--- a/src/main/java/org/apache/commons/ognl/NumericExpression.java
+++ b/src/main/java/org/apache/commons/ognl/NumericExpression.java
@@ -108,13 +108,13 @@
         StringBuilder ret = new StringBuilder( source );
         Object value = context.getCurrentObject();
 
-        if ( ASTConst.class.isInstance( child ) && value != null )
+        if ( child instanceof ASTConst && value != null )
         {
             return value.toString();
         }
 
         if ( context.getCurrentType() != null && !context.getCurrentType().isPrimitive()
-            && context.getCurrentObject() != null && Number.class.isInstance( context.getCurrentObject() ) )
+            && context.getCurrentObject() != null && context.getCurrentObject() instanceof Number)
         {
             ret = new StringBuilder( "((" ).append(
                 ExpressionCompiler.getCastString( context.getCurrentObject().getClass() ) ).append( ")" ).append(
@@ -122,7 +122,7 @@
                 OgnlRuntime.getNumericValueGetter( context.getCurrentObject().getClass() ) );
         }
         else if ( context.getCurrentType() != null && context.getCurrentType().isPrimitive()
-            && ( ASTConst.class.isInstance( child ) || NumericExpression.class.isInstance( child ) ) )
+            && ( child instanceof ASTConst || child instanceof NumericExpression) )
         {
             @SuppressWarnings( "unchecked" ) // checked by the condition in the if clause
             Class<? extends Number> numberClass = (Class<? extends Number>) context.getCurrentType();
@@ -136,7 +136,7 @@
             context.setCurrentType( Double.TYPE );
         }
 
-        if ( NumericExpression.class.isInstance( child ) )
+        if (child instanceof NumericExpression)
         {
             ret = new StringBuilder( "(" ).append( ret ).append( ")" );
         }
diff --git a/src/main/java/org/apache/commons/ognl/ObjectPropertyAccessor.java b/src/main/java/org/apache/commons/ognl/ObjectPropertyAccessor.java
index 39d52e9..ba5c743 100644
--- a/src/main/java/org/apache/commons/ognl/ObjectPropertyAccessor.java
+++ b/src/main/java/org/apache/commons/ognl/ObjectPropertyAccessor.java
@@ -52,16 +52,10 @@
             {
                 result = OgnlRuntime.getFieldValue( ognlContext, target, name, true );
             }
-        }
-        catch ( IntrospectionException ex )
-        {
-            throw new OgnlException( name, ex );
-        }
-        catch ( OgnlException ex )
+        } catch ( OgnlException ex )
         {
             throw ex;
-        }
-        catch ( Exception ex )
+        } catch ( Exception ex )
         {
             throw new OgnlException( name, ex );
         }
@@ -93,16 +87,10 @@
                     result = m.invoke( target, value );
                 }
             }
-        }
-        catch ( IntrospectionException ex )
-        {
-            throw new OgnlException( name, ex );
-        }
-        catch ( OgnlException ex )
+        } catch ( OgnlException ex )
         {
             throw ex;
-        }
-        catch ( Exception ex )
+        } catch ( Exception ex )
         {
             throw new OgnlException( name, ex );
         }
diff --git a/src/main/java/org/apache/commons/ognl/Ognl.java b/src/main/java/org/apache/commons/ognl/Ognl.java
index 16616f7..6d1394b 100644
--- a/src/main/java/org/apache/commons/ognl/Ognl.java
+++ b/src/main/java/org/apache/commons/ognl/Ognl.java
@@ -111,11 +111,7 @@
             OgnlParser parser = new OgnlParser( new StringReader( expression ) );
             return parser.topLevelExpression();
         }
-        catch ( ParseException e )
-        {
-            throw new ExpressionSyntaxException( expression, e );
-        }
-        catch ( TokenMgrError e )
+        catch ( ParseException | TokenMgrError e )
         {
             throw new ExpressionSyntaxException( expression, e );
         }
diff --git a/src/main/java/org/apache/commons/ognl/OgnlCache.java b/src/main/java/org/apache/commons/ognl/OgnlCache.java
index 6a0fe58..2d836d2 100644
--- a/src/main/java/org/apache/commons/ognl/OgnlCache.java
+++ b/src/main/java/org/apache/commons/ognl/OgnlCache.java
@@ -112,14 +112,7 @@
         cacheFactory.createClassCache( new PropertyDescriptorCacheEntryFactory() );
 
     private final ClassCache<List<Constructor<?>>> constructorCache =
-        cacheFactory.createClassCache( new ClassCacheEntryFactory<List<Constructor<?>>>()
-        {
-            public List<Constructor<?>> create( Class<?> key )
-                throws CacheException
-            {
-                return Arrays.<Constructor<?>>asList( key.getConstructors() );
-            }
-        } );
+        cacheFactory.createClassCache(key -> Arrays.<Constructor<?>>asList( key.getConstructors() ));
 
     private final Cache<DeclaredMethodCacheEntry, Map<String, List<Method>>> _methodCache =
         cacheFactory.createCache( new DeclaredMethodCacheEntryFactory() );
@@ -131,26 +124,13 @@
         cacheFactory.createClassCache( new FieldCacheEntryFactory() );
 
     private final Cache<Method, Class<?>[]> _methodParameterTypesCache =
-        cacheFactory.createCache( new CacheEntryFactory<Method, Class<?>[]>()
-        {
-            public Class<?>[] create( Method key )
-                throws CacheException
-            {
-                return key.getParameterTypes( );
-            }
-        } );
+        cacheFactory.createCache(Method::getParameterTypes);
 
     private final Cache<GenericMethodParameterTypeCacheEntry, Class<?>[]> _genericMethodParameterTypesCache =
         cacheFactory.createCache( new GenericMethodParameterTypeFactory() );
 
     private final Cache<Constructor<?>, Class<?>[]> _ctorParameterTypesCache =
-        cacheFactory.createCache( new CacheEntryFactory<Constructor<?>, Class<?>[]>()
-        {
-            public Class<?>[] create( Constructor<?> key ) throws CacheException
-            {
-                return key.getParameterTypes( );
-            }
-        } );
+        cacheFactory.createCache(Constructor::getParameterTypes);
 
     private final Cache<Method, MethodAccessEntryValue> _methodAccessCache =
         cacheFactory.createCache( new MethodAccessCacheEntryFactory( ) );
diff --git a/src/main/java/org/apache/commons/ognl/OgnlOps.java b/src/main/java/org/apache/commons/ognl/OgnlOps.java
index 6254e20..58fd1c7 100644
--- a/src/main/java/org/apache/commons/ognl/OgnlOps.java
+++ b/src/main/java/org/apache/commons/ognl/OgnlOps.java
@@ -87,13 +87,13 @@
                     double dv1 = doubleValue( v1 ),
                     dv2 = doubleValue( v2 );
 
-                    return ( dv1 == dv2 ) ? 0 : ( ( dv1 < dv2 ) ? -1 : 1 );
+                    return Double.compare(dv1, dv2);
 
                 default:
                     long lv1 = longValue( v1 ),
                     lv2 = longValue( v2 );
 
-                    return ( lv1 == lv2 ) ? 0 : ( ( lv1 < lv2 ) ? -1 : 1 );
+                    return Long.compare(lv1, lv2);
             }
         }
         return result;
@@ -798,13 +798,13 @@
                 return -1;
             }
 
-            if ( Number.class.isInstance( value ) )
+            if (value instanceof Number)
             {
 
                 return ( (Number) value ).intValue();
             }
 
-            String str = String.class.isInstance( value ) ? (String) value : value.toString();
+            String str = value instanceof String ? (String) value : value.toString();
 
             return Integer.parseInt( str );
         }
@@ -1292,12 +1292,12 @@
      */
     public static RuntimeException castToRuntime( Throwable t )
     {
-        if ( RuntimeException.class.isInstance( t ) )
+        if (t instanceof RuntimeException)
         {
             return (RuntimeException) t;
         }
 
-        if ( OgnlException.class.isInstance( t ) )
+        if (t instanceof OgnlException)
         {
             throw new UnsupportedCompilationException( "Error evluating expression: " + t.getMessage(), t );
         }
diff --git a/src/main/java/org/apache/commons/ognl/OgnlRuntime.java b/src/main/java/org/apache/commons/ognl/OgnlRuntime.java
index 755adea..338fed3 100644
--- a/src/main/java/org/apache/commons/ognl/OgnlRuntime.java
+++ b/src/main/java/org/apache/commons/ognl/OgnlRuntime.java
@@ -122,7 +122,7 @@
      */
     private static final String NULL_OBJECT_STRING = "<null>";
 
-    static OgnlCache cache = new OgnlCache();
+    static final OgnlCache cache = new OgnlCache();
 
     private static final PrimitiveTypes primitiveTypes = new PrimitiveTypes();
 
@@ -395,8 +395,7 @@
     public static Class<?>[] findParameterTypes( Class<?> type, Method method )
         throws CacheException
     {
-        if ( type == null || type.getGenericSuperclass() == null || !ParameterizedType.class.isInstance(
-            type.getGenericSuperclass() ) || method.getDeclaringClass().getTypeParameters() == null )
+        if ( type == null || type.getGenericSuperclass() == null || !(type.getGenericSuperclass() instanceof ParameterizedType) || method.getDeclaringClass().getTypeParameters() == null )
         {
             return getParameterTypes( method );
         }
@@ -809,7 +808,7 @@
             for ( Method method : methods )
             {
                 Class<?> typeClass = target != null ? target.getClass() : null;
-                if ( typeClass == null && source != null && Class.class.isInstance( source ) )
+                if ( typeClass == null && source != null && source instanceof Class)
                 {
                     typeClass = (Class<?>) source;
                 }
@@ -927,15 +926,10 @@
             return invokeMethod( target, method, convertedArgs );
 
         }
-        catch ( NoSuchMethodException e )
+        catch ( NoSuchMethodException | IllegalAccessException e )
         {
             cause = e;
-        }
-        catch ( IllegalAccessException e )
-        {
-            cause = e;
-        }
-        catch ( InvocationTargetException e )
+        } catch ( InvocationTargetException e )
         {
             cause = e.getTargetException();
         }
@@ -1019,26 +1013,13 @@
             }
             return ctor.newInstance( actualArgs );
         }
-        catch ( ClassNotFoundException e )
+        catch ( ClassNotFoundException | InstantiationException | IllegalAccessException | NoSuchMethodException e )
         {
             cause = e;
-        }
-        catch ( NoSuchMethodException e )
-        {
-            cause = e;
-        }
-        catch ( IllegalAccessException e )
-        {
-            cause = e;
-        }
-        catch ( InvocationTargetException e )
+        } catch ( InvocationTargetException e )
         {
             cause = e.getTargetException();
         }
-        catch ( InstantiationException e )
-        {
-            cause = e;
-        }
 
         throw new MethodFailedException( className, "new", cause );
     }
@@ -1296,19 +1277,7 @@
 
             return field.get( null );
         }
-        catch ( ClassNotFoundException e )
-        {
-            cause = e;
-        }
-        catch ( NoSuchFieldException e )
-        {
-            cause = e;
-        }
-        catch ( SecurityException e )
-        {
-            cause = e;
-        }
-        catch ( IllegalAccessException e )
+        catch ( ClassNotFoundException | IllegalAccessException | SecurityException | NoSuchFieldException e )
         {
             cause = e;
         }
@@ -2116,7 +2085,7 @@
 
         // handle root / method expressions that may not have proper root java source access
 
-        if ( !ASTConst.class.isInstance( child ) && ( target == null || context.getRoot() != target ) )
+        if ( !(child instanceof ASTConst) && ( target == null || context.getRoot() != target ) )
         {
             source = pre + source;
         }
@@ -2127,7 +2096,7 @@
             context.setCurrentAccessor( context.getRoot().getClass() );
         }
 
-        if ( ASTChain.class.isInstance( child ) )
+        if (child instanceof ASTChain)
         {
             String cast = (String) context.remove( ExpressionCompiler.PRE_CAST );
             if ( cast == null )
diff --git a/src/main/java/org/apache/commons/ognl/SimpleNode.java b/src/main/java/org/apache/commons/ognl/SimpleNode.java
index 8247731..97f4d19 100644
--- a/src/main/java/org/apache/commons/ognl/SimpleNode.java
+++ b/src/main/java/org/apache/commons/ognl/SimpleNode.java
@@ -243,17 +243,11 @@
             {
                 result = evaluateGetValueBody( context, source );
             }
-            catch ( OgnlException ex )
+            catch ( OgnlException | RuntimeException ex )
             {
                 evalException = ex;
                 throw ex;
-            }
-            catch ( RuntimeException ex )
-            {
-                evalException = ex;
-                throw ex;
-            }
-            finally
+            } finally
             {
                 Evaluation eval = context.popEvaluation();
 
diff --git a/src/main/java/org/apache/commons/ognl/enhance/ExpressionCompiler.java b/src/main/java/org/apache/commons/ognl/enhance/ExpressionCompiler.java
index 3eed6a8..628af40 100644
--- a/src/main/java/org/apache/commons/ognl/enhance/ExpressionCompiler.java
+++ b/src/main/java/org/apache/commons/ognl/enhance/ExpressionCompiler.java
@@ -148,27 +148,26 @@
             return rootExpr;
         }
 
-        if ( ( !ASTList.class.isInstance( expression ) && !ASTVarRef.class.isInstance( expression )
-            && !ASTStaticMethod.class.isInstance( expression ) && !ASTStaticField.class.isInstance( expression )
-            && !ASTConst.class.isInstance( expression ) && !ExpressionNode.class.isInstance( expression )
-            && !ASTCtor.class.isInstance( expression ) && !ASTStaticMethod.class.isInstance( expression )
-            && root != null ) || ( root != null && ASTRootVarRef.class.isInstance( expression ) ) )
+        if ( ( !(expression instanceof ASTList) && !(expression instanceof ASTVarRef)
+            && !(expression instanceof ASTStaticMethod) && !(expression instanceof ASTStaticField)
+            && !(expression instanceof ASTConst) && !(expression instanceof ExpressionNode)
+            && !(expression instanceof ASTCtor) && !(expression instanceof ASTStaticMethod)
+            && root != null ) || ( root != null && expression instanceof ASTRootVarRef) )
         {
 
             Class<?> castClass = OgnlRuntime.getCompiler( context ).getRootExpressionClass( expression, context );
 
-            if ( castClass.isArray() || ASTRootVarRef.class.isInstance( expression ) || ASTThisVarRef.class.isInstance(
-                expression ) )
+            if ( castClass.isArray() || expression instanceof ASTRootVarRef || expression instanceof ASTThisVarRef)
             {
                 rootExpr = "((" + getCastString( castClass ) + ")$2)";
 
-                if ( ASTProperty.class.isInstance( expression ) && !( (ASTProperty) expression ).isIndexedAccess() )
+                if ( expression instanceof ASTProperty && !( (ASTProperty) expression ).isIndexedAccess() )
                 {
                     rootExpr += ".";
                 }
             }
-            else if ( ( ASTProperty.class.isInstance( expression ) && ( (ASTProperty) expression ).isIndexedAccess() )
-                || ASTChain.class.isInstance( expression ) )
+            else if ( ( expression instanceof ASTProperty && ( (ASTProperty) expression ).isIndexedAccess() )
+                || expression instanceof ASTChain)
             {
                 rootExpr = "((" + getCastString( castClass ) + ")$2)";
             }
@@ -190,18 +189,18 @@
      */
     public static boolean shouldCast( Node expression )
     {
-        if ( ASTChain.class.isInstance( expression ) )
+        if (expression instanceof ASTChain)
         {
             Node child = expression.jjtGetChild( 0 );
-            if ( ASTConst.class.isInstance( child ) || ASTStaticMethod.class.isInstance( child )
-                || ASTStaticField.class.isInstance( child ) || ( ASTVarRef.class.isInstance( child )
-                && !ASTRootVarRef.class.isInstance( child ) ) )
+            if ( child instanceof ASTConst || child instanceof ASTStaticMethod
+                || child instanceof ASTStaticField || ( child instanceof ASTVarRef
+                && !(child instanceof ASTRootVarRef)) )
             {
                 return false;
             }
         }
 
-        return !ASTConst.class.isInstance( expression );
+        return !(expression instanceof ASTConst);
     }
 
     /**
@@ -218,11 +217,11 @@
                 && context.getCurrentAccessor().isAssignableFrom( context.getPreviousType() ) ) || body == null
             || body.trim().length() < 1 || ( context.getCurrentType() != null && context.getCurrentType().isArray() && (
             context.getPreviousType() == null || context.getPreviousType() != Object.class ) )
-            || ASTOr.class.isInstance( expression ) || ASTAnd.class.isInstance( expression )
-            || ASTRootVarRef.class.isInstance( expression ) || context.getCurrentAccessor() == Class.class || (
+            || expression instanceof ASTOr || expression instanceof ASTAnd
+            || expression instanceof ASTRootVarRef || context.getCurrentAccessor() == Class.class || (
             context.get( ExpressionCompiler.PRE_CAST ) != null && ( (String) context.get(
-                ExpressionCompiler.PRE_CAST ) ).startsWith( "new" ) ) || ASTStaticField.class.isInstance( expression )
-            || ASTStaticMethod.class.isInstance( expression ) || ( OrderedReturn.class.isInstance( expression )
+                ExpressionCompiler.PRE_CAST ) ).startsWith( "new" ) ) || expression instanceof ASTStaticField
+            || expression instanceof ASTStaticMethod || ( expression instanceof OrderedReturn
             && ( (OrderedReturn) expression ).getLastExpression() != null ) )
         {
             return body;
@@ -619,10 +618,10 @@
 
         createLocalReferences( context, classPool, newClass, objClass, valueGetter.getParameterTypes() );
 
-        if ( OrderedReturn.class.isInstance( expression )
+        if ( expression instanceof OrderedReturn
             && ( (OrderedReturn) expression ).getLastExpression() != null )
         {
-            body = "{ " + ( ASTMethod.class.isInstance( expression ) || ASTChain.class.isInstance( expression )
+            body = "{ " + ( expression instanceof ASTMethod || expression instanceof ASTChain
                 ? rootExpr
                 : "" ) + ( castExpression != null ? castExpression : "" )
                 + ( (OrderedReturn) expression ).getCoreExpression() + " return " + pre
@@ -697,7 +696,7 @@
                                      CtMethod valueSetter, Node expression, Object root )
         throws Exception
     {
-        if ( ExpressionNode.class.isInstance( expression ) || ASTConst.class.isInstance( expression ) )
+        if ( expression instanceof ExpressionNode || expression instanceof ASTConst)
         {
             throw new UnsupportedCompilationException( "Can't compile expression/constant setters." );
         }
diff --git a/src/main/java/org/apache/commons/ognl/internal/entry/GenericMethodParameterTypeCacheEntry.java b/src/main/java/org/apache/commons/ognl/internal/entry/GenericMethodParameterTypeCacheEntry.java
index b3c4ca7..7e7d424 100644
--- a/src/main/java/org/apache/commons/ognl/internal/entry/GenericMethodParameterTypeCacheEntry.java
+++ b/src/main/java/org/apache/commons/ognl/internal/entry/GenericMethodParameterTypeCacheEntry.java
@@ -28,9 +28,9 @@
 public class GenericMethodParameterTypeCacheEntry
     implements CacheEntry
 {
-    Method method;
+    final Method method;
 
-    Class<?> type;
+    final Class<?> type;
 
     public GenericMethodParameterTypeCacheEntry( Method method, Class<?> type )
     {
diff --git a/src/main/java/org/apache/commons/ognl/internal/entry/GenericMethodParameterTypeFactory.java b/src/main/java/org/apache/commons/ognl/internal/entry/GenericMethodParameterTypeFactory.java
index 2e6e5d8..55af62b 100644
--- a/src/main/java/org/apache/commons/ognl/internal/entry/GenericMethodParameterTypeFactory.java
+++ b/src/main/java/org/apache/commons/ognl/internal/entry/GenericMethodParameterTypeFactory.java
@@ -49,20 +49,20 @@
         {
             TypeVariable<?> paramType = null;
 
-            if ( TypeVariable.class.isInstance( genTypes[i] ) )
+            if (genTypes[i] instanceof TypeVariable)
             {
                 paramType = (TypeVariable<?>) genTypes[i];
             }
-            else if ( GenericArrayType.class.isInstance( genTypes[i] ) )
+            else if (genTypes[i] instanceof GenericArrayType)
             {
                 paramType = (TypeVariable<?>) ( (GenericArrayType) genTypes[i] ).getGenericComponentType();
             }
-            else if ( ParameterizedType.class.isInstance( genTypes[i] ) )
+            else if (genTypes[i] instanceof ParameterizedType)
             {
                 types[i] = (Class<?>) ( (ParameterizedType) genTypes[i] ).getRawType();
                 continue;
             }
-            else if ( Class.class.isInstance( genTypes[i] ) )
+            else if (genTypes[i] instanceof Class)
             {
                 types[i] = (Class<?>) genTypes[i];
                 continue;
@@ -72,7 +72,7 @@
 
             if ( resolved != null )
             {
-                if ( GenericArrayType.class.isInstance( genTypes[i] ) )
+                if (genTypes[i] instanceof GenericArrayType)
                 {
                     resolved = Array.newInstance( resolved, 0 ).getClass();
                 }
@@ -95,7 +95,7 @@
 
         for ( int i = 0; i < declaredTypes.length; i++ )
         {
-            if ( !TypeVariable.class.isInstance( param.getActualTypeArguments()[i] )
+            if ( !(param.getActualTypeArguments()[i] instanceof TypeVariable)
                 && declaredTypes[i].getName().equals( var.getName() ) )
             {
                 return (Class<?>) param.getActualTypeArguments()[i];
diff --git a/src/main/java/org/apache/commons/ognl/internal/entry/MethodCacheEntry.java b/src/main/java/org/apache/commons/ognl/internal/entry/MethodCacheEntry.java
index cfb126a..cccaf78 100644
--- a/src/main/java/org/apache/commons/ognl/internal/entry/MethodCacheEntry.java
+++ b/src/main/java/org/apache/commons/ognl/internal/entry/MethodCacheEntry.java
@@ -26,7 +26,7 @@
 public class MethodCacheEntry
     implements CacheEntry
 {
-    public Class<?> targetClass;
+    public final Class<?> targetClass;
 
     public MethodCacheEntry( Class<?> targetClass )
     {
diff --git a/src/main/java/org/apache/commons/ognl/internal/entry/MethodCacheEntryFactory.java b/src/main/java/org/apache/commons/ognl/internal/entry/MethodCacheEntryFactory.java
index 58c82cb..95b0f72 100644
--- a/src/main/java/org/apache/commons/ognl/internal/entry/MethodCacheEntryFactory.java
+++ b/src/main/java/org/apache/commons/ognl/internal/entry/MethodCacheEntryFactory.java
@@ -55,13 +55,7 @@
 
                 if ( shouldCache( key, method ) )
                 {
-                    List<Method> ml = result.get( method.getName() );
-
-                    if ( ml == null )
-                    {
-                        ml = new ArrayList<Method>();
-                        result.put( method.getName(), ml );
-                    }
+                    List<Method> ml = result.computeIfAbsent(method.getName(), k -> new ArrayList<Method>());
 
                     ml.add( method );
                 }
diff --git a/src/main/java/org/apache/commons/ognl/internal/entry/PermissionCacheEntry.java b/src/main/java/org/apache/commons/ognl/internal/entry/PermissionCacheEntry.java
index 52405dd..68c0890 100644
--- a/src/main/java/org/apache/commons/ognl/internal/entry/PermissionCacheEntry.java
+++ b/src/main/java/org/apache/commons/ognl/internal/entry/PermissionCacheEntry.java
@@ -28,7 +28,7 @@
 public class PermissionCacheEntry
     implements CacheEntry
 {
-    public Method method;
+    public final Method method;
 
     public PermissionCacheEntry( Method method )
     {
diff --git a/src/main/java/org/apache/commons/ognl/internal/entry/PropertyDescriptorCacheEntryFactory.java b/src/main/java/org/apache/commons/ognl/internal/entry/PropertyDescriptorCacheEntryFactory.java
index 3c8616c..67e5a03 100644
--- a/src/main/java/org/apache/commons/ognl/internal/entry/PropertyDescriptorCacheEntryFactory.java
+++ b/src/main/java/org/apache/commons/ognl/internal/entry/PropertyDescriptorCacheEntryFactory.java
@@ -67,11 +67,7 @@
 
             findObjectIndexedPropertyDescriptors( targetClass, result );
         }
-        catch ( IntrospectionException e )
-        {
-            throw new CacheException( e );
-        }
-        catch ( OgnlException e )
+        catch ( IntrospectionException | OgnlException e )
         {
             throw new CacheException( e );
         }
@@ -127,22 +123,14 @@
 
                     if ( isGet && ( parameterCount == 1 ) && ( method.getReturnType() != Void.TYPE ) )
                     {
-                        List<Method> pair = pairs.get( propertyName );
+                        List<Method> pair = pairs.computeIfAbsent(propertyName, k -> new ArrayList<Method>());
 
-                        if ( pair == null )
-                        {
-                            pairs.put( propertyName, pair = new ArrayList<Method>() );
-                        }
                         pair.add( method );
                     }
                     if ( isSet && ( parameterCount == 2 ) && ( method.getReturnType() == Void.TYPE ) )
                     {
-                        List<Method> pair = pairs.get( propertyName );
+                        List<Method> pair = pairs.computeIfAbsent(propertyName, k -> new ArrayList<Method>());
 
-                        if ( pair == null )
-                        {
-                            pairs.put( propertyName, pair = new ArrayList<Method>() );
-                        }
                         pair.add( method );
                     }
                 }
diff --git a/src/test/java/org/apache/commons/ognl/TestOgnlRuntime.java b/src/test/java/org/apache/commons/ognl/TestOgnlRuntime.java
index 3ad0f6a..677ea2c 100644
--- a/src/test/java/org/apache/commons/ognl/TestOgnlRuntime.java
+++ b/src/test/java/org/apache/commons/ognl/TestOgnlRuntime.java
@@ -205,7 +205,7 @@
         SetterReturns root = new SetterReturns();
 
         Method m = OgnlRuntime.getWriteMethod( root.getClass(), "value" );
-        assertTrue( m != null );
+        assertNotNull(m);
 
         Ognl.setValue( "value", context, root, "12__" );
         assertEquals( Ognl.getValue( "value", context, root ), "12__" );
diff --git a/src/test/java/org/apache/commons/ognl/test/ASTPropertyTest.java b/src/test/java/org/apache/commons/ognl/test/ASTPropertyTest.java
index 76c8b63..bdc8feb 100644
--- a/src/test/java/org/apache/commons/ognl/test/ASTPropertyTest.java
+++ b/src/test/java/org/apache/commons/ognl/test/ASTPropertyTest.java
@@ -63,18 +63,18 @@
         context.setCurrentNode( pRef );
 
         assertEquals( root.getClass(), context.getCurrentType() );
-        assertEquals( null, context.getPreviousType() );
+        assertNull(context.getPreviousType());
         assertEquals( root, context.getCurrentObject() );
-        assertEquals( null, context.getCurrentAccessor() );
-        assertEquals( null, context.getPreviousAccessor() );
+        assertNull(context.getCurrentAccessor());
+        assertNull(context.getPreviousAccessor());
 
         int type = p.getIndexedPropertyType( context, root );
 
         assertEquals( OgnlRuntime.INDEXED_PROPERTY_NONE, type );
         assertEquals( root.getClass(), context.getCurrentType() );
-        assertEquals( null, context.getPreviousType() );
-        assertEquals( null, context.getCurrentAccessor() );
-        assertEquals( null, context.getPreviousAccessor() );
+        assertNull(context.getPreviousType());
+        assertNull(context.getCurrentAccessor());
+        assertNull(context.getPreviousAccessor());
     }
 
     public void test_Get_Value_Body()
@@ -95,18 +95,18 @@
         context.setCurrentNode( pRef );
 
         assertEquals( root.getClass(), context.getCurrentType() );
-        assertEquals( null, context.getPreviousType() );
+        assertNull(context.getPreviousType());
         assertEquals( root, context.getCurrentObject() );
-        assertEquals( null, context.getCurrentAccessor() );
-        assertEquals( null, context.getPreviousAccessor() );
+        assertNull(context.getCurrentAccessor());
+        assertNull(context.getPreviousAccessor());
 
         Object value = p.getValue( context, root );
 
         assertEquals( root.get( "nested" ), value );
         assertEquals( root.getClass(), context.getCurrentType() );
-        assertEquals( null, context.getPreviousType() );
-        assertEquals( null, context.getCurrentAccessor() );
-        assertEquals( null, context.getPreviousAccessor() );
+        assertNull(context.getPreviousType());
+        assertNull(context.getCurrentAccessor());
+        assertNull(context.getPreviousAccessor());
     }
 
     public void test_Get_Source()
@@ -130,14 +130,14 @@
         assertEquals( Object.class, context.getCurrentType() );
         assertEquals( Map.class, context.getCurrentAccessor() );
         assertEquals( root.getClass(), context.getPreviousType() );
-        assertEquals( null, context.getPreviousAccessor() );
+        assertNull(context.getPreviousAccessor());
 
         assertEquals( root.get( "nested" ), context.getCurrentObject() );
 
         assert Map.class.isAssignableFrom( context.getCurrentAccessor() );
 
         assertEquals( root.getClass(), context.getPreviousType() );
-        assertEquals( null, context.getPreviousAccessor() );
+        assertNull(context.getPreviousAccessor());
     }
 
     public void test_Set_Source()
@@ -164,7 +164,7 @@
         assert Map.class.isAssignableFrom( context.getCurrentAccessor() );
 
         assertEquals( root.getClass(), context.getPreviousType() );
-        assertEquals( null, context.getPreviousAccessor() );
+        assertNull(context.getPreviousAccessor());
     }
 
     public void test_Indexed_Object_Type()
@@ -206,7 +206,7 @@
         assertEquals( ".getList()", listp.toGetSourceString( context, root ) );
         assertEquals( List.class, context.getCurrentType() );
         assertEquals( Root.class, context.getCurrentAccessor() );
-        assertEquals( null, context.getPreviousAccessor() );
+        assertNull(context.getPreviousAccessor());
         assertEquals( root.getClass(), context.getPreviousType() );
         assertEquals( root.getList(), context.getCurrentObject() );
 
@@ -225,7 +225,7 @@
         assertEquals( ".getList()", chain.toGetSourceString( context, root ) );
         assertEquals( List.class, context.getCurrentType() );
         assertEquals( Root.class, context.getCurrentAccessor() );
-        assertEquals( null, context.getPreviousAccessor() );
+        assertNull(context.getPreviousAccessor());
         assertEquals( Root.class, context.getPreviousType() );
         assertEquals( root.getList(), context.getCurrentObject() );
 
diff --git a/src/test/java/org/apache/commons/ognl/test/CompilingPropertyAccessor.java b/src/test/java/org/apache/commons/ognl/test/CompilingPropertyAccessor.java
index 675dac0..2b78a60 100644
--- a/src/test/java/org/apache/commons/ognl/test/CompilingPropertyAccessor.java
+++ b/src/test/java/org/apache/commons/ognl/test/CompilingPropertyAccessor.java
@@ -47,28 +47,16 @@
 
     private static final NameFactory NAME_FACTORY = new NameFactory( "ognl.PropertyAccessor", "v" );
 
-    private static final Getter NOT_FOUND_GETTER = new Getter()
-    {
+    private static final Getter NOT_FOUND_GETTER = (context, target, propertyName) -> null;
 
-        public Object get( OgnlContext context, Object target, String propertyName )
+    private static final Getter DEFAULT_GETTER = (context, target, propertyName) -> {
+        try
         {
-            return null;
+            return OgnlRuntime.getMethodValue( context, target, propertyName, true );
         }
-    };
-
-    private static final Getter DEFAULT_GETTER = new Getter()
-    {
-
-        public Object get( OgnlContext context, Object target, String propertyName )
+        catch ( Exception ex )
         {
-            try
-            {
-                return OgnlRuntime.getMethodValue( context, target, propertyName, true );
-            }
-            catch ( Exception ex )
-            {
-                throw new RuntimeException( ex );
-            }
+            throw new RuntimeException( ex );
         }
     };
 
diff --git a/src/test/java/org/apache/commons/ognl/test/ConstantTreeTest.java b/src/test/java/org/apache/commons/ognl/test/ConstantTreeTest.java
index 0f4723d..349a00d 100644
--- a/src/test/java/org/apache/commons/ognl/test/ConstantTreeTest.java
+++ b/src/test/java/org/apache/commons/ognl/test/ConstantTreeTest.java
@@ -24,6 +24,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
+import junit.framework.Assert;
 import org.apache.commons.ognl.Ognl;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -77,7 +78,7 @@
     public void runTest()
         throws Exception
     {
-        assertTrue( Ognl.isConstant( getExpression(), _context ) == ( (Boolean) getExpectedResult() ).booleanValue() );
+        Assert.assertEquals(Ognl.isConstant(getExpression(), _context), ((Boolean) getExpectedResult()).booleanValue());
     }
 
     /*
diff --git a/src/test/java/org/apache/commons/ognl/test/NumericConversionTest.java b/src/test/java/org/apache/commons/ognl/test/NumericConversionTest.java
index 04209e4..a78d8fb 100644
--- a/src/test/java/org/apache/commons/ognl/test/NumericConversionTest.java
+++ b/src/test/java/org/apache/commons/ognl/test/NumericConversionTest.java
@@ -27,6 +27,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
+import junit.framework.Assert;
 import org.apache.commons.ognl.OgnlException;
 import org.apache.commons.ognl.OgnlOps;
 import org.junit.Test;
@@ -213,7 +214,7 @@
                 double scalingFactor = Math.pow( 10, scale ), v1 = ( (Number) value ).doubleValue() * scalingFactor, v2 =
                     ( (Number) expectedValue ).doubleValue() * scalingFactor;
 
-                assertTrue( (int) v1 == (int) v2 );
+                Assert.assertEquals((int) v1, (int) v2);
             }
             else
             {
diff --git a/src/test/java/org/apache/commons/ognl/test/SimpleNavigationChainTreeTest.java b/src/test/java/org/apache/commons/ognl/test/SimpleNavigationChainTreeTest.java
index 23b0d93..a2171de 100644
--- a/src/test/java/org/apache/commons/ognl/test/SimpleNavigationChainTreeTest.java
+++ b/src/test/java/org/apache/commons/ognl/test/SimpleNavigationChainTreeTest.java
@@ -24,6 +24,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
+import junit.framework.Assert;
 import org.apache.commons.ognl.Ognl;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -78,6 +79,6 @@
     public void runTest()
         throws Exception
     {
-        assertTrue( Ognl.isSimpleNavigationChain( getExpression(), _context ) == ( (Boolean) getExpectedResult() ).booleanValue() );
+        Assert.assertEquals(Ognl.isSimpleNavigationChain(getExpression(), _context), ((Boolean) getExpectedResult()).booleanValue());
     }
 }
diff --git a/src/test/java/org/apache/commons/ognl/test/SimplePropertyTreeTest.java b/src/test/java/org/apache/commons/ognl/test/SimplePropertyTreeTest.java
index debe179..989c3b8 100644
--- a/src/test/java/org/apache/commons/ognl/test/SimplePropertyTreeTest.java
+++ b/src/test/java/org/apache/commons/ognl/test/SimplePropertyTreeTest.java
@@ -24,6 +24,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
+import junit.framework.Assert;
 import org.apache.commons.ognl.Ognl;
 import org.junit.Before;
 import org.junit.runner.RunWith;
@@ -78,6 +79,6 @@
     public void runTest()
         throws Exception
     {
-        assertTrue( Ognl.isSimpleProperty( getExpression(), _context ) == ( (Boolean) getExpectedResult() ).booleanValue() );
+        Assert.assertEquals(Ognl.isSimpleProperty(getExpression(), _context), ((Boolean) getExpectedResult()).booleanValue());
     }
 }
diff --git a/src/test/java/org/apache/commons/ognl/test/accessors/ListPropertyAccessorTest.java b/src/test/java/org/apache/commons/ognl/test/accessors/ListPropertyAccessorTest.java
index aeee9de..57738d7 100644
--- a/src/test/java/org/apache/commons/ognl/test/accessors/ListPropertyAccessorTest.java
+++ b/src/test/java/org/apache/commons/ognl/test/accessors/ListPropertyAccessorTest.java
@@ -56,7 +56,7 @@
         assertEquals( List.class, context.getCurrentAccessor() );
         assertEquals( Object.class, context.getCurrentType() );
         assertEquals( Integer.TYPE, context.getPreviousType() );
-        assertEquals( null, context.getPreviousAccessor() );
+        assertNull(context.getPreviousAccessor());
     }
 
     @Test
@@ -76,7 +76,7 @@
         assertEquals( List.class, context.getCurrentAccessor() );
         assertEquals( Object.class, context.getCurrentType() );
         assertEquals( Integer.class, context.getPreviousType() );
-        assertEquals( null, context.getPreviousAccessor() );
+        assertNull(context.getPreviousAccessor());
     }
 
     @Test
diff --git a/src/test/java/org/apache/commons/ognl/test/enhance/TestExpressionCompiler.java b/src/test/java/org/apache/commons/ognl/test/enhance/TestExpressionCompiler.java
index b3ddf7f..a28152c 100644
--- a/src/test/java/org/apache/commons/ognl/test/enhance/TestExpressionCompiler.java
+++ b/src/test/java/org/apache/commons/ognl/test/enhance/TestExpressionCompiler.java
@@ -242,7 +242,7 @@
         GenericRoot root = new GenericRoot();
 
         Node node = Ognl.compileExpression( _context, root, "cracker.param" );
-        assertEquals( null, node.getAccessor().get( _context, root ) );
+        assertNull(node.getAccessor().get(_context, root));
 
         node.getAccessor().set( _context, root, 0 );
         assertEquals( 0, node.getAccessor().get( _context, root ) );
