/* * ModeShape (http://www.modeshape.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.modeshape.sequencer.javafile.metadata; import java.util.ArrayList; import java.util.List; /** * Represent the {@link org.modeshape.sequencer.javafile.metadata.MethodMetadata} */ public class MethodMetadata extends AbstractMetadata { private Type type; private FieldMetadata returnType; private List<FieldMetadata> parameters = new ArrayList<FieldMetadata>(); private MethodMetadata( String name, Type type ) { this.name = name; this.type = type; } /** * @return parameters */ public List<FieldMetadata> getParameters() { return parameters; } /** * @return parameters */ public List<String> getParameterTypes() { List<String> params = new ArrayList<String>(parameters.size()); for (FieldMetadata param : parameters) { params.add(param.getType()); } return params; } /** * @return returnType */ public FieldMetadata getReturnType() { return returnType; } public String getReturnTypeName() { return returnType == null ? Void.TYPE.getCanonicalName() : returnType.getType(); } /** * @param returnType Sets returnType to the specified value. */ public void setReturnType( FieldMetadata returnType ) { this.returnType = returnType; } public String getId() { StringBuilder buff = new StringBuilder(); buff.append(getName()).append('('); boolean first = true; for (FieldMetadata parameter : parameters) { if (first) { first = false; } else { buff.append(", "); } buff.append(shortNameFor(parameter.getType()).replace("[]", " array")); } buff.append(')'); return buff.toString(); } private String shortNameFor( String type ) { assert type != null; int lastDotPos = type.lastIndexOf('.'); if (lastDotPos < 0) { return type; } return type.substring(lastDotPos + 1); } public Type getType() { return type; } public static MethodMetadata constructorType( String name ) { return new MethodMetadata(name, Type.CONSTRUCTOR); } public static MethodMetadata methodMemberType( String name ) { return new MethodMetadata(name, Type.METHOD_TYPE_MEMBER); } public static enum Type { CONSTRUCTOR, METHOD_TYPE_MEMBER } }