1336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beustpackage org.testng.internal;
2336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
3b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport java.lang.reflect.Method;
4b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport java.util.Collections;
5b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport java.util.List;
6b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport java.util.Map;
7b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beust
8336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beustimport org.testng.ITestNGMethod;
9ca520d28e1855f27e7fdab6c85aee4065758c2ebCédric Beustimport org.testng.annotations.IAnnotation;
102d568355761a9632bf24a87984e241f8a079d724Cédric Beustimport org.testng.annotations.IConfigurationAnnotation;
112d568355761a9632bf24a87984e241f8a079d724Cédric Beustimport org.testng.annotations.ITestAnnotation;
12c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beustimport org.testng.collections.Lists;
130f6db64c011bc71dcdb432d7d27730b04f5ef2c1Cédric Beustimport org.testng.collections.Maps;
14b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport org.testng.internal.annotations.AnnotationHelper;
15b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport org.testng.internal.annotations.ConfigurationAnnotation;
16b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport org.testng.internal.annotations.IAfterClass;
17b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport org.testng.internal.annotations.IAfterGroups;
18b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport org.testng.internal.annotations.IAfterMethod;
19b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport org.testng.internal.annotations.IAfterSuite;
20b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport org.testng.internal.annotations.IAfterTest;
21b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport org.testng.internal.annotations.IAnnotationFinder;
22b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport org.testng.internal.annotations.IBeforeClass;
23b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport org.testng.internal.annotations.IBeforeGroups;
24b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport org.testng.internal.annotations.IBeforeMethod;
25b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport org.testng.internal.annotations.IBeforeSuite;
26b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beustimport org.testng.internal.annotations.IBeforeTest;
2745a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust
28336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beustpublic class ConfigurationMethod extends BaseTestMethod {
290f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin  /**
300f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   *
310f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin   */
320f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin  private static final long serialVersionUID = -6537771498553619645L;
33336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  private final boolean m_isBeforeSuiteConfiguration;
34336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  private final boolean m_isAfterSuiteConfiguration;
35336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
36336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  private final boolean m_isBeforeTestConfiguration;
37336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  private final boolean m_isAfterTestConfiguration;
380f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
39336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  private final boolean m_isBeforeClassConfiguration;
40336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  private final boolean m_isAfterClassConfiguration;
41336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
42336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  private final boolean m_isBeforeMethodConfiguration;
43336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  private final boolean m_isAfterMethodConfiguration;
4445a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust
45336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  private boolean m_inheritGroupsFromTestClass = false;
46336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
470f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin  private ConfigurationMethod(ConstructorOrMethod com,
48aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                              IAnnotationFinder annotationFinder,
49aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                              boolean isBeforeSuite,
50aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                              boolean isAfterSuite,
51aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                              boolean isBeforeTest,
52aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                              boolean isAfterTest,
530f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin                              boolean isBeforeClass,
54aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                              boolean isAfterClass,
550f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin                              boolean isBeforeMethod,
56aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                              boolean isAfterMethod,
57aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                              String[] beforeGroups,
58aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                              String[] afterGroups,
59d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust                              boolean initialize,
60d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust                              Object instance)
6145a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust  {
6210749d45726849381f4ff7384ef7154cec5299d4Jose Dillet    super(com.getName(), com, annotationFinder, instance);
63aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm    if(initialize) {
64aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm      init();
65aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm    }
660f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
67336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    m_isBeforeSuiteConfiguration = isBeforeSuite;
68336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    m_isAfterSuiteConfiguration = isAfterSuite;
69336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
70336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    m_isBeforeTestConfiguration = isBeforeTest;
71336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    m_isAfterTestConfiguration = isAfterTest;
720f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
73336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    m_isBeforeClassConfiguration = isBeforeClass;
74336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    m_isAfterClassConfiguration = isAfterClass;
75336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
76336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    m_isBeforeMethodConfiguration = isBeforeMethod;
77336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    m_isAfterMethodConfiguration = isAfterMethod;
780f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
79336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    m_beforeGroups = beforeGroups;
80336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    m_afterGroups = afterGroups;
810f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
82336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
830f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
840f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin  /**
850f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin   * @deprecated use #ConfigurationMethod(ConstructorOrMethod,...) instead.
860f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin   */
87b35d5f96bcebbe9f26cb6359101e57b90fcc49bbCédric Beust  @Deprecated
880f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin  public ConfigurationMethod(Method method,
89aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                             IAnnotationFinder annotationFinder,
90aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                             boolean isBeforeSuite,
91aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                             boolean isAfterSuite,
92aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                             boolean isBeforeTest,
93aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                             boolean isAfterTest,
940f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin                             boolean isBeforeClass,
95aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                             boolean isAfterClass,
960f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin                             boolean isBeforeMethod,
97aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                             boolean isAfterMethod,
98aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm                             String[] beforeGroups,
99d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust                             String[] afterGroups,
100d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust                             Object instance)
101aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm  {
1020f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin    this(new ConstructorOrMethod(method), annotationFinder, isBeforeSuite, isAfterSuite, isBeforeTest, isAfterTest,
1030f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin        isBeforeClass, isAfterClass, isBeforeMethod, isAfterMethod, beforeGroups, afterGroups, instance);
1040f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin  }
1050f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin
1060f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin  public ConfigurationMethod(ConstructorOrMethod com,
1070f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin                             IAnnotationFinder annotationFinder,
1080f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin                             boolean isBeforeSuite,
1090f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin                             boolean isAfterSuite,
1100f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin                             boolean isBeforeTest,
1110f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin                             boolean isAfterTest,
1120f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin                             boolean isBeforeClass,
1130f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin                             boolean isAfterClass,
1140f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin                             boolean isBeforeMethod,
1150f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin                             boolean isAfterMethod,
1160f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin                             String[] beforeGroups,
1170f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin                             String[] afterGroups,
1180f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin                             Object instance) {
1190f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin    this(com, annotationFinder, isBeforeSuite, isAfterSuite, isBeforeTest, isAfterTest,
120d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust        isBeforeClass, isAfterClass, isBeforeMethod, isAfterMethod, beforeGroups, afterGroups,
121d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust        true, instance);
122aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm  }
123336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
124c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust  private static ITestNGMethod[] createMethods(ITestNGMethod[] methods, IAnnotationFinder finder,
125c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust      boolean isBeforeSuite,
126c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust      boolean isAfterSuite,
127c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust      boolean isBeforeTest,
128c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust      boolean isAfterTest,
129c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust      boolean isBeforeClass,
130c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust      boolean isAfterClass,
131c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust      boolean isBeforeMethod,
132c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust      boolean isAfterMethod,
133c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust      String[] beforeGroups,
134d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust      String[] afterGroups,
135d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust      Object instance)
136c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust  {
137c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust    List<ITestNGMethod> result = Lists.newArrayList();
138d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt      for (ITestNGMethod method : methods) {
139d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt          result.add(new ConfigurationMethod(method.getConstructorOrMethod(),
140d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt                  finder,
141d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt                  isBeforeSuite,
142d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt                  isAfterSuite,
143d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt                  isBeforeTest,
144d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt                  isAfterTest,
145d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt                  isBeforeClass,
146d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt                  isAfterClass,
147d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt                  isBeforeMethod,
148d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt                  isAfterMethod,
149d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt                  new String[0],
150d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt                  new String[0],
151d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt                  instance));
152d46142454fa19e07df3851321c2d35df0f52a7daRyan Schmitt      }
1530f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
154c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust    return result.toArray(new ITestNGMethod[result.size()]);
155c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust  }
156c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust
157c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust
158c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust  public static ITestNGMethod[] createSuiteConfigurationMethods(ITestNGMethod[] methods,
159d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust      IAnnotationFinder annotationFinder, boolean isBefore, Object instance) {
160c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust    return createMethods(methods, annotationFinder,
161c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        isBefore,
162c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        !isBefore,
163c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
164c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
165c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
166c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
167c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
168c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
169c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        new String[0],
170d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust        new String[0],
171d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust        instance);
172336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
173336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
174336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  public static ITestNGMethod[] createTestConfigurationMethods(ITestNGMethod[] methods,
175d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust      IAnnotationFinder annotationFinder, boolean isBefore, Object instance) {
1760f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin    return createMethods(methods, annotationFinder,
1770f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin        false,
1780f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin        false,
1790f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin        isBefore,
1800f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin        !isBefore,
1810f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin        false,
1820f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin        false,
1830f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin        false,
1840f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin        false,
1850f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin        new String[0],
1860f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin        new String[0],
1870f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin        instance);
188336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
189336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
190336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  public static ITestNGMethod[] createClassConfigurationMethods(ITestNGMethod[] methods,
191d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust      IAnnotationFinder annotationFinder, boolean isBefore, Object instance)  {
192c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust    return createMethods(methods, annotationFinder,
193c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
194c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
195c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
196c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
197c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        isBefore,
198c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        !isBefore,
199c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
200c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
201c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        new String[0],
202d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust        new String[0],
203d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust        instance);
204336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
2050f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
2060f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin  public static ITestNGMethod[] createBeforeConfigurationMethods(ITestNGMethod[] methods,
207d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust      IAnnotationFinder annotationFinder, boolean isBefore, Object instance)
208336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  {
209336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    ITestNGMethod[] result = new ITestNGMethod[methods.length];
210336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    for(int i = 0; i < methods.length; i++) {
2110f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin      result[i] = new ConfigurationMethod(methods[i].getConstructorOrMethod(),
212c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          annotationFinder,
213c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          false,
214c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          false,
215c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          false,
216c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          false,
217c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          false,
218c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          false,
219c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          false,
220c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          false,
221c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          isBefore ? methods[i].getBeforeGroups() : new String[0],
222d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust          new String[0],
223d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust          instance);
224336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      }
2250f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
226336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    return result;
227336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
228336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
2290f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin  public static ITestNGMethod[] createAfterConfigurationMethods(ITestNGMethod[] methods,
230d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust      IAnnotationFinder annotationFinder, boolean isBefore, Object instance)
231336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  {
232336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    ITestNGMethod[] result = new ITestNGMethod[methods.length];
233336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    for(int i = 0; i < methods.length; i++) {
2340f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin      result[i] = new ConfigurationMethod(methods[i].getConstructorOrMethod(),
235c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          annotationFinder,
236c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          false,
237c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          false,
238c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          false,
239c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          false,
240c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          false,
241c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          false,
242c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          false,
243c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          false,
244c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust          new String[0],
245d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust          isBefore ? new String[0] : methods[i].getAfterGroups(),
246d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust          instance);
247336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      }
2480f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
249336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    return result;
250336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
2510f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
252336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  public static ITestNGMethod[] createTestMethodConfigurationMethods(ITestNGMethod[] methods,
253d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust      IAnnotationFinder annotationFinder, boolean isBefore, Object instance) {
254c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust    return createMethods(methods, annotationFinder,
255c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
256c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
257c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
258c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
259c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
260c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        false,
261c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        isBefore,
262c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        !isBefore,
263c2f269c2c123407058d36416782b081a39c3f4b4Cédric Beust        new String[0],
264d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust        new String[0],
265d2cb0ebdfecac643c380d1e84f273f5ba92374a4Cédric Beust        instance);
266336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
2670f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
268336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
269336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   * @return Returns the isAfterClassConfiguration.
270336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
271336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  @Override
272336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  public boolean isAfterClassConfiguration() {
273336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    return m_isAfterClassConfiguration;
274336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
275336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
276336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   * @return Returns the isAfterMethodConfiguration.
277336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
278336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  @Override
279336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  public boolean isAfterMethodConfiguration() {
280336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    return m_isAfterMethodConfiguration;
281336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
282336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
283336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   * @return Returns the isBeforeClassConfiguration.
284336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
285336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  @Override
286336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  public boolean isBeforeClassConfiguration() {
287336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    return m_isBeforeClassConfiguration;
288336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
289336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
290336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   * @return Returns the isBeforeMethodConfiguration.
291336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
292336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  @Override
293336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  public boolean isBeforeMethodConfiguration() {
294336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    return m_isBeforeMethodConfiguration;
295336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
2960f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
297336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
298336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
299336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   * @return Returns the isAfterSuiteConfiguration.
300336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
301336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  @Override
302336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  public boolean isAfterSuiteConfiguration() {
303336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    return m_isAfterSuiteConfiguration;
304336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
3050f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
306336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  /**
307336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   * @return Returns the isBeforeSuiteConfiguration.
308336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust   */
309336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  @Override
310336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  public boolean isBeforeSuiteConfiguration() {
311336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    return m_isBeforeSuiteConfiguration;
312336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
313336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
314336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  @Override
315336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  public boolean isBeforeTestConfiguration() {
316336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    return m_isBeforeTestConfiguration;
317336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
318336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
319336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  @Override
320336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  public boolean isAfterTestConfiguration() {
321336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    return m_isAfterTestConfiguration;
322336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
3230f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
3240f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin  @Override
325336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  public boolean isBeforeGroupsConfiguration() {
326336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    return m_beforeGroups != null && m_beforeGroups.length > 0;
327336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
328336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
3290f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin  @Override
330336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  public boolean isAfterGroupsConfiguration() {
331336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    return m_afterGroups != null && m_afterGroups.length > 0;
332336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
333336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
334336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  private boolean inheritGroupsFromTestClass() {
335336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    return m_inheritGroupsFromTestClass;
336336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
3370f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
338336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  private void init() {
339bc6f64ddd5ba1ec9dc81bc5066eed7984fefa3f6Cédric Beust    IAnnotation a = AnnotationHelper.findConfiguration(m_annotationFinder, m_method.getMethod());
3402d568355761a9632bf24a87984e241f8a079d724Cédric Beust    IConfigurationAnnotation annotation = (IConfigurationAnnotation) a;
341336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    if (a != null) {
342336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      m_inheritGroupsFromTestClass = annotation.getInheritGroups();
3437c34e4fb500043899ef7c6cc29c62e4c2026d0b5Cédric Beust      setEnabled(annotation.getEnabled());
344336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      setDescription(annotation.getDescription());
345336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
346336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
347336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    if (annotation != null && annotation.isFakeConfiguration()) {
3480f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin     if (annotation.getBeforeSuite()) {
3490f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      initGroups(IBeforeSuite.class);
3500f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    }
3510f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin     if (annotation.getAfterSuite()) {
3520f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      initGroups(IAfterSuite.class);
3530f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    }
3540f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin     if (annotation.getBeforeTest()) {
3550f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      initGroups(IBeforeTest.class);
3560f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    }
3570f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin     if (annotation.getAfterTest()) {
3580f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      initGroups(IAfterTest.class);
3590f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    }
3600f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin     if (annotation.getBeforeGroups().length != 0) {
3610f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      initGroups(IBeforeGroups.class);
3620f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    }
3630f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin     if (annotation.getAfterGroups().length != 0) {
3640f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      initGroups(IAfterGroups.class);
3650f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    }
3660f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin     if (annotation.getBeforeTestClass()) {
3670f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      initGroups(IBeforeClass.class);
3680f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    }
3690f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin     if (annotation.getAfterTestClass()) {
3700f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      initGroups(IAfterClass.class);
3710f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    }
3720f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin     if (annotation.getBeforeTestMethod()) {
3730f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      initGroups(IBeforeMethod.class);
3740f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    }
3750f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin     if (annotation.getAfterTestMethod()) {
3760f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin      initGroups(IAfterMethod.class);
3770f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin    }
378336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
379336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    else {
3802d568355761a9632bf24a87984e241f8a079d724Cédric Beust      initGroups(IConfigurationAnnotation.class);
381336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
382336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
383336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    // If this configuration method has inherit-groups=true, add the groups
384336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    // defined in the @Test class
385336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    if (inheritGroupsFromTestClass()) {
3865153b6767f7cafe0916e73eac9a6d31838e7592aVladislav Rassokhin      ITestAnnotation classAnnotation = m_annotationFinder.findAnnotation(m_methodClass, ITestAnnotation.class);
387336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      if (classAnnotation != null) {
388336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust        String[] groups = classAnnotation.getGroups();
3890f6db64c011bc71dcdb432d7d27730b04f5ef2c1Cédric Beust        Map<String, String> newGroups = Maps.newHashMap();
390336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust        for (String g : getGroups()) {
391336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust          newGroups.put(g, g);
392336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust        }
393336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust        if (groups != null) {
394336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust          for (String g : groups) {
395336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust            newGroups.put(g, g);
396336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust          }
397336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust          setGroups(newGroups.values().toArray(new String[newGroups.size()]));
398336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust        }
399336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust      }
400336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    }
401830ff4bf3fbfae0d63cb762b9c0d9a184feb58a3Cédric Beust
4021963187da6a45f898e62e4e922faac6b9382b4e4nullin    if (annotation != null) {
4031963187da6a45f898e62e4e922faac6b9382b4e4nullin      setTimeOut(annotation.getTimeOut());
4041963187da6a45f898e62e4e922faac6b9382b4e4nullin    }
405336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
4060f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
407336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  private static void ppp(String s) {
408336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust    System.out.println("[ConfigurationMethod] " + s);
409336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust  }
410336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
4110f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin  @Override
412aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm  public ConfigurationMethod clone() {
4130f4cf7bdb6fa5515ebc62e29ee7f88d5410e0326Vladislav Rassokhin    ConfigurationMethod clone= new ConfigurationMethod(getConstructorOrMethod(),
414aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm        getAnnotationFinder(),
415aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm        isBeforeSuiteConfiguration(),
416aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm        isAfterSuiteConfiguration(),
417aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm        isBeforeTestConfiguration(),
418aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm        isAfterTestConfiguration(),
419aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm        isBeforeClassConfiguration(),
420aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm        isAfterClassConfiguration(),
421aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm        isBeforeMethodConfiguration(),
422aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm        isAfterMethodConfiguration(),
423aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm        getBeforeGroups(),
424aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm        getAfterGroups(),
425f2c9bcdd798a553f2d0400a51a1a480a414edae2Cédric Beust        false /* do not call init() */,
426f2c9bcdd798a553f2d0400a51a1a480a414edae2Cédric Beust        getInstance()
427aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm        );
428aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm    clone.m_testClass= getTestClass();
429aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm    clone.setDate(getDate());
430aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm    clone.setGroups(getGroups());
4315c10ec0ace583f43750bd4ba280df7d2c638db04Cédric Beust    clone.setGroupsDependedUpon(getGroupsDependedUpon(), Collections.<String>emptyList());
432aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm    clone.setMethodsDependedUpon(getMethodsDependedUpon());
433aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm    clone.setAlwaysRun(isAlwaysRun());
434aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm    clone.setMissingGroup(getMissingGroup());
435aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm    clone.setDescription(getDescription());
4367c34e4fb500043899ef7c6cc29c62e4c2026d0b5Cédric Beust    clone.setEnabled(getEnabled());
437aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm    clone.setParameterInvocationCount(getParameterInvocationCount());
438aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm    clone.m_inheritGroupsFromTestClass= inheritGroupsFromTestClass();
439336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
440aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm    return clone;
441aec0b211238fc0ecc0095927c67ec4397311e705the.mindstorm  }
4420f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin
44345a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust  public boolean isFirstTimeOnly() {
44445a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust    boolean result = false;
44545a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust    IAnnotation before = m_annotationFinder.findAnnotation(getMethod(), IBeforeMethod.class);
44645a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust    if (before != null) {
44745a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust      result = ((ConfigurationAnnotation) before).isFirstTimeOnly();
44845a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust    }
44945a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust    return result;
45045a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust  }
45145a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust
45245a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust  public boolean isLastTimeOnly() {
45345a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust    boolean result = false;
45445a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust    IAnnotation before = m_annotationFinder.findAnnotation(getMethod(), IAfterMethod.class);
45545a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust    if (before != null) {
45645a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust      result = ((ConfigurationAnnotation) before).isLastTimeOnly();
45745a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust    }
45845a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust    return result;
45945a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust  }
46045a161fb7f6ba0937ec480fef1a803524bc07214Cédric Beust
461336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust}
462336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust
463