private static void validateKeyValue(TypeModel parentType, String key) { if (parentType.isMap()) { TypeModel keyType = parentType.getMapKeyType(); validateValue(keyType, key); } else if (parentType.isRepeated()) { validateValue(INT_TYPE, key); } else { // Don't validate message types, field will be missing for a bad key } }
@Override public String getParamTypeName(ImportTypeTable typeTable, TypeModel type) { String cardinalityComment = ""; if (type.isRepeated()) { if (type.isMap()) { String keyType = getParamTypeName(typeTable, type.getMapKeyType()); String valueType = getParamTypeName(typeTable, type.getMapValueType()); return String.format("Object.<%s, %s>", keyType, valueType); } else { cardinalityComment = "[]"; } } return String.format("%s%s", getParamTypeNoCardinality(typeTable, type), cardinalityComment); }
private InitCodeLineView generateMapInitCodeLine(MethodContext context, InitCodeNode item) { MapInitCodeLineView.Builder surfaceLine = MapInitCodeLineView.newBuilder(); SurfaceNamer namer = context.getNamer(); ImportTypeTable typeTable = context.getTypeTable(); surfaceLine.lineType(InitCodeLineType.MapInitLine); surfaceLine.identifier(namer.localVarName(item.getIdentifier())); surfaceLine.keyTypeName(typeTable.getAndSaveNicknameFor(item.getType().getMapKeyType())); surfaceLine.valueTypeName(typeTable.getAndSaveNicknameFor(item.getType().getMapValueType())); List<MapEntryView> entries = new ArrayList<>(); for (Map.Entry<String, InitCodeNode> entry : item.getChildren().entrySet()) { MapEntryView.Builder mapEntry = MapEntryView.newBuilder(); mapEntry.key(typeTable.renderPrimitiveValue(item.getType().getMapKeyType(), entry.getKey())); mapEntry.valueString(context.getNamer().localVarName(entry.getValue().getIdentifier())); mapEntry.value( generateSurfaceInitCodeLine(context, entry.getValue(), entries.isEmpty(), false)); entries.add(mapEntry.build()); } surfaceLine.initEntries(entries); return surfaceLine.build(); }
@Override public String getParamTypeName(ImportTypeTable typeTable, TypeModel type) { if (type.isMap()) { TypeName mapTypeName = new TypeName("dict"); TypeName keyTypeName = new TypeName(getParamTypeNameForElementType(type.getMapKeyType())); TypeName valueTypeName = new TypeName(getParamTypeNameForElementType(type.getMapValueType())); return new TypeName( mapTypeName.getFullName(), mapTypeName.getNickname(), "%s[%i -> %i]", keyTypeName, valueTypeName) .getFullName(); } if (type.isRepeated()) { TypeName listTypeName = new TypeName("list"); TypeName elementTypeName = new TypeName(getParamTypeNameForElementType(type)); return new TypeName( listTypeName.getFullName(), listTypeName.getNickname(), "%s[%i]", elementTypeName) .getFullName(); } return getParamTypeNameForElementType(type); }
/** The type name for the message property */ @Override public String getMessagePropertyTypeName(ImportTypeTable importTypeTable, FieldModel fieldModel) { if (fieldModel.isMap()) { String keyTypeName = importTypeTable.getFullNameForElementType(fieldModel.getType().getMapKeyType()); String valueTypeName = importTypeTable.getFullNameForElementType(fieldModel.getType().getMapValueType()); return new TypeName( importTypeTable.getFullNameFor(fieldModel), importTypeTable.getNicknameFor(fieldModel), "%s{%i => %i}", new TypeName(keyTypeName), new TypeName(valueTypeName)) .getFullName(); } if (fieldModel.isRepeated()) { String elementTypeName = importTypeTable.getFullNameForElementType(fieldModel); return new TypeName( importTypeTable.getFullNameFor(fieldModel), importTypeTable.getNicknameFor(fieldModel), "%s<%i>", new TypeName(elementTypeName)) .getFullName(); } return importTypeTable.getFullNameForElementType(fieldModel); }
@Override public String getParamTypeName(ImportTypeTable typeTable, TypeModel type) { if (type.isMap()) { String keyTypeName = typeTable.getFullNameForElementType(type.getMapKeyType()); String valueTypeName = typeTable.getFullNameForElementType(type.getMapValueType()); if (type.getMapValueType().isMessage()) { valueTypeName += " | Hash"; } return new TypeName( typeTable.getFullNameFor(type), typeTable.getNicknameFor(type), "%s{%i => %i}", new TypeName(keyTypeName), new TypeName(valueTypeName)) .getFullName(); } String elementTypeName = typeTable.getFullNameForElementType(type); if (type.isMessage()) { elementTypeName += " | Hash"; } if (type.isRepeated()) { return new TypeName( typeTable.getFullNameFor(type), typeTable.getNicknameFor(type), "%s<%i>", new TypeName(elementTypeName)) .getFullName(); } return elementTypeName; }