protected void _transform(final MutableClassDeclaration it, @Extension final TransformationContext context) { AnnotationReference _findAnnotation = it.findAnnotation(context.findTypeGlobally(Data.class)); boolean _tripleNotEquals = (_findAnnotation != null); if (_tripleNotEquals) { return; } @Extension final FinalFieldsConstructorProcessor.Util requiredArgsUtil = new FinalFieldsConstructorProcessor.Util(context); if ((requiredArgsUtil.needsFinalFieldConstructor(it) || (it.findAnnotation(context.findTypeGlobally(FinalFieldsConstructor.class)) != null))) { requiredArgsUtil.addFinalFieldsConstructor(it); } final Function1<MutableFieldDeclaration, Boolean> _function = (MutableFieldDeclaration it_1) -> { return Boolean.valueOf(((!it_1.isStatic()) && context.isThePrimaryGeneratedJavaElement(it_1))); }; final Consumer<MutableFieldDeclaration> _function_1 = (MutableFieldDeclaration it_1) -> { this._transform(it_1, context); }; IterableExtensions.filter(it.getDeclaredFields(), _function).forEach(_function_1); }
public void makeFinalFieldsConstructor(final MutableConstructorDeclaration it) { boolean _isEmpty = this.getFinalFieldsConstructorArgumentTypes(it.getDeclaringType()).isEmpty(); if (_isEmpty) { final AnnotationReference anno = it.findAnnotation(this.context.findTypeGlobally(FinalFieldsConstructor.class)); return; boolean _hasFinalFieldsConstructor = this.hasFinalFieldsConstructor(it.getDeclaringType()); if (_hasFinalFieldsConstructor) { this.context.addError(it, this.getConstructorAlreadyExistsMessage(it.getDeclaringType())); return; ResolvedConstructor _superConstructor = this.getSuperConstructor(it.getDeclaringType()); Iterable<? extends ResolvedParameter> _resolvedParameters = null; if (_superConstructor!=null) { final Consumer<MutableFieldDeclaration> _function_1 = (MutableFieldDeclaration p) -> { p.markAsInitializedBy(it); final MutableParameterDeclaration param = it.addParameter(p.getSimpleName(), this.orObject(p.getType())); fieldToParameter.put(p, param); }; this.getFinalFields(it.getDeclaringType()).forEach(_function_1); StringConcatenationClient _client = new StringConcatenationClient() { @Override
final ToStringProcessor.Util toStringUtil = new ToStringProcessor.Util(context); @Extension final FinalFieldsConstructorProcessor.Util requiredArgsUtil = new FinalFieldsConstructorProcessor.Util(context); final Consumer<MutableFieldDeclaration> _function = (MutableFieldDeclaration it_1) -> { Element _primarySourceElement = context.getPrimarySourceElement(it_1); }; util.getDataFields(it).forEach(_function); if ((requiredArgsUtil.needsFinalFieldConstructor(it) || (it.findAnnotation(context.findTypeGlobally(FinalFieldsConstructor.class)) != null))) { requiredArgsUtil.addFinalFieldsConstructor(it); boolean _not_2 = (!_hasToString); if (_not_2) { ResolvedConstructor _superConstructor = requiredArgsUtil.getSuperConstructor(it); boolean _tripleEquals = (_superConstructor == null); if (_tripleEquals) {
final ToStringProcessor.Util toStringUtil = new ToStringProcessor.Util(context); @Extension final FinalFieldsConstructorProcessor.Util requiredArgsUtil = new FinalFieldsConstructorProcessor.Util(context); final Consumer<MutableFieldDeclaration> _function = (MutableFieldDeclaration it_1) -> { it_1.setFinal(true); }; util.getDataFields(it).forEach(_function); boolean _needsFinalFieldConstructor = requiredArgsUtil.needsFinalFieldConstructor(it); if (_needsFinalFieldConstructor) { requiredArgsUtil.addFinalFieldsConstructor(it);
@Override protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) { _builder.append("super("); final Function1<ResolvedParameter, CharSequence> _function = (ResolvedParameter it_1) -> { return it_1.getDeclaration().getSimpleName(); }; String _join = IterableExtensions.join(superParameters, ", ", _function); _builder.append(_join); _builder.append(");"); _builder.newLineIfNotEmpty(); { Iterable<? extends MutableFieldDeclaration> _finalFields = Util.this.getFinalFields(it.getDeclaringType()); for(final MutableFieldDeclaration arg : _finalFields) { _builder.append("this."); String _simpleName = arg.getSimpleName(); _builder.append(_simpleName); _builder.append(" = "); String _simpleName_1 = fieldToParameter.get(arg).getSimpleName(); _builder.append(_simpleName_1); _builder.append(";"); _builder.newLineIfNotEmpty(); } } } };
public ArrayList<TypeReference> getFinalFieldsConstructorArgumentTypes(final MutableTypeDeclaration cls) { ArrayList<TypeReference> _xblockexpression = null; { final ArrayList<TypeReference> types = CollectionLiterals.<TypeReference>newArrayList(); ResolvedConstructor _superConstructor = this.getSuperConstructor(cls); boolean _tripleNotEquals = (_superConstructor != null); if (_tripleNotEquals) { final Function1<ResolvedParameter, TypeReference> _function = (ResolvedParameter it) -> { return it.getResolvedType(); }; Iterable<TypeReference> _map = IterableExtensions.map(this.getSuperConstructor(cls).getResolvedParameters(), _function); Iterables.<TypeReference>addAll(types, _map); } final Function1<MutableFieldDeclaration, TypeReference> _function_1 = (MutableFieldDeclaration it) -> { return it.getType(); }; Iterable<TypeReference> _map_1 = IterableExtensions.map(this.getFinalFields(cls), _function_1); Iterables.<TypeReference>addAll(types, _map_1); _xblockexpression = types; } return _xblockexpression; }
public void addFinalFieldsConstructor(final MutableClassDeclaration it) { boolean _isEmpty = this.getFinalFieldsConstructorArgumentTypes(it).isEmpty(); if (_isEmpty) { final AnnotationReference anno = it.findAnnotation(this.context.findTypeGlobally(FinalFieldsConstructor.class)); StringConcatenation _builder = new StringConcatenation(); _builder.append("There are no final fields, this annotation has no effect"); this.context.addWarning(anno, _builder.toString()); return; } boolean _hasFinalFieldsConstructor = this.hasFinalFieldsConstructor(it); if (_hasFinalFieldsConstructor) { this.context.addError(it, this.getConstructorAlreadyExistsMessage(it)); return; } final Procedure1<MutableConstructorDeclaration> _function = (MutableConstructorDeclaration it_1) -> { this.context.setPrimarySourceElement(it_1, this.context.getPrimarySourceElement(it_1.getDeclaringType())); this.makeFinalFieldsConstructor(it_1); }; it.addConstructor(_function); }
public boolean hasFinalFieldsConstructor(final MutableTypeDeclaration cls) { boolean _xblockexpression = false; { final ArrayList<TypeReference> expectedTypes = this.getFinalFieldsConstructorArgumentTypes(cls); final Function1<MutableConstructorDeclaration, Boolean> _function = (MutableConstructorDeclaration it) -> { final Function1<MutableParameterDeclaration, TypeReference> _function_1 = (MutableParameterDeclaration it_1) -> { return it_1.getType(); }; List<TypeReference> _list = IterableExtensions.<TypeReference>toList(IterableExtensions.map(it.getParameters(), _function_1)); return Boolean.valueOf(Objects.equal(_list, expectedTypes)); }; _xblockexpression = IterableExtensions.exists(cls.getDeclaredConstructors(), _function); } return _xblockexpression; }
protected void _transform(final MutableClassDeclaration it, @Extension final TransformationContext context) { AnnotationReference _findAnnotation = it.findAnnotation(context.findTypeGlobally(Data.class)); boolean _tripleNotEquals = (_findAnnotation != null); if (_tripleNotEquals) { return; } AnnotationReference _findAnnotation_1 = it.findAnnotation(context.findTypeGlobally(Accessors.class)); boolean _tripleNotEquals_1 = (_findAnnotation_1 != null); if (_tripleNotEquals_1) { return; } @Extension final FinalFieldsConstructorProcessor.Util util = new FinalFieldsConstructorProcessor.Util(context); util.addFinalFieldsConstructor(it); }
public boolean needsFinalFieldConstructor(final MutableClassDeclaration it) { return ((!this.hasFinalFieldsConstructor(it)) && IterableExtensions.isEmpty(((ClassDeclaration) this.context.getPrimarySourceElement(it)).getDeclaredConstructors())); }
public String getConstructorAlreadyExistsMessage(final MutableTypeDeclaration it) { StringConcatenation _builder = new StringConcatenation(); _builder.append("Cannot create FinalFieldsConstructor as a constructor with the signature \"new("); String _join = IterableExtensions.join(this.getFinalFieldsConstructorArgumentTypes(it), ","); _builder.append(_join); _builder.append(")\" already exists."); return _builder.toString(); }
protected void _transform(final MutableConstructorDeclaration it, @Extension final TransformationContext context) { @Extension final FinalFieldsConstructorProcessor.Util util = new FinalFieldsConstructorProcessor.Util(context); util.makeFinalFieldsConstructor(it); }