Merge pull request #327 from Degubi/mappingctx_refactor

Refactor MappingContext.java
diff --git a/.gitignore b/.gitignore
index 283e0e3..3160630 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 /target/
+/target-tck/
 .classpath
 .project
 .idea/
diff --git a/.travis.yml b/.travis.yml
index 54d6a25..bc7dc80 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -14,11 +14,11 @@
   include:
     - stage: install-yasson
       script: mvn -U -C -Pstaging clean install
-    - stage: run-jmh
-      script:
-        - cd yasson-jmh
-        - mvn clean install
-        - java -jar target/yasson-jmh.jar -t 1 -f 2
+#    - stage: run-jmh
+#      script:
+#        - cd yasson-jmh
+#        - mvn clean install
+#        - java -jar target/yasson-jmh.jar -t 1 -f 2
     - stage: tck-run
       script: bash tck.sh
 
diff --git a/README.md b/README.md
index c6d7f2e..8501d06 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,7 @@
 
 [![Maven Central](https://img.shields.io/maven-central/v/org.eclipse/yasson.svg?label=Maven%20Central)](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.eclipse%22%20a%3A%22yasson%22)
 [![Sonatype Nexus (Snapshots)](https://img.shields.io/nexus/s/https/oss.sonatype.org/org.eclipse/yasson.svg)](https://oss.sonatype.org/content/repositories/snapshots/org/eclipse/yasson/)
+[![Javadocs](https://www.javadoc.io/badge/org.eclipse/yasson.svg)](https://www.javadoc.io/doc/org.eclipse/yasson)
 [![Build Status](https://travis-ci.org/eclipse-ee4j/yasson.svg?branch=master)](https://travis-ci.org/eclipse-ee4j/yasson)
 [![License](https://img.shields.io/badge/License-EPL%201.0-green.svg)](https://opensource.org/licenses/EPL-1.0)
 
diff --git a/src/main/java/org/eclipse/yasson/internal/ConstructorPropertiesAnnotationIntrospector.java b/src/main/java/org/eclipse/yasson/internal/ConstructorPropertiesAnnotationIntrospector.java
index b45e5c1..601ca4f 100644
--- a/src/main/java/org/eclipse/yasson/internal/ConstructorPropertiesAnnotationIntrospector.java
+++ b/src/main/java/org/eclipse/yasson/internal/ConstructorPropertiesAnnotationIntrospector.java
@@ -4,16 +4,17 @@
 import org.eclipse.yasson.internal.model.JsonbCreator;
 import org.eclipse.yasson.internal.properties.MessageKeys;
 import org.eclipse.yasson.internal.properties.Messages;
-import org.eclipse.yasson.spi.JsonbComponentInstanceCreator;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Executable;
+import java.lang.reflect.Modifier;
 import java.lang.reflect.Parameter;
+import java.util.Arrays;
 import java.util.logging.Logger;
 
 class ConstructorPropertiesAnnotationIntrospector {
 
-    private static final Logger LOG = Logger.getLogger(JsonbComponentInstanceCreator.class.getName());
+    private static final Logger LOG = Logger.getLogger(ConstructorPropertiesAnnotationIntrospector.class.getName());
 
     private final JsonbContext jsonbContext;
     private final AnnotationFinder constructorProperties;
@@ -43,6 +44,12 @@
             if (!(properties instanceof String[])) {
                 continue;
             }
+            if (!Modifier.isPublic(constructor.getModifiers())) {
+                String declaringClass = constructor.getDeclaringClass().getName();
+                String message = "The constructor of {0} annotated with @ConstructorProperties {1} is not accessible and will be ignored.";
+                LOG.finest(String.format(message, declaringClass, Arrays.toString((String[]) properties)));
+                continue;
+            }
             if (jsonbCreator != null) {
                 // don't fail in this case, because it is perfectly allowed to have more than one
                 // @ConstructorProperties-Annotation in general.
diff --git a/src/test/java/org/eclipse/yasson/internal/AnnotationIntrospectorTest.java b/src/test/java/org/eclipse/yasson/internal/AnnotationIntrospectorTest.java
index 5dda126..d8b4a0e 100644
--- a/src/test/java/org/eclipse/yasson/internal/AnnotationIntrospectorTest.java
+++ b/src/test/java/org/eclipse/yasson/internal/AnnotationIntrospectorTest.java
@@ -7,8 +7,10 @@
 import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithJsonbCreatorAndConstructorPropertiesAnnotation;
 import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithJsonbCreatorAnnotatedConstructor;
 import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithJsonbCreatorAnnotatedFactoryMethod;
-import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithMissingConstructorAnnotation;
+import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithJsonbCreatorAnnotatedProtectedConstructor;
+import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithNoArgAndJsonbCreatorAnnotatedProtectedConstructor;
 import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithTwoJsonbCreatorAnnotatedSpots;
+import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithoutAnnotatedConstructor;
 import org.eclipse.yasson.internal.model.JsonbCreator;
 
 import javax.json.bind.JsonbConfig;
@@ -16,6 +18,8 @@
 
 import javax.json.spi.JsonProvider;
 
+import org.hamcrest.core.IsInstanceOf;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
@@ -60,6 +64,23 @@
     }
 
     @Test
+    public void testJsonbAnnotatedProtectedConstructorLeadsToAnException() {
+        exception.expect(JsonbException.class);
+        exception.expectCause(IsInstanceOf.instanceOf(IllegalAccessException.class));
+        JsonbCreator creator = instrospector.getCreator(ObjectWithJsonbCreatorAnnotatedProtectedConstructor.class);
+        assertCreatedInstanceContainsAllParameters(ObjectWithJsonbCreatorAnnotatedProtectedConstructor.example(), creator);
+    }
+
+    // TODO Under discussion: https://github.com/eclipse-ee4j/yasson/issues/326
+    @Ignore
+    @Test
+    public void testNoArgConstructorShouldBePreferredOverUnusableJsonbAnnotatedProtectedConstructor() {
+        JsonbCreator creator = instrospector.getCreator(ObjectWithNoArgAndJsonbCreatorAnnotatedProtectedConstructor.class);
+        assertParameters(ObjectWithNoArgAndJsonbCreatorAnnotatedProtectedConstructor.parameters(), creator);
+        assertCreatedInstanceContainsAllParameters(ObjectWithNoArgAndJsonbCreatorAnnotatedProtectedConstructor.example(), creator);
+    }
+
+    @Test
     public void testMoreThanOneAnnotatedCreatorMethodShouldLeadToAnException() {
         exception.expect(JsonbException.class);
         exception.expectMessage("More than one @" + JsonbCreator.class.getSimpleName());
@@ -68,7 +89,7 @@
 
     @Test
     public void testCreatorShouldBeNullOnMissingConstructorAnnotation() {
-        assertNull(instrospector.getCreator(ObjectWithMissingConstructorAnnotation.class));
+        assertNull(instrospector.getCreator(ObjectWithoutAnnotatedConstructor.class));
     }
 
 }
\ No newline at end of file
diff --git a/src/test/java/org/eclipse/yasson/internal/AnnotationIntrospectorTestFixtures.java b/src/test/java/org/eclipse/yasson/internal/AnnotationIntrospectorTestFixtures.java
index c58273b..aa711a5 100644
--- a/src/test/java/org/eclipse/yasson/internal/AnnotationIntrospectorTestFixtures.java
+++ b/src/test/java/org/eclipse/yasson/internal/AnnotationIntrospectorTestFixtures.java
@@ -43,10 +43,7 @@
             return new ObjectWithoutAnnotatedConstructor("a string", Long.MAX_VALUE);
         }
 
-        @JsonbCreator
-        public ObjectWithoutAnnotatedConstructor( //
-                @JsonbProperty("string") String aString, //
-                @JsonbProperty("primitive") long aPrimitive) {
+        public ObjectWithoutAnnotatedConstructor(String aString, long aPrimitive) {
             this.string = aString;
             this.primitive = aPrimitive;
         }
@@ -93,6 +90,88 @@
         }
     }
 
+    public static class ObjectWithJsonbCreatorAnnotatedProtectedConstructor implements ProvidesParameterRepresentation {
+        private final String string;
+        private final long primitive;
+
+        public static final Map<String, Type> parameters() {
+            return twoParameters("string", String.class, "primitive", long.class);
+        }
+
+        public static final ProvidesParameterRepresentation example() {
+            return new ObjectWithJsonbCreatorAnnotatedProtectedConstructor("a string", Long.MAX_VALUE);
+        }
+
+        @JsonbCreator
+        protected ObjectWithJsonbCreatorAnnotatedProtectedConstructor( //
+                @JsonbProperty("string") String aString, //
+                @JsonbProperty("primitive") long aPrimitive) {
+            this.string = aString;
+            this.primitive = aPrimitive;
+        }
+
+        @Override
+        public Object[] asParameters() {
+            return new Object[] { string, primitive };
+        }
+
+        @Override
+        public String toString() {
+            return "ObjectWithJsonbCreatorAnnotatedProtectedConstructor [string=" + string + ", primitive=" + primitive + "]";
+        }
+    }
+
+    public static class ObjectWithNoArgAndJsonbCreatorAnnotatedProtectedConstructor implements ProvidesParameterRepresentation {
+        private String string;
+        private long primitive;
+
+        public static final Map<String, Type> parameters() {
+            return twoParameters("string", String.class, "primitive", long.class);
+        }
+
+        public static final ProvidesParameterRepresentation example() {
+            return new ObjectWithNoArgAndJsonbCreatorAnnotatedProtectedConstructor("a string", Long.MAX_VALUE);
+        }
+
+        public ObjectWithNoArgAndJsonbCreatorAnnotatedProtectedConstructor() {
+            super();
+        }
+
+        @JsonbCreator
+        protected ObjectWithNoArgAndJsonbCreatorAnnotatedProtectedConstructor( //
+                @JsonbProperty("string") String aString, //
+                @JsonbProperty("primitive") long aPrimitive) {
+            this.string = aString;
+            this.primitive = aPrimitive;
+        }
+
+        public String getString() {
+            return string;
+        }
+
+        public void setString(String string) {
+            this.string = string;
+        }
+
+        public long getPrimitive() {
+            return primitive;
+        }
+
+        public void setPrimitive(long primitive) {
+            this.primitive = primitive;
+        }
+
+        @Override
+        public Object[] asParameters() {
+            return new Object[] { string, primitive };
+        }
+
+        @Override
+        public String toString() {
+            return "ObjectWithNoArgAndJsonbCreatorAnnotatedProtectedConstructor [string=" + string + ", primitive=" + primitive + "]";
+        }
+    }
+
     public static class ObjectWithJsonbCreatorAnnotatedFactoryMethod implements ProvidesParameterRepresentation {
         private final String string;
         private final long primitive;
@@ -265,6 +344,161 @@
         }
     }
 
+    public static class ObjectWithPublicNoArgAndAnnotatedPrivateConstructor implements ProvidesParameterRepresentation {
+        private String string;
+        private Long primitive;
+
+        public static final Map<String, Type> parameters() {
+            return twoParameters("string", String.class, "primitive", long.class);
+        }
+
+        public static final ProvidesParameterRepresentation example() {
+            return new ObjectWithPublicNoArgAndAnnotatedPrivateConstructor("  ", Long.valueOf(-12));
+        }
+
+        public ObjectWithPublicNoArgAndAnnotatedPrivateConstructor() {
+            super();
+        }
+
+        @ConstructorProperties({ "string", "primitive" })
+        private ObjectWithPublicNoArgAndAnnotatedPrivateConstructor(String aString, long aPrimitive) {
+            this.string = aString;
+            this.primitive = aPrimitive;
+        }
+
+        public Long getPrimitive() {
+            return primitive;
+        }
+
+        public void setPrimitive(Long primitive) {
+            this.primitive = primitive;
+        }
+
+        public String getString() {
+            return string;
+        }
+
+        public void setString(String string) {
+            this.string = string;
+        }
+
+        @Override
+        public Object[] asParameters() {
+            return new Object[] { string, primitive };
+        }
+
+        @Override
+        public String toString() {
+            return "ObjectWithPublicNoArgAndAnnotatedPrivateConstructor [string=" + string + ", primitive=" + primitive + "]";
+        }
+    }
+
+    public static class ObjectWithPublicNoArgAndAnnotatedPackageProtectedConstructor implements ProvidesParameterRepresentation {
+        private String string;
+        private Long primitive;
+
+        public static final Map<String, Type> parameters() {
+            return twoParameters("string", String.class, "primitive", long.class);
+        }
+
+        public static final ProvidesParameterRepresentation example() {
+            return new ObjectWithPublicNoArgAndAnnotatedPackageProtectedConstructor("  ", Long.valueOf(-12));
+        }
+
+        public static final ObjectWithPublicNoArgAndAnnotatedPackageProtectedConstructor create(String aString, long aPrimitive) {
+            return new ObjectWithPublicNoArgAndAnnotatedPackageProtectedConstructor(aString, aPrimitive);
+        }
+
+        public ObjectWithPublicNoArgAndAnnotatedPackageProtectedConstructor() {
+            super();
+        }
+
+        @ConstructorProperties({ "string", "primitive" })
+        ObjectWithPublicNoArgAndAnnotatedPackageProtectedConstructor(String aString, long aPrimitive) {
+            this.string = aString;
+            this.primitive = aPrimitive;
+        }
+
+        public Long getPrimitive() {
+            return primitive;
+        }
+
+        public void setPrimitive(Long primitive) {
+            this.primitive = primitive;
+        }
+
+        public String getString() {
+            return string;
+        }
+
+        public void setString(String string) {
+            this.string = string;
+        }
+
+        @Override
+        public Object[] asParameters() {
+            return new Object[] { string, primitive };
+        }
+
+        @Override
+        public String toString() {
+            return "ObjectWithPublicNoArgAndAnnotatedPackageProtectedConstructor [string=" + string + ", primitive=" + primitive + "]";
+        }
+    }
+
+    public static class ObjectWithPublicNoArgAndAnnotatedProtectedConstructor implements ProvidesParameterRepresentation {
+        private String string;
+        private Long primitive;
+
+        public static final Map<String, Type> parameters() {
+            return twoParameters("string", String.class, "primitive", long.class);
+        }
+
+        public static final ProvidesParameterRepresentation example() {
+            return new ObjectWithPublicNoArgAndAnnotatedPackageProtectedConstructor("  ", Long.valueOf(-12));
+        }
+
+        public static final ObjectWithPublicNoArgAndAnnotatedProtectedConstructor create(String aString, long aPrimitive) {
+            return new ObjectWithPublicNoArgAndAnnotatedProtectedConstructor(aString, aPrimitive);
+        }
+
+        @ConstructorProperties({ "string", "primitive" })
+        protected ObjectWithPublicNoArgAndAnnotatedProtectedConstructor(String aString, long aPrimitive) {
+            this.string = aString;
+            this.primitive = aPrimitive;
+        }
+
+        public ObjectWithPublicNoArgAndAnnotatedProtectedConstructor() {
+            super();
+        }
+
+        public Long getPrimitive() {
+            return primitive;
+        }
+
+        public void setPrimitive(Long primitive) {
+            this.primitive = primitive;
+        }
+
+        public String getString() {
+            return string;
+        }
+
+        public void setString(String string) {
+            this.string = string;
+        }
+
+        @Override
+        public Object[] asParameters() {
+            return new Object[] { string, primitive };
+        }
+
+        @Override
+        public String toString() {
+            return "ObjectWithJsonbCreatorAndConstructorPropertiesAnnotation [string=" + string + ", primitive=" + primitive + "]";
+        }
+    }
+
     public static class ObjectWithMissingConstructorAnnotation implements ProvidesParameterRepresentation {
         private final String string;
         private final long primitive;
diff --git a/src/test/java/org/eclipse/yasson/internal/AnnotationIntrospectorWithoutOptionalModulesTest.java b/src/test/java/org/eclipse/yasson/internal/AnnotationIntrospectorWithoutOptionalModulesTest.java
index 6ef7997..1dd2e92 100644
--- a/src/test/java/org/eclipse/yasson/internal/AnnotationIntrospectorWithoutOptionalModulesTest.java
+++ b/src/test/java/org/eclipse/yasson/internal/AnnotationIntrospectorWithoutOptionalModulesTest.java
@@ -6,7 +6,7 @@
 
 import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithJsonbCreatorAnnotatedConstructor;
 import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithJsonbCreatorAnnotatedFactoryMethod;
-import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithMissingConstructorAnnotation;
+import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithoutAnnotatedConstructor;
 import org.eclipse.yasson.internal.model.JsonbCreator;
 
 import javax.json.bind.JsonbConfig;
@@ -47,7 +47,7 @@
 
     @Test
     public void testCreatorShouldBeNullOnMissingConstructorAnnotation() {
-        assertNull(instrospector.getCreator(ObjectWithMissingConstructorAnnotation.class));
+        assertNull(instrospector.getCreator(ObjectWithoutAnnotatedConstructor.class));
     }
 
     @Test
diff --git a/src/test/java/org/eclipse/yasson/internal/ConstructorPropertiesAnnotationIntrospectorTest.java b/src/test/java/org/eclipse/yasson/internal/ConstructorPropertiesAnnotationIntrospectorTest.java
index 5cd166f..4360f70 100644
--- a/src/test/java/org/eclipse/yasson/internal/ConstructorPropertiesAnnotationIntrospectorTest.java
+++ b/src/test/java/org/eclipse/yasson/internal/ConstructorPropertiesAnnotationIntrospectorTest.java
@@ -8,6 +8,9 @@
 
 import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithConstructorPropertiesAnnotation;
 import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithJsonbCreatorAnnotatedConstructor;
+import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithPublicNoArgAndAnnotatedPackageProtectedConstructor;
+import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithPublicNoArgAndAnnotatedPrivateConstructor;
+import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithPublicNoArgAndAnnotatedProtectedConstructor;
 import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithTwoConstructorPropertiesAnnotation;
 import org.eclipse.yasson.internal.AnnotationIntrospectorTestFixtures.ObjectWithoutAnnotatedConstructor;
 import org.eclipse.yasson.internal.model.JsonbCreator;
@@ -65,4 +68,21 @@
         assertNull(creator);
     }
 
+    @Test
+    public void testAnnotatedInaccessiblePrivateConstructorShouldBeIgnored() {
+        JsonbCreator creator = instrospector.getCreator(constructorsOf(ObjectWithPublicNoArgAndAnnotatedPrivateConstructor.class));
+        assertNull(creator);
+    }
+
+    @Test
+    public void testAnnotatedInaccessiblePackageProtectedConstructorShouldBeIgnored() {
+        JsonbCreator creator = instrospector.getCreator(constructorsOf(ObjectWithPublicNoArgAndAnnotatedPackageProtectedConstructor.class));
+        assertNull(creator);
+    }
+
+    @Test
+    public void testAnnotatedInaccessibleProtectedConstructorShouldBeIgnored() {
+        JsonbCreator creator = instrospector.getCreator(constructorsOf(ObjectWithPublicNoArgAndAnnotatedProtectedConstructor.class));
+        assertNull(creator);
+    }
 }
\ No newline at end of file
diff --git a/tck.sh b/tck.sh
old mode 100644
new mode 100755
index 487af85..b5cf594
--- a/tck.sh
+++ b/tck.sh
@@ -9,31 +9,36 @@
 # http://www.eclipse.org/org/documents/edl-v10.php.
 #
 
-export TCK_HOME=`pwd`
+mvn clean install -DskipTests
 
 GF_BUNDLE_URL="central.maven.org/maven2/org/glassfish/main/distributions/glassfish/5.1.0/glassfish-5.1.0.zip"
 TCK_NAME=jsonb-tck
-TS_HOME=$TCK_HOME/$TCK_NAME
+TCK_VERSION=1.0.0
 
-mvn clean install -DskipTests
+export TCK_HOME=`pwd`"/target-tck"
+rm -r ${TCK_HOME}
+mkdir ${TCK_HOME}
+cd ${TCK_HOME}
+TS_HOME=${TCK_HOME}/${TCK_NAME}
 
 echo "Downloading JSON-B TCK tests"
-wget -q http://download.eclipse.org/ee4j/jakartaee-tck/jakartaee8-eftl/promoted/eclipse-jsonb-tck-1.0.0.zip
+wget -q http://download.eclipse.org/ee4j/jakartaee-tck/jakartaee8-eftl/promoted/eclipse-${TCK_NAME}-$TCK_VERSION.zip
 echo "Exporting downloaded TCK tests"
-unzip -qq eclipse-jsonb-tck-*.zip -d ${TCK_HOME}
+unzip -qq eclipse-${TCK_NAME}-*.zip -d ${TCK_HOME}
 
 echo "Downloading GlassFish"
-wget -q --no-cache $GF_BUNDLE_URL -O latest-glassfish.zip
+wget -q --no-cache ${GF_BUNDLE_URL} -O latest-glassfish.zip
 echo "Exporting downloaded GlassFish"
 unzip -qq ${TCK_HOME}/latest-glassfish.zip -d ${TCK_HOME}
 
 cp -a ${TCK_HOME}/target/yasson.jar ${TCK_HOME}/glassfish5/glassfish/modules/yasson.jar
 
-cd $TS_HOME/bin
+cd ${TS_HOME}/bin
 
-sed -i "s#^report.dir=.*#report.dir=${TS_HOME}report/${TCK_NAME}#g" ts.jte
-sed -i "s#^work.dir=.*#work.dir=${TS_HOME}work/${TCK_NAME}#g" ts.jte
-sed -i "s#jsonb\.classes=.*#jsonb.classes=$TCK_HOME/glassfish5/glassfish/modules/jakarta.json.jar:$TCK_HOME/glassfish5/glassfish/modules/jakarta.json.bind-api.jar:$TCK_HOME/glassfish5/glassfish/modules/jakarta.json.jar:$TCK_HOME/glassfish5/glassfish/modules/jakarta.inject.jar:$TCK_HOME/glassfish5/glassfish/modules/jakarta.servlet-api.jar:$TCK_HOME/glassfish5/glassfish/modules/yasson.jar#" ts.jte
+# Intentionally no space between "-i" and ".bak" for interop with both MacOS and Linux
+sed -i.bak "s#^report.dir=.*#report.dir=${TS_HOME}report/${TCK_NAME}#g" ts.jte
+sed -i.bak "s#^work.dir=.*#work.dir=${TS_HOME}work/${TCK_NAME}#g" ts.jte
+sed -i.bak "s#jsonb\.classes=.*#jsonb.classes=${TCK_HOME}/glassfish5/glassfish/modules/jakarta.json.jar:${TCK_HOME}/glassfish5/glassfish/modules/jakarta.json.bind-api.jar:${TCK_HOME}/glassfish5/glassfish/modules/jakarta.json.jar:${TCK_HOME}/glassfish5/glassfish/modules/jakarta.inject.jar:${TCK_HOME}/glassfish5/glassfish/modules/jakarta.servlet-api.jar:${TCK_HOME}/glassfish5/glassfish/modules/yasson.jar#" ts.jte
 
 # TCK test excludes
 # JDK 11 have date formating changed
@@ -55,7 +60,7 @@
 mkdir -p ${TS_HOME}work/${TCK_NAME}
 
 # ant config.vi
-cd $TS_HOME/src/com/sun/ts/tests/
+cd ${TS_HOME}/src/com/sun/ts/tests/
 #ant deploy.all
 ant run.all | tee ${TCK_HOME}/result.log
 export FAILED_COUNT=`grep -c "Finished Test:  FAILED" ${TCK_HOME}/result.log`
diff --git a/yasson-jmh/.gitignore b/yasson-jmh/.gitignore
new file mode 100644
index 0000000..2f7896d
--- /dev/null
+++ b/yasson-jmh/.gitignore
@@ -0,0 +1 @@
+target/
diff --git a/yasson-jmh/pom.xml b/yasson-jmh/pom.xml
index 4d9db79..233c92e 100644
--- a/yasson-jmh/pom.xml
+++ b/yasson-jmh/pom.xml
@@ -14,7 +14,7 @@
 
     <properties>
         <jmh.version>1.21</jmh.version>
-        <yasson.version>1.0.3-SNAPSHOT</yasson.version>
+        <yasson.version>1.0.5-SNAPSHOT</yasson.version>
     </properties>
 
 
@@ -98,4 +98,4 @@
             </plugin>
         </plugins>
     </build>
-</project>
\ No newline at end of file
+</project>