|  | // Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  | package paramnames; | 
|  |  | 
|  | import java.lang.reflect.Constructor; | 
|  | import java.lang.reflect.Method; | 
|  | import java.lang.reflect.Parameter; | 
|  |  | 
|  | public class ParameterNames { | 
|  |  | 
|  | private static final int MODIFIER_NONE = 0; | 
|  | private static final int MODIFIER_FINAL = 0X10; | 
|  |  | 
|  | public ParameterNames(int a, final int b) { | 
|  | } | 
|  |  | 
|  | public static void check(String expected, String checked) { | 
|  | if (!expected.equals(checked)) { | 
|  | throw new RuntimeException("Found '" + checked + "' while expecting '" + expected + "'"); | 
|  | } | 
|  | } | 
|  |  | 
|  | public static void check(int expected, int checked) { | 
|  | if (expected != checked) { | 
|  | throw new RuntimeException("Found '" + checked + "' while expecting '" + expected + "'"); | 
|  | } | 
|  | } | 
|  |  | 
|  | public static void myMethod(int a, final int b) throws NoSuchMethodException { | 
|  | Class<ParameterNames> clazz = ParameterNames.class; | 
|  | Method myMethod = clazz.getDeclaredMethod("myMethod", int.class, int.class); | 
|  | Parameter[] parameters = myMethod.getParameters(); | 
|  | check(2, parameters.length); | 
|  | check("a", parameters[0].getName()); | 
|  | check("b", parameters[1].getName()); | 
|  | check(MODIFIER_NONE, parameters[0].getModifiers()); | 
|  | check(MODIFIER_FINAL, parameters[1].getModifiers()); | 
|  | } | 
|  |  | 
|  | public static void myConstructor() throws NoSuchMethodException { | 
|  | Class<ParameterNames> clazz = ParameterNames.class; | 
|  | Constructor<?> myConstructor = clazz.getDeclaredConstructor(int.class, int.class); | 
|  | Parameter[] parameters = myConstructor.getParameters(); | 
|  | check(2, parameters.length); | 
|  | check("a", parameters[0].getName()); | 
|  | check("b", parameters[1].getName()); | 
|  | check(MODIFIER_NONE, parameters[0].getModifiers()); | 
|  | check(MODIFIER_FINAL, parameters[1].getModifiers()); | 
|  | } | 
|  |  | 
|  | public static void main(String[] args) throws NoSuchMethodException { | 
|  | myMethod(0, 1); | 
|  | myConstructor(); | 
|  | } | 
|  | } |