} else if (STRING_TYPE == class_type) { returnExpr = expr; } else if (class_type.isClass() != null && isOverlayArrayType(class_type.isClass())) { returnExpr = "(new " + JSON_ARRAY_CLASS + "(" + expr + ")).toString()"; } else if (class_type.isClass() != null && OVERLAY_VALUE_TYPE.isAssignableFrom(class_type.isClass())) { returnExpr = "(new " + JSON_OBJECT_CLASS + "(" + expr + ")).toString()"; } else if (class_type.getQualifiedBinaryName().startsWith("java.lang.")) {
@Override public void generate() throws UnableToCompleteException { //Forcing class to be loaded try { Class.forName(ObjectMapper.class.getName()); } catch (ClassNotFoundException e) { e.printStackTrace(); } JClassType sourceClazz = source.isClass() == null ? source.isInterface() : source.isClass(); if (sourceClazz == null) { getLogger().log(ERROR, "Type is not a class"); throw new UnableToCompleteException(); } generateMapper(); generateSingleton(shortName); generateEncodeMethod(source); generateDecodeMethod(source); }
@Override public void generate() throws UnableToCompleteException { //Forcing class to be loaded try { Class.forName(ObjectMapper.class.getName()); } catch (ClassNotFoundException e) { e.printStackTrace(); } JClassType sourceClazz = source.isClass() == null ? source.isInterface() : source.isClass(); if (sourceClazz == null) { getLogger().log(ERROR, "Type is not a class"); throw new UnableToCompleteException(); } generateMapper(); generateSingleton(shortName); generateEncodeMethod(source); generateDecodeMethod(source); }
} else if (STRING_TYPE == class_type) { returnExpr = expr; } else if (class_type.isClass() != null && isOverlayArrayType(class_type.isClass())) { returnExpr = "(new " + JSON_ARRAY_CLASS + "(" + expr + ")).toString()"; } else if (class_type.isClass() != null && OVERLAY_VALUE_TYPE.isAssignableFrom(class_type.isClass())) { returnExpr = "(new " + JSON_OBJECT_CLASS + "(" + expr + ")).toString()"; } else if (class_type.getQualifiedBinaryName().startsWith("java.lang.")) {
@Test public void processField_primitiveType() { JClassType fieldType = mock(JClassType.class); when(field.getType()).thenReturn(fieldType); when(fieldType.isClass()).thenReturn(null); verifyProcessFieldReturns(false); }
void stubPassingField(JField field, JClassType fieldType, String fieldName) { WithElementId idAnnotation = mock(WithElementId.class); when(field.isPrivate()).thenReturn(false); when(field.isStatic()).thenReturn(false); when(field.getType()).thenReturn(fieldType); when(field.getName()).thenReturn(fieldName); when(fieldType.isClass()).thenReturn(fieldType); when(field.getAnnotation(WithElementId.class)).thenReturn(idAnnotation); when(idAnnotation.value()).thenReturn(""); //$NON-NLS-1$ when(idAnnotation.processType()).thenReturn(true); }
private Set<String> getEditorFieldCleanupExpressions() { Set<String> result = new LinkedHashSet<>(); for (JClassType typeCandidate : model.getEditorType().getFlattenedSupertypeHierarchy()) { JClassType classType = typeCandidate.isClass(); if (classType != null) { for (JField field : classType.getFields()) { JClassType fieldClassOrInterfaceType = field.getType().isClassOrInterface(); if (fieldClassOrInterfaceType != null // field type assignable to HasCleanup .. && fieldClassOrInterfaceType.isAssignableTo(hasCleanupType) // .. but not assignable to Model && !fieldClassOrInterfaceType.isAssignableTo(baseModelType)) { result.add(String.format( "getEditor().%s", //$NON-NLS-1$ field.getName())); } } } } return result; }
@Override public void generate() throws UnableToCompleteException { JsonTypeInfo typeInfo = getClassAnnotation(source, JsonTypeInfo.class); boolean isLeaf = isLeaf(source); List<Subtype> possibleTypes = getPossibleTypes(typeInfo, isLeaf); Collections.sort(possibleTypes); JClassType sourceClazz = source.isClass() == null ? source.isInterface() : source.isClass(); if (sourceClazz == null) { getLogger().log(ERROR, "Type is not a class"); throw new UnableToCompleteException(); } if (sourceClazz.isEnum() == null && sourceClazz.isAbstract()) { if (typeInfo == null) { getLogger().log(ERROR, "Abstract classes must be annotated with JsonTypeInfo"); throw new UnableToCompleteException(); } } Json jsonAnnotation = getAnnotation(source, Json.class); Style classStyle = jsonAnnotation != null ? jsonAnnotation.style() : Style.DEFAULT; String railsWrapperName = jsonAnnotation != null && !jsonAnnotation.name().isEmpty() ? jsonAnnotation.name() : sourceClazz.getName().toLowerCase(); locator = EncoderDecoderLocatorFactory.getEncoderDecoderInstanceLocator(context, getLogger()); generateSingleton(shortName); generateEncodeMethod(source, classStyle, typeInfo, railsWrapperName, possibleTypes, isLeaf, locator); generateDecodeMethod(source, classStyle, typeInfo, railsWrapperName, possibleTypes, isLeaf, locator); }
@Override public void generate() throws UnableToCompleteException { JsonTypeInfo typeInfo = getClassAnnotation(source, JsonTypeInfo.class); boolean isLeaf = isLeaf(source); List<Subtype> possibleTypes = getPossibleTypes(typeInfo, isLeaf); Collections.sort(possibleTypes); JClassType sourceClazz = source.isClass() == null ? source.isInterface() : source.isClass(); if (sourceClazz == null) { getLogger().log(ERROR, "Type is not a class"); throw new UnableToCompleteException(); } if (sourceClazz.isEnum() == null && sourceClazz.isAbstract()) { if (typeInfo == null) { getLogger().log(ERROR, "Abstract classes must be annotated with JsonTypeInfo"); throw new UnableToCompleteException(); } } Json jsonAnnotation = getAnnotation(source, Json.class); Style classStyle = jsonAnnotation != null ? jsonAnnotation.style() : Style.DEFAULT; String railsWrapperName = jsonAnnotation != null && !jsonAnnotation.name().isEmpty() ? jsonAnnotation.name() : sourceClazz.getName().toLowerCase(); locator = EncoderDecoderLocatorFactory.getEncoderDecoderInstanceLocator(context, getLogger()); generateSingleton(shortName); generateEncodeMethod(source, classStyle, typeInfo, railsWrapperName, possibleTypes, isLeaf, locator); generateDecodeMethod(source, classStyle, typeInfo, railsWrapperName, possibleTypes, isLeaf, locator); }
private JClassType getEncodedType(TreeLogger logger, GeneratorContext context, JClassType type) throws UnableToCompleteException { JClassType intf = type.isInterface(); if (intf == null) { getLogger().log(ERROR, "Expected " + type + " to be an interface."); throw new UnableToCompleteException(); } JClassType[] intfs = intf.getImplementedInterfaces(); for (JClassType t : intfs) { getLogger().log(INFO, "checking: " + t.getQualifiedSourceName() + ", type: " + t.getClass()); if (t.getQualifiedSourceName().equals(JSON_ENCODER_DECODER)) { JParameterizedType genericType = t.isParameterized(); if (genericType == null) { getLogger().log(ERROR, "Expected the " + JSON_ENCODER_DECODER + " declaration to specify a parameterized type."); throw new UnableToCompleteException(); } JClassType[] typeParameters = genericType.getTypeArgs(); if (typeParameters == null || typeParameters.length != 1) { getLogger().log(ERROR, "Expected the " + JSON_ENCODER_DECODER + " declaration to specify 1 parameterized type."); throw new UnableToCompleteException(); } JClassType jClassType = typeParameters[0]; return jClassType.isClass() == null ? jClassType.isInterface() : jClassType.isClass(); } } getLogger().log(ERROR, "Expected " + type + " to extend the " + JSON_ENCODER_DECODER + " interface."); throw new UnableToCompleteException(); }
private JClassType getEncodedType(TreeLogger logger, GeneratorContext context, JClassType type) throws UnableToCompleteException { JClassType intf = type.isInterface(); if (intf == null) { getLogger().log(ERROR, "Expected " + type + " to be an interface."); throw new UnableToCompleteException(); } JClassType[] intfs = intf.getImplementedInterfaces(); for (JClassType t : intfs) { getLogger().log(INFO, "checking: " + t.getQualifiedSourceName() + ", type: " + t.getClass()); if (t.getQualifiedSourceName().equals(JSON_ENCODER_DECODER)) { JParameterizedType genericType = t.isParameterized(); if (genericType == null) { getLogger().log(ERROR, "Expected the " + JSON_ENCODER_DECODER + " declaration to specify a parameterized type."); throw new UnableToCompleteException(); } JClassType[] typeParameters = genericType.getTypeArgs(); if (typeParameters == null || typeParameters.length != 1) { getLogger().log(ERROR, "Expected the " + JSON_ENCODER_DECODER + " declaration to specify 1 parameterized type."); throw new UnableToCompleteException(); } JClassType jClassType = typeParameters[0]; return jClassType.isClass() == null ? jClassType.isInterface() : jClassType.isClass(); } } getLogger().log(ERROR, "Expected " + type + " to extend the " + JSON_ENCODER_DECODER + " interface."); throw new UnableToCompleteException(); }
/** * Constructs a field serializer for the class. */ public FieldSerializerCreator(TreeLogger logger, GeneratorContext context, SerializableTypeOracle typesSentFromBrowser, SerializableTypeOracle typesSentToBrowser, JClassType requestedClass, JClassType customFieldSerializer) { this.logger = logger; this.context = context; this.isProd = context.isProdMode(); methodStart = isProd ? "/*-{" : "{"; methodEnd = isProd ? "}-*/;" : "}"; this.customFieldSerializer = customFieldSerializer; assert (requestedClass != null); assert (requestedClass.isClass() != null || requestedClass.isArray() != null); this.typeOracle = context.getTypeOracle(); this.typesSentFromBrowser = typesSentFromBrowser; this.typesSentToBrowser = typesSentToBrowser; serializableClass = requestedClass; serializableFields = SerializationUtils.getSerializableFields(context, requestedClass); this.fieldSerializerName = SerializationUtils.getStandardSerializerName(serializableClass); this.isJRE = SerializableTypeOracleBuilder.isInStandardJavaPackage(serializableClass .getQualifiedSourceName()); this.customFieldSerializerHasInstantiate = (customFieldSerializer != null && CustomFieldSerializerValidator.hasInstantiationMethod( customFieldSerializer, serializableClass)); }
/** * Constructs a field serializer for the class. */ public FieldSerializerCreator(TreeLogger logger, GeneratorContext context, SerializableTypeOracle typesSentFromBrowser, SerializableTypeOracle typesSentToBrowser, JClassType requestedClass, JClassType customFieldSerializer) { this.logger = logger; this.context = context; this.isProd = context.isProdMode(); methodStart = isProd ? "/*-{" : "{"; methodEnd = isProd ? "}-*/;" : "}"; this.customFieldSerializer = customFieldSerializer; assert (requestedClass != null); assert (requestedClass.isClass() != null || requestedClass.isArray() != null); this.typeOracle = context.getTypeOracle(); this.typesSentFromBrowser = typesSentFromBrowser; this.typesSentToBrowser = typesSentToBrowser; serializableClass = requestedClass; serializableFields = SerializationUtils.getSerializableFields(context, requestedClass); this.fieldSerializerName = SerializationUtils.getStandardSerializerName(serializableClass); this.isJRE = SerializableTypeOracleBuilder.isInStandardJavaPackage(serializableClass .getQualifiedSourceName()); this.customFieldSerializerHasInstantiate = (customFieldSerializer != null && CustomFieldSerializerValidator.hasInstantiationMethod( customFieldSerializer, serializableClass)); }
@Override public RebindResult generateIncrementally(TreeLogger logger, GeneratorContext context, String typeName) throws UnableToCompleteException { TypeOracle typeOracle = context.getTypeOracle(); serializerType = typeOracle.findType(typeName); if (serializerType == null || serializerType.isInterface() == null) throw new UnableToCompleteException(); String typeSerializerClassName = serializerType.getQualifiedSourceName() + TYPE_SERIALIZER_SUFFIX; String typeSerializerSimpleName = serializerType.getSimpleSourceName() + TYPE_SERIALIZER_SUFFIX; final StorageTypeFinder storageTypeFinder = StorageTypeFinder.getInstance(context, logger); SerializableTypeOracle serializationOracle = buildSerializableTypeOracle(logger, context, storageTypeFinder); JClassType typeSerializer = typeOracle.findType(typeSerializerClassName); if (typeSerializer != null && typeSerializer.isClass() != null && isNothingChanged(logger, context, serializationOracle)) { return new RebindResult(RebindMode.USE_EXISTING, typeSerializerClassName); } TypeSerializerCreator tsc = new TypeSerializerCreator(logger, serializationOracle, serializationOracle, context, typeSerializerClassName, typeSerializerSimpleName); tsc.realize(logger); writeSerializationPolicyFile(logger, context, serializationOracle, Collections.unmodifiableMap(tsc.getTypeStrings())); if (context.isGeneratorResultCachingEnabled()) { RebindResult result = new RebindResult(RebindMode.USE_PARTIAL_CACHED, typeSerializerClassName); Set<JType> storageTypes = storageTypeFinder.findStorageTypes(); CachedRpcTypeInformation cti = new CachedRpcTypeInformation(serializationOracle, serializationOracle, storageTypes, new HashSet<JType>()); result.putClientData(ProxyCreator.CACHED_TYPE_INFO_KEY, cti); return result; } else { return new RebindResult(RebindMode.USE_ALL_NEW_WITH_NO_CACHING, typeSerializerClassName); } }
@Override public String generate(TreeLogger logger, GeneratorContext context, String typeName) throws UnableToCompleteException { TypeOracle oracle = context.getTypeOracle(); JClassType toGenerate = oracle.findType(typeName).isInterface(); if (toGenerate == null) { logger.log(TreeLogger.ERROR, typeName + " is not an interface type"); //$NON-NLS-1$ throw new UnableToCompleteException(); } ElementIdTypeParser parser = new ElementIdTypeParser(logger, toGenerate); ElementIdStatement[] statements = parser.parseStatements(); String packageName = toGenerate.getPackage().getName(); String simpleSourceName = toGenerate.getName().replace('.', '_') + "Impl"; //$NON-NLS-1$ PrintWriter pw = context.tryCreate(logger, packageName, simpleSourceName); if (pw == null) { return packageName + "." + simpleSourceName; //$NON-NLS-1$ } JClassType superclass = oracle.findType(BaseElementIdHandler.class.getName()).isClass(); assert superclass != null : "No BaseElementIdHandler type"; //$NON-NLS-1$ ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory( packageName, simpleSourceName); factory.setSuperclass(superclass.getQualifiedSourceName() + "<" + parser.getOwnerType().getParameterizedQualifiedSourceName() + ">"); //$NON-NLS-1$ //$NON-NLS-2$ factory.addImplementedInterface(typeName); SourceWriter sw = factory.createSourceWriter(context, pw); writeGenerateAndSetIds(sw, parser.getOwnerType(), statements); sw.commit(logger); return factory.getCreatedClassName(); }
for (JClassType type : typeOracle.getTypes()) { if (type.isAnnotationPresent(ComponentExtension.class)) { if (type.isClass() == null || type.isAbstract()) {
JClassType isClass = serializableClass.isClass();
JClassType isClass = serializableClass.isClass();