Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
import org.mapstruct.ap.internal.util.Strings;
import org.mapstruct.ap.internal.util.accessor.Accessor;
import org.mapstruct.ap.internal.util.accessor.AccessorType;
import org.mapstruct.ap.internal.util.accessor.ParameterElementAccessor;
import org.mapstruct.ap.internal.util.accessor.ElementAccessor;
import org.mapstruct.ap.internal.util.accessor.PresenceCheckAccessor;
import org.mapstruct.ap.internal.util.accessor.ReadAccessor;

Expand Down Expand Up @@ -1067,7 +1067,7 @@ private Accessor createConstructorAccessor(Element element, TypeMirror accessedT
existingVariableNames
);
existingVariableNames.add( safeParameterName );
return new ParameterElementAccessor( element, accessedType, safeParameterName );
return new ElementAccessor( element, accessedType, safeParameterName );
}

private boolean hasDefaultAnnotationFromAnyPackage(Element element) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
Expand All @@ -23,7 +23,7 @@
import javax.lang.model.type.TypeMirror;

import org.mapstruct.ap.internal.util.accessor.Accessor;
import org.mapstruct.ap.internal.util.accessor.ExecutableElementAccessor;
import org.mapstruct.ap.internal.util.accessor.ElementAccessor;
import org.mapstruct.ap.internal.util.accessor.ReadAccessor;

import static org.mapstruct.ap.internal.util.Collections.first;
Expand Down Expand Up @@ -64,7 +64,7 @@ public Filters(AccessorNamingUtils accessorNaming, TypeUtils typeUtils, TypeMirr
public List<ReadAccessor> getterMethodsIn(List<ExecutableElement> elements) {
return elements.stream()
.filter( accessorNaming::isGetterMethod )
.map( method -> ReadAccessor.fromGetter( method, getReturnType( method ) ) )
.map( method -> ReadAccessor.fromGetter( method, getReturnType( method ) ) )
.collect( Collectors.toCollection( LinkedList::new ) );
}

Expand All @@ -90,7 +90,10 @@ public Map<String, ReadAccessor> recordAccessorsIn(Collection<Element> recordCom
for ( Element recordComponent : recordComponents ) {
recordAccessors.put(
recordComponent.getSimpleName().toString(),
ReadAccessor.fromRecordComponent( recordComponent )
ReadAccessor.fromRecordComponent(
recordComponent,
typeUtils.asMemberOf( (DeclaredType) typeMirror, recordComponent )
)
);
}

Expand All @@ -101,10 +104,10 @@ private TypeMirror getReturnType(ExecutableElement executableElement) {
return getWithinContext( executableElement ).getReturnType();
}

public <T> List<T> fieldsIn(List<VariableElement> accessors, Function<VariableElement, T> creator) {
public <T> List<T> fieldsIn(List<VariableElement> accessors, BiFunction<VariableElement, TypeMirror, T> creator) {
return accessors.stream()
.filter( Fields::isFieldAccessor )
.map( creator )
.map( variableElement -> creator.apply( variableElement, getWithinContext( variableElement ) ) )
.collect( Collectors.toCollection( LinkedList::new ) );
}

Expand All @@ -117,7 +120,7 @@ public List<ExecutableElement> presenceCheckMethodsIn(List<ExecutableElement> el
public List<Accessor> setterMethodsIn(List<ExecutableElement> elements) {
return elements.stream()
.filter( accessorNaming::isSetterMethod )
.map( method -> new ExecutableElementAccessor( method, getFirstParameter( method ), SETTER ) )
.map( method -> new ElementAccessor( method, getFirstParameter( method ), SETTER ) )
.collect( Collectors.toCollection( LinkedList::new ) );
}

Expand All @@ -129,10 +132,14 @@ private ExecutableType getWithinContext( ExecutableElement executableElement ) {
return (ExecutableType) typeUtils.asMemberOf( (DeclaredType) typeMirror, executableElement );
}

private TypeMirror getWithinContext( VariableElement variableElement ) {
return typeUtils.asMemberOf( (DeclaredType) typeMirror, variableElement );
}

public List<Accessor> adderMethodsIn(List<ExecutableElement> elements) {
return elements.stream()
.filter( accessorNaming::isAdderMethod )
.map( method -> new ExecutableElementAccessor( method, getFirstParameter( method ), ADDER ) )
.map( method -> new ElementAccessor( method, getFirstParameter( method ), ADDER ) )
.collect( Collectors.toCollection( LinkedList::new ) );
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,61 @@
*/
package org.mapstruct.ap.internal.util.accessor;

import java.util.Set;
import javax.lang.model.element.Element;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.TypeMirror;

/**
* An {@link Accessor} that wraps a {@link VariableElement}.
*
* An {@link Accessor} that wraps a {@link Element}.
* Used for getter, setter, filed, constructor, record-class, etc.
* @author Filip Hrisafov
* @author Tang Yang
*/
public class ElementAccessor extends AbstractAccessor<Element> {
public class ElementAccessor implements Accessor {

private final Element element;
private final String name;
private final AccessorType accessorType;
private final TypeMirror accessedType;

public ElementAccessor(VariableElement variableElement, TypeMirror accessedType) {
this( variableElement, accessedType, AccessorType.FIELD );
}

public ElementAccessor(VariableElement variableElement) {
this( variableElement, AccessorType.FIELD );
public ElementAccessor(Element element, TypeMirror accessedType, String name) {
this.element = element;
this.name = name;
this.accessedType = accessedType;
this.accessorType = AccessorType.PARAMETER;
}

public ElementAccessor(Element element, AccessorType accessorType) {
super( element );
public ElementAccessor(Element element, TypeMirror accessedType, AccessorType accessorType) {
this.element = element;
this.accessedType = accessedType;
this.accessorType = accessorType;
this.name = null;
}

@Override
public TypeMirror getAccessedType() {
return element.asType();
return accessedType != null ? accessedType : element.asType();
}

@Override
public String getSimpleName() {
return name != null ? name : element.getSimpleName().toString();
}

@Override
public Set<Modifier> getModifiers() {
return element.getModifiers();
}

@Override
public Element getElement() {
return element;
}

@Override
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,17 @@ public interface ReadAccessor extends Accessor {

String getReadValueSource();

static ReadAccessor fromField(VariableElement variableElement) {
return new ReadDelegateAccessor( new ElementAccessor( variableElement ) ) {
static ReadAccessor fromField(VariableElement variableElement, TypeMirror accessedType) {
return new ReadDelegateAccessor( new ElementAccessor( variableElement, accessedType ) ) {
@Override
public String getReadValueSource() {
return getSimpleName();
}
};
}

static ReadAccessor fromRecordComponent(Element element) {
return new ReadDelegateAccessor( new ElementAccessor( element, AccessorType.GETTER ) ) {
static ReadAccessor fromRecordComponent(Element element, TypeMirror accessedType) {
return new ReadDelegateAccessor( new ElementAccessor( element, accessedType, AccessorType.GETTER ) ) {
@Override
public String getReadValueSource() {
return getSimpleName() + "()";
Expand All @@ -36,7 +36,7 @@ public String getReadValueSource() {
}

static ReadAccessor fromGetter(ExecutableElement element, TypeMirror accessedType) {
return new ReadDelegateAccessor( new ExecutableElementAccessor( element, accessedType, AccessorType.GETTER ) ) {
return new ReadDelegateAccessor( new ElementAccessor( element, accessedType, AccessorType.GETTER ) ) {
@Override
public String getReadValueSource() {
return getSimpleName() + "()";
Expand Down

This file was deleted.

Loading