001/*-------------------------------------------------------------------------+
002|                                                                          |
003| Copyright 2005-2011 The ConQAT Project                                   |
004|                                                                          |
005| Licensed under the Apache License, Version 2.0 (the "License");          |
006| you may not use this file except in compliance with the License.         |
007| You may obtain a copy of the License at                                  |
008|                                                                          |
009|    http://www.apache.org/licenses/LICENSE-2.0                            |
010|                                                                          |
011| Unless required by applicable law or agreed to in writing, software      |
012| distributed under the License is distributed on an "AS IS" BASIS,        |
013| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
014| See the License for the specific language governing permissions and      |
015| limitations under the License.                                           |
016+-------------------------------------------------------------------------*/
017package org.conqat.lib.commons.reflect;
018
019import java.util.Comparator;
020
021/**
022 * This comparator orders formal parameters by their position within the formal
023 * parameter list of the defining method. This comparator raises an exception if
024 * the the compared parameters do not belong to the same method.
025 * 
026 * 
027 * @author Florian Deissenboeck
028 */
029public class FormalParameterComparator implements Comparator<FormalParameter> {
030
031        /**
032         * Compae formal parameters by their position within the formal parameter
033         * list of the defining method.
034         * 
035         * @throws IllegalArgumentException
036         *             if parameters belong to different methods.
037         */
038        @Override
039        public int compare(FormalParameter p1, FormalParameter p2) throws IllegalArgumentException {
040                if (!p1.getMethod().equals(p2.getMethod())) {
041                        throw new IllegalArgumentException("Parameters must belong to same method");
042                }
043                return p1.getPosition() - p2.getPosition();
044        }
045}