protected Object getFieldValue(Object instance, ThriftFieldMetadata field) throws Exception { try { if (field.getExtraction().isPresent()) { ThriftExtraction extraction = field.getExtraction().get(); if (extraction instanceof ThriftFieldExtractor) { ThriftFieldExtractor thriftFieldExtractor = (ThriftFieldExtractor) extraction; return thriftFieldExtractor.getField().get(instance); } else if (extraction instanceof ThriftMethodExtractor) { ThriftMethodExtractor thriftMethodExtractor = (ThriftMethodExtractor) extraction; return thriftMethodExtractor.getMethod().invoke(instance); } throw new IllegalAccessException("Unsupported field extractor type " + extraction.getClass().getName()); } throw new IllegalAccessException("No extraction present for " + field); } catch (InvocationTargetException e) { if (e.getTargetException() != null) { Throwables.propagateIfInstanceOf(e.getTargetException(), Exception.class); } throw e; } } }
if (field.getExtraction().isPresent()) { ThriftExtraction extraction = field.getExtraction().get(); if (extraction instanceof ThriftFieldExtractor) { ThriftFieldExtractor thriftFieldExtractor = (ThriftFieldExtractor) extraction;
if (field.getExtraction().isPresent()) { ThriftExtraction extraction = field.getExtraction().get(); if (extraction instanceof ThriftFieldExtractor) { ThriftFieldExtractor thriftFieldExtractor = (ThriftFieldExtractor) extraction;
private void verifyMethodExtraction(ThriftStructMetadata metadata, int id, String name, String methodName) { assertTrue(metadata.getField(id).getExtraction().isPresent()); ThriftExtraction extraction = metadata.getField(id).getExtraction().get(); assertThat(extraction).isInstanceOf(ThriftMethodExtractor.class); ThriftMethodExtractor methodExtractor = (ThriftMethodExtractor) extraction; assertEquals(methodExtractor.getMethod().getName(), methodName); assertEquals(methodExtractor.getName(), name); }
private void verifyFieldExtraction(ThriftStructMetadata metadata, int id, String name) { assertTrue(metadata.getField(id).getExtraction().isPresent()); ThriftExtraction extraction = metadata.getField(id).getExtraction().get(); assertThat(extraction).isInstanceOf(ThriftFieldExtractor.class); ThriftFieldExtractor fieldExtractor = (ThriftFieldExtractor) extraction; assertEquals(fieldExtractor.getField().getName(), name); }
private void verifyFieldExtraction(ThriftStructMetadata metadata, int id, String name) { assertTrue(metadata.getField(id).getExtraction().isPresent()); ThriftExtraction extraction = metadata.getField(id).getExtraction().get(); assertThat(extraction).isInstanceOf(ThriftFieldExtractor.class); ThriftFieldExtractor fieldExtractor = (ThriftFieldExtractor) extraction; assertEquals(fieldExtractor.getField().getName(), name); }
private void verifyMethodExtraction(ThriftStructMetadata metadata, int id, String name, String methodName) { assertTrue(metadata.getField(id).getExtraction().isPresent()); ThriftExtraction extraction = metadata.getField(id).getExtraction().get(); assertThat(extraction).isInstanceOf(ThriftMethodExtractor.class); ThriftMethodExtractor methodExtractor = (ThriftMethodExtractor) extraction; assertEquals(methodExtractor.getMethod().getName(), methodName); assertEquals(methodExtractor.getName(), name); }
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 转义 */
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 转义 */
private <T> void verifyField(ThriftStructMetadata metadata, int id, String name) { ThriftFieldMetadata messageField = metadata.getField(id); assertNotNull(messageField, "field '" + name + "' is null"); assertEquals(messageField.getId(), id); assertEquals(messageField.getName(), name); assertFalse(messageField.isReadOnly()); assertFalse(messageField.isWriteOnly()); assertTrue(messageField.getExtraction().isPresent()); ThriftExtraction extraction = messageField.getExtraction().get(); assertEquals(extraction.getId(), id); assertEquals(extraction.getName(), name); assertNotNull(messageField.getInjections()); assertEquals(messageField.getInjections().size(), 1); ThriftInjection injection = messageField.getInjections().get(0); assertEquals(injection.getId(), id); assertEquals(injection.getName(), name); } }
private void loadFieldValue(MethodDefinition write, ThriftFieldMetadata field) { write.loadVariable("struct"); if (field.getExtraction().isPresent()) { ThriftExtraction extraction = field.getExtraction().get(); if (extraction instanceof ThriftFieldExtractor) { ThriftFieldExtractor fieldExtractor = (ThriftFieldExtractor) extraction; write.getField(fieldExtractor.getField()); if (fieldExtractor.isGeneric()) { write.checkCast(type(fieldExtractor.getType())); } } else if (extraction instanceof ThriftMethodExtractor) { ThriftMethodExtractor methodExtractor = (ThriftMethodExtractor) extraction; write.invokeVirtual(methodExtractor.getMethod()); if (methodExtractor.isGeneric()) { write.checkCast(type(methodExtractor.getType())); } } } }
private <T> void verifyField(ThriftStructMetadata metadata, int id, String name) { ThriftFieldMetadata metadataField = metadata.getField(id); assertNotNull(metadataField, "metadataField is null"); assertEquals(metadataField.getId(), id); assertEquals(metadataField.getName(), name); assertFalse(metadataField.isReadOnly()); assertFalse(metadataField.isWriteOnly()); assertTrue(metadataField.getExtraction().isPresent()); ThriftExtraction extraction = metadataField.getExtraction().get(); assertEquals(extraction.getId(), id); assertEquals(extraction.getName(), name); assertNotNull(metadataField.getInjections()); assertEquals(metadataField.getInjections().size(), 1); ThriftInjection injection = metadataField.getInjections().get(0); assertEquals(injection.getId(), id); assertEquals(injection.getName(), name); } }