From 7fb5d92e95fad21bd27c6c4c905cc795c7e6b595 Mon Sep 17 00:00:00 2001 From: Tomas Valenta Date: Wed, 19 Aug 2020 08:53:12 +0200 Subject: [PATCH] Fix wrong array dimension for assisted parameters in the VM annotation processor. --- .../com/sygic/maps/tools/processor/Processor.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tools/annotation-processor/src/main/java/com/sygic/maps/tools/processor/Processor.java b/tools/annotation-processor/src/main/java/com/sygic/maps/tools/processor/Processor.java index e3e7e0c1a..386948ab4 100644 --- a/tools/annotation-processor/src/main/java/com/sygic/maps/tools/processor/Processor.java +++ b/tools/annotation-processor/src/main/java/com/sygic/maps/tools/processor/Processor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019 Sygic a.s. All rights reserved. + * Copyright (c) 2020 Sygic a.s. All rights reserved. * * This project is licensed under the MIT License. * @@ -260,10 +260,11 @@ public boolean process(final Set annotations, final Round cb.add("\n"); - cb.addStatement("final $1T[] parameters = new $1T[constructorAssistedParameters.size()]", Object.class); + cb.addStatement("final $1T[][] parameters = new $1T[constructorAssistedParameters.size()][]", Object.class); cb.beginControlFlow("for ($T v = 0; v < constructorAssistedParameters.size(); v++)", int.class); cb.addStatement("final $T[] entry = constructorAssistedParameters.get(v)", Class.class); cb.addStatement("final $T[] nullableInfo = constructorAssistedParametersNullability.get(v)", Boolean.class); + cb.addStatement("parameters[v] = new $T[entry.length]", Object.class); cb.addStatement("boolean allNullable = true"); cb.beginControlFlow("for (final $T nullable : nullableInfo)", Boolean.class); cb.beginControlFlow("if (!nullable)"); @@ -285,7 +286,7 @@ public boolean process(final Set annotations, final Round cb.addStatement("continue"); cb.endControlFlow(); cb.beginControlFlow("if (cls.isInstance(" + ASSISTED_PARAMETER_NAME + "[k]))"); - cb.addStatement("parameters[i] = assistedValues[k]"); + cb.addStatement("parameters[v][i] = assistedValues[k]"); cb.addStatement("k++"); cb.addStatement("continue"); cb.endControlFlow(); @@ -294,7 +295,7 @@ public boolean process(final Set annotations, final Round cb.addStatement("found = false"); cb.addStatement("break"); cb.endControlFlow(); - cb.addStatement("parameters[i] = assistedValues[k]"); + cb.addStatement("parameters[v][i] = assistedValues[k]"); cb.addStatement("k++"); cb.endControlFlow(); cb.beginControlFlow("if (found)"); @@ -318,7 +319,7 @@ public boolean process(final Set annotations, final Round VariableElement parameter = nonAssistedParameters.get(j); if (parameter == null) { parameter = assistedParameters.get(j); - cb.add("($T)parameters[$L]", parameter.asType(), a++); + cb.add("($T)parameters[variant][$L]", parameter.asType(), a++); } else { cb.add("$N", parameter.getSimpleName()); }