Większość z nich to wywalanie błędów.Jakieś 70-80%.
final ArrayList<JsonBasic> elems = new ArrayList<>(objects.length);
for (int i = 0; i < objects.length; i++)
{
// We are assumng that the first object will be a "key"
Object jsonKey = objects[i];
if (jsonKey == null) {
switch (JsonDesignHints.Error.Handling)
{
case Medium:
System.err.println("ValidKeyObject expected, null found");
break;
case Strict:
throw new JsonException("null", "ValidKeyObject");
}
continue;
}
// inline designing
else if (jsonKey instanceof String)
{
String keyFieldName = (String)jsonKey;
if (keyFieldName.equals("")) {
switch (JsonDesignHints.Error.Handling)
{
case Medium:
System.err.println("ValidKeyObject expected, empty string found");
break;
case Strict:
throw new JsonException("EmptyString", "String", "ValidKeyObject", i+1);
}
continue;
}
else if (i+1 < objects.length)
{
Object generalValue = objects[i+1];
if (generalValue == null) {
switch (JsonDesignHints.Parse.AllowNullValues) {
case No:
switch (JsonDesignHints.Error.Handling)
{
case Medium:
System.err.println("NonNullValue expected, null found (Null values are forbidden, use JsonDesignHint).");
break;
case Strict:
throw new JsonException("NullValue", "NonNullValue", i+1);
}
break;
case Medium:
case Strict:
elems.add(new JsonElement(keyFieldName));
break;
}
}
else if (generalValue instanceof JsonBasic) // (unnamed element)
{
JsonBasic value = (JsonBasic)generalValue;
if (value.isAnonymous()) {
value.setFieldName(keyFieldName);
elems.add(value);
}
else {
switch (JsonDesignHints.Error.Handling) {
case Medium:
break;
case Strict:
throw new JsonException("NamedObject", value.getClass().getSimpleName(), "AnonymousObject", i+2);
}
}
// check if is anonymous
}
else {
if (generalValue instanceof String) {
String value = (String)generalValue;
elems.add(new JsonString(keyFieldName, value));
}
else if (generalValue instanceof Integer) {
Integer value = (Integer)generalValue;
elems.add(new JsonInt(keyFieldName, value));
}
else if (generalValue instanceof Boolean) {
Boolean value = (Boolean)generalValue;
elems.add(new JsonBool(keyFieldName, value));
}
else {
throw new JsonException("InvalidObject", generalValue.getClass().getSimpleName(), "ValidPrimitive");
}
}
i++; // skip the next one, cause it's already added
continue;
}
else {
throw new JsonException("End of Chain", "ValidValueObject");
}
}
// regular building (named element)
else if (jsonKey instanceof JsonBasic)
{
JsonBasic element = (JsonBasic)jsonKey;
if (element.isAnonymous()) {
switch (JsonDesignHints.Error.Handling) {
case Medium:
System.err.println("Anonymous field found, named object expected");
continue;
case Strict:
throw new JsonException("anonymous", "JsonBasic", "named object", i+1);
}
}
else {
elems.add(element);
}
continue;
}
else {
throw new JsonException(jsonKey.toString(), jsonKey.getClass().getSimpleName(), "JsonBasic or ValidObject", i+1);
}
}
return elems.toArray(new JsonBasic[elems.size()]);
}
To nie robi jednej rzeczy