All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.jdt.internal.core.CreateMethodOperation Maven / Gradle / Ivy

/*******************************************************************************
 * Copyright (c) 2000, 2013 IBM Corporation and others.
 * 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdt.internal.core;

import java.util.Iterator;
import java.util.List;

import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaModelStatus;
import org.eclipse.jdt.core.IJavaModelStatusConstants;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.Signature;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.MethodDeclaration;
import org.eclipse.jdt.core.dom.SimpleName;
import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
import org.eclipse.jdt.internal.core.util.Messages;
import org.eclipse.jdt.internal.core.util.Util;

/**
 * 

This operation creates an instance method. * *

Required Attributes:

    *
  • Containing type *
  • The source code for the method. No verification of the source is * performed. *
*/ @SuppressWarnings("rawtypes") public class CreateMethodOperation extends CreateTypeMemberOperation { protected String[] parameterTypes; /** * When executed, this operation will create a method * in the given type with the specified source. */ public CreateMethodOperation(IType parentElement, String source, boolean force) { super(parentElement, source, force); } /** * Returns the type signatures of the parameter types of the * current MethodDeclaration */ protected String[] convertASTMethodTypesToSignatures() { if (this.parameterTypes == null) { if (this.createdNode != null) { MethodDeclaration methodDeclaration = (MethodDeclaration) this.createdNode; List parameters = methodDeclaration.parameters(); int size = parameters.size(); this.parameterTypes = new String[size]; Iterator iterator = parameters.iterator(); // convert the AST types to signatures for (int i = 0; i < size; i++) { SingleVariableDeclaration parameter = (SingleVariableDeclaration) iterator.next(); String typeSig = Util.getSignature(parameter.getType()); int extraDimensions = parameter.getExtraDimensions(); if (methodDeclaration.isVarargs() && i == size-1) extraDimensions++; this.parameterTypes[i] = Signature.createArraySignature(typeSig, extraDimensions); } } } return this.parameterTypes; } protected ASTNode generateElementAST(ASTRewrite rewriter, ICompilationUnit cu) throws JavaModelException { ASTNode node = super.generateElementAST(rewriter, cu); if (node.getNodeType() != ASTNode.METHOD_DECLARATION) throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.INVALID_CONTENTS)); return node; } /** * @see CreateElementInCUOperation#generateResultHandle */ protected IJavaElement generateResultHandle() { String[] types = convertASTMethodTypesToSignatures(); String name = getASTNodeName(); return getType().getMethod(name, types); } private String getASTNodeName() { return ((MethodDeclaration) this.createdNode).getName().getIdentifier(); } /** * @see CreateElementInCUOperation#getMainTaskName() */ public String getMainTaskName(){ return Messages.operation_createMethodProgress; } protected SimpleName rename(ASTNode node, SimpleName newName) { MethodDeclaration method = (MethodDeclaration) node; SimpleName oldName = method.getName(); method.setName(newName); return oldName; } /** * @see CreateTypeMemberOperation#verifyNameCollision */ protected IJavaModelStatus verifyNameCollision() { if (this.createdNode != null) { IType type = getType(); String name; if (((MethodDeclaration) this.createdNode).isConstructor()) name = type.getElementName(); else name = getASTNodeName(); String[] types = convertASTMethodTypesToSignatures(); if (type.getMethod(name, types).exists()) { return new JavaModelStatus( IJavaModelStatusConstants.NAME_COLLISION, Messages.bind(Messages.status_nameCollision, name)); } } return JavaModelStatus.VERIFIED_OK; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy