2a9f198efdea7310d6314a2dcc73f1ebd3c0eba5
[idea/community.git] / plugins / testng / src / com / theoryinpractice / testng / intention / TestNGExternalLibraryResolver.java
1 /*
2  * Copyright 2000-2015 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.theoryinpractice.testng.intention;
17
18 import com.intellij.codeInsight.daemon.quickFix.ExternalLibraryDescriptor;
19 import com.intellij.codeInsight.daemon.quickFix.ExternalLibraryResolver;
20 import com.intellij.openapi.module.Module;
21 import com.intellij.util.PathUtil;
22 import com.intellij.util.ThreeState;
23 import com.intellij.util.containers.ContainerUtil;
24 import org.jetbrains.annotations.NotNull;
25 import org.jetbrains.annotations.Nullable;
26 import org.testng.annotations.Test;
27
28 import java.util.Collections;
29 import java.util.List;
30 import java.util.Set;
31
32 /**
33  * @author nik
34  */
35 public class TestNGExternalLibraryResolver extends ExternalLibraryResolver {
36   private static final Set<String> TEST_NG_ANNOTATIONS = ContainerUtil.set(
37     "Test", "BeforeClass", "BeforeGroups", "BeforeMethod", "BeforeSuite", "BeforeTest", "AfterClass", "AfterGroups", "AfterMethod",
38     "AfterSuite", "AfterTest", "Configuration"
39   );
40   private static final ExternalLibraryDescriptor TESTNG_DESCRIPTOR = new ExternalLibraryDescriptor("org.testng", "testng", null) {
41     @NotNull
42     @Override
43     public List<String> getLibraryClassesRoots() {
44       return Collections.singletonList(PathUtil.getJarPathForClass(Test.class));
45     }
46   };
47
48   @Nullable
49   @Override
50   public ExternalClassResolveResult resolveClass(@NotNull String shortClassName, @NotNull ThreeState isAnnotation, @NotNull Module contextModule) {
51     if (TEST_NG_ANNOTATIONS.contains(shortClassName)) {
52       return new ExternalClassResolveResult("org.testng.annotations." + shortClassName, TESTNG_DESCRIPTOR);
53     }
54     return null;
55   }
56 }