LightCodeInsightTestCase: now test name can force the language level.

This commit is contained in:
Tagir Valeev
2017-04-28 15:14:27 +07:00
parent e018f574e4
commit c3dd106963
7 changed files with 36 additions and 22 deletions
@@ -23,10 +23,15 @@ import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.impl.JavaPsiFacadeEx;
import org.jetbrains.annotations.NotNull;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* A TestCase for single PsiFile being opened in Editor conversion. See configureXXX and checkResultXXX method docs.
*/
public abstract class LightCodeInsightTestCase extends LightPlatformCodeInsightTestCase {
private static final Pattern JDK_SELECT_PATTERN = Pattern.compile("Java([\\d.]+).java$");
public static JavaPsiFacadeEx getJavaFacade() {
return JavaPsiFacadeEx.getInstanceEx(ourProject);
}
@@ -37,7 +42,31 @@ public abstract class LightCodeInsightTestCase extends LightPlatformCodeInsightT
setLanguageLevel(getLanguageLevel());
}
/**
* Returns a language level for test. Could be overridden for specific behavior.
* <p>
* This implementation checks the test name. If it ends with JavaXYZ.java and
* XYZ is known Java version (e.g. Java1.4.java or Java9.java), then version XYZ is returned.
* Otherwise {@link #getDefaultLanguageLevel() default version} is returned.
*
* @return a project language level for test.
*/
protected LanguageLevel getLanguageLevel() {
Matcher matcher = JDK_SELECT_PATTERN.matcher(getTestName(false));
if(matcher.find()) {
LanguageLevel level = LanguageLevel.parse(matcher.group(1));
if (level != null) {
return level;
}
}
return getDefaultLanguageLevel();
}
/**
* @return default language level if it's not forced by test name
*/
protected LanguageLevel getDefaultLanguageLevel() {
return LanguageLevel.HIGHEST;
}