@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 static TypeModel getChildType(TypeModel parentType, String key) { if (parentType.isMap()) { return parentType.getMapValueType(); } else if (parentType.isRepeated()) { // Using the Optional cardinality replaces the Repeated cardinality return parentType.makeOptional(); } else if (parentType.isMessage()) { FieldModel childField = parentType.getField(key); if (childField == null) { throw new IllegalArgumentException( "Message type " + parentType + " does not have field " + key); } return childField.getType(); } else { throw new IllegalArgumentException( "Primitive type " + parentType + " cannot have children. Child key: " + key); } }
boolean isMessageField = field.isMessage() && !field.isMap(); boolean isMapContainingMessage = field.isMap() && field.getType().getMapValueType().isMessage(); if (isMessageField || isMapContainingMessage) { String messageType; if (isMapContainingMessage) { messageType = context.getTypeTable().getFullNameForElementType(field.getType().getMapValueType()); } else { messageType = context.getTypeTable().getFullNameForElementType(field);
boolean isMessageField = field.isMessage() && !field.isMap(); boolean isMapContainingMessage = field.isMap() && field.getType().getMapValueType().isMessage(); if (isMessageField || isMapContainingMessage) { String messageType; if (isMapContainingMessage) { messageType = context.getTypeTable().getFullNameForElementType(field.getType().getMapValueType()); } else { messageType = context.getTypeTable().getFullNameForElementType(field);
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()) { 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; }
@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); }