fieldMetadata = metadataMap.get(data.getKey()); if (fieldMetadata != null && fieldMetadata.getConstructorInjection().isPresent()) { ThriftConstructorInjection constructor = fieldMetadata.getConstructorInjection().get();
public DecoratorThriftFieldMetadata(ThriftFieldMetadata input){ super( input.getId(), input.getRequiredness(), input.getThriftType(), input.getName(), input.getType(), input.getInjections(), input.getConstructorInjection(), input.getMethodInjection(), input.getExtraction(), input.getCoercion()); // 获取field的类型 List<ThriftInjection> injections = getInjections(); checkState(injections.size()>0,"invalid size of injections"); ThriftInjection injection = injections.get(0); if(injection instanceof ThriftParameterInjection){ javaType = ((ThriftParameterInjection)injection).getJavaType(); }else if(injection instanceof ThriftFieldInjection){ javaType = ((ThriftFieldInjection)injection).getField().getType(); }else{ javaType = null; // 对于不支持的数据类型无法获取field类型,输出警告 logger.warning( String.format("UNSUPPORED TYPE %s,can't get Java Type. " + "(不识别的ThriftInjection实例类型,无法实现requiredness转义)", null == injection? null : injection.getClass().getName())); } } /** 重载方法,实现 requiredness 转义 */
DecoratorThriftFieldMetadata(ThriftFieldMetadata input){ super( input.getId(), input.getRequiredness(), input.getThriftType(), input.getName(), input.getType(), input.getInjections(), input.getConstructorInjection(), input.getMethodInjection(), input.getExtraction(), input.getCoercion()); // 获取field的类型 List<ThriftInjection> injections = getInjections(); checkState(injections.size()>0,"invalid size of injections"); ThriftInjection injection = injections.get(0); if(injection instanceof ThriftParameterInjection){ javaType = ((ThriftParameterInjection)injection).getJavaType(); }else if(injection instanceof ThriftFieldInjection){ javaType = ((ThriftFieldInjection)injection).getField().getType(); }else{ javaType = null; // 对于不支持的数据类型无法获取field类型,输出警告 logger.warning( String.format("UNSUPPORED TYPE %s,can't get Java Type. " + "(不识别的ThriftInjection实例类型,无法实现requiredness转义)", null == injection? null : injection.getClass().getName())); } } /** 重载方法,实现 requiredness 转义 */
private ThriftStructMetadata testMetadataBuild(Class<?> structClass, int expectedConstructorParameters, int expectedMethodInjections) { ThriftCatalog catalog = new ThriftCatalog(); ThriftUnionMetadataBuilder builder = new ThriftUnionMetadataBuilder(catalog, structClass); assertNotNull(builder); assertNotNull(builder.getMetadataErrors()); builder.getMetadataErrors().throwIfHasErrors(); assertEquals(builder.getMetadataErrors().getWarnings().size(), 0); ThriftStructMetadata metadata = builder.build(); assertNotNull(metadata); assertEquals(MetadataType.UNION, metadata.getMetadataType()); verifyField(metadata, 1, "stringValue"); verifyField(metadata, 2, "longValue"); verifyField(metadata, 3, "fruitValue"); if (expectedConstructorParameters == 0) { assertTrue(metadata.getConstructorInjection().isPresent()); ThriftConstructorInjection constructorInjection = metadata.getConstructorInjection().get(); assertEquals(constructorInjection.getParameters().size(), 0); } else { for (ThriftFieldMetadata fieldMetadata : metadata.getFields(FieldKind.THRIFT_FIELD)) { assertTrue(fieldMetadata.getConstructorInjection().isPresent()); assertEquals(fieldMetadata.getConstructorInjection().get().getParameters().size(), expectedConstructorParameters); } } assertEquals(metadata.getMethodInjections().size(), expectedMethodInjections); return metadata; }
if (field.getConstructorInjection().isPresent()) { cases.add(caseStatement(field.getId(), field.getName() + "-id-field")); if (field.getConstructorInjection().isPresent()) { read.invokeConstructor(field.getConstructorInjection().get().getConstructor()) .storeVariable(instance) .gotoLabel("instance-ok");