public Set<ClassRef> apply(Set<ClassRef> source) { Set<ClassRef> result = new LinkedHashSet<ClassRef>(source); Set<TypeRef> typeArguments = findTypeArguments(source); for (TypeRef type : typeArguments) { Set<ClassRef> intermediate = new LinkedHashSet<ClassRef>(); for (ClassRef clazz : result) { intermediate.add(new ClassRefBuilder(clazz).accept(new TypeArgumentReplace(type, Generics.MAP.apply(type).toReference())).build()); } result = new LinkedHashSet<ClassRef>(intermediate); } return result; } };
public void visit(ClassRefBuilder builder) { List<TypeRef> unwrappedArguments = new ArrayList<TypeRef>(); for (TypeRef argument : builder.getArguments()) { TypeRef key = getKeyForValue(GENERIC_MAPPINGS, argument); if (TRANSPARENT_REF.equals(key)) { continue; } else if (key != null) { unwrappedArguments.add(key); } else if (argument instanceof ClassRef) { unwrappedArguments.add(new ClassRefBuilder((ClassRef)argument).accept(UNWRAP_CLASSREF_VISITOR).build()); } else { unwrappedArguments.add(argument); } } builder.withArguments(unwrappedArguments); } };
private void visitTypeDefBuilder(TypeDefBuilder builder) { if (target.equals(builder.getPackageName())) { builder.withPackageName(replacement); } if (builder.getAttributes().containsKey(TypeDef.ALSO_IMPORT)) { Set<ClassRef> updatedImports = new LinkedHashSet<ClassRef>(); for (ClassRef classRef : (Set<ClassRef>) builder.getAttributes().get(TypeDef.ALSO_IMPORT)) { if (target.equals(classRef.getDefinition().getPackageName())) { updatedImports.add(new ClassRefBuilder(classRef).accept(this).build()); } else { updatedImports.add(classRef); } } builder.getAttributes().put(TypeDef.ALSO_IMPORT, updatedImports); } }
private static final Set<TypeParamDef> extractParameters(ClassRef classRef) { final Set<TypeParamDef> result = new LinkedHashSet<TypeParamDef>(); final Set<TypeParamRef> refs = new LinkedHashSet<TypeParamRef>(); ClassRef ignored = new ClassRefBuilder(classRef).accept(new TypeParamDefColletor(result)).accept(new TypeParamRefColletor(refs)).build(); for (TypeParamRef typeParamRef : refs) { result.add(new TypeParamDefBuilder().withName(typeParamRef.getName()).withAttributes(typeParamRef.getAttributes()).build()); } return result; }
private void visitMethodBuilder(MethodBuilder builder) { if (builder.getReturnType() instanceof ClassRef) { ClassRefBuilder classRefBuilder = new ClassRefBuilder((ClassRef) builder.getReturnType()); if (classRefBuilder.getDefinition() != null && classRefBuilder.getDefinition().getPackageName() != null && classRefBuilder.getDefinition().getPackageName().equals(target)) { classRefBuilder.editDefinition().withPackageName(replacement).endDefinition(); } builder.withReturnType(classRefBuilder.accept(this).build()); } }
private void visitPropertyBuilder(PropertyBuilder builder) { if (builder.getTypeRef() instanceof ClassRef) { ClassRefBuilder classRefBuilder = new ClassRefBuilder((ClassRef) builder.getTypeRef()); if (classRefBuilder.getDefinition() != null && classRefBuilder.getDefinition().getPackageName() != null && classRefBuilder.getDefinition().getPackageName().equals(target)) { classRefBuilder.editDefinition().withPackageName(replacement).endDefinition(); } builder.withTypeRef(classRefBuilder.accept(this).build()); } }