/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.plugin.typescript.dto.model; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.IntStream; import static java.util.Objects.hash; import static org.eclipse.che.plugin.typescript.dto.DTOHelper.convertType; /** * Defines the model of the method * * @author Florent Benoit */ public class MethodModel { /** * Reflect object used internally. */ private Method method; /** * Typescript return value of the method */ private String returnType; /** * List of parameters for this method */ private List<ParameterMethodModel> parameters; /** * This method is a DTO getter method */ private boolean isGetter; /** * This method is a DTO setter method */ private boolean isSetter; /** * This method is a DTO with method */ private boolean isWith; /** * Name of the field associated to this method (field to return for a getter, field to store for setter/with) */ private String fieldName; /** * Type of the field associated to this method. */ private String fieldType; /** * Build a new model around the DTO method. * * @param method */ public MethodModel(Method method) { this.method = method; this.parameters = new ArrayList<>(); analyze(); } /** * Loop on all parameters and initialize return value as well */ protected void analyze() { IntStream.range(0, method.getGenericParameterTypes().length).forEach(i -> parameters.add(new ParameterMethodModel("arg" + i, convertType(method.getGenericParameterTypes()[i]))) ); // add return type this.returnType = convertType(method.getGenericReturnType()); } public boolean isGetter() { return isGetter; } public void setGetter(boolean getter) { isGetter = getter; } public boolean isSetter() { return isSetter; } public void setSetter(boolean setter) { isSetter = setter; } public boolean isWith() { return isWith; } public void setWith(boolean with) { isWith = with; } public String getName() { return this.method.getName(); } public List<ParameterMethodModel> getParameters() { return this.parameters; } public String getReturnType() { return this.returnType; } public void setFieldName(String fieldName) { this.fieldName = fieldName; } public String getFieldName() { return fieldName; } public void setFieldType(String fieldType) { this.fieldType = fieldType; } public String getFieldType() { return fieldType; } public int hashCode() { return hash(this.parameters.toString(), this.returnType); } public boolean equals(Object other) { if (other == null) { return false; } if (!(other instanceof MethodModel)) { return false; } MethodModel methodModelOther = (MethodModel) other; return this.getName().equals(methodModelOther.getName()) && this.returnType.equals(methodModelOther.returnType) && Arrays.equals(this.parameters.toArray(), methodModelOther.parameters.toArray()); } }