From b8dc1b67717ebae56e947900bafc9e2727e47d14 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 8 Dec 2016 16:31:59 +0300 Subject: [PATCH] Allow regex matching of available action names; accept both 2016.2 and 2016.3 names of static import quickfix --- ...otlinCompanionPropertyAsFieldFromJava.test | 4 ++-- ...KotlinCompanionStaticFunctionFromJava.test | 4 ++-- ...onStaticPropertyDefaultGetterFromJava.test | 4 ++-- ...onStaticPropertyDefaultSetterFromJava.test | 4 ++-- ...taticPropertyOverloadedGetterFromJava.test | 4 ++-- ...taticPropertyOverloadedSetterFromJava.test | 4 ++-- .../importKotlinPropertyAsFieldFromJava.test | 4 ++-- .../importKotlinStaticFunctionFromJava.test | 4 ++-- ...inStaticPropertyDefaultGetterFromJava.test | 4 ++-- ...inStaticPropertyDefaultSetterFromJava.test | 4 ++-- ...taticPropertyOverloadedGetterFromJava.test | 4 ++-- ...taticPropertyOverloadedSetterFromJava.test | 4 ++-- .../AbstractQuickFixMultiFileTest.java | 21 +++++++++++++++++-- 13 files changed, 43 insertions(+), 26 deletions(-) diff --git a/idea/testData/quickfix/autoImports/importKotlinCompanionPropertyAsFieldFromJava.test b/idea/testData/quickfix/autoImports/importKotlinCompanionPropertyAsFieldFromJava.test index d0ff4146972..f54d633145f 100644 --- a/idea/testData/quickfix/autoImports/importKotlinCompanionPropertyAsFieldFromJava.test +++ b/idea/testData/quickfix/autoImports/importKotlinCompanionPropertyAsFieldFromJava.test @@ -1,5 +1,5 @@ // FILE: bar/Foo.before.java -// "Static import constant 'foo.Bar.Companion.foobar'" "true" +// "/(Static import|Import static) constant 'foo.Bar.Companion.foobar'/" "true" // ERROR: Unresolved reference: foobar // ACTION: Rename reference // ACTION: Create field 'foobar' @@ -26,7 +26,7 @@ object Bar { } // FILE: bar/Foo.after.java -// "Static import constant 'foo.Bar.Companion.foobar'" "true" +// "/(Static import|Import static) constant 'foo.Bar.Companion.foobar'/" "true" // ERROR: Unresolved reference: foobar // ACTION: Rename reference // ACTION: Create field 'foobar' diff --git a/idea/testData/quickfix/autoImports/importKotlinCompanionStaticFunctionFromJava.test b/idea/testData/quickfix/autoImports/importKotlinCompanionStaticFunctionFromJava.test index 6230b1b4e14..5427123070c 100644 --- a/idea/testData/quickfix/autoImports/importKotlinCompanionStaticFunctionFromJava.test +++ b/idea/testData/quickfix/autoImports/importKotlinCompanionStaticFunctionFromJava.test @@ -1,5 +1,5 @@ // FILE: bar/Foo.before.java -// "Static import method 'foo.Bar.foobar'" "true" +// "/(Static import|Import static) method 'foo.Bar.foobar'/" "true" // ERROR: Unresolved reference: foobar // ACTION: Create method 'foobar' // WITH_RUNTIME @@ -25,7 +25,7 @@ class Bar { } // FILE: bar/Foo.after.java -// "Static import method 'foo.Bar.foobar'" "true" +// "/(Static import|Import static) method 'foo.Bar.foobar'/" "true" // ERROR: Unresolved reference: foobar // ACTION: Create method 'foobar' // WITH_RUNTIME diff --git a/idea/testData/quickfix/autoImports/importKotlinCompanionStaticPropertyDefaultGetterFromJava.test b/idea/testData/quickfix/autoImports/importKotlinCompanionStaticPropertyDefaultGetterFromJava.test index df5cec76906..6bdeb05ce39 100644 --- a/idea/testData/quickfix/autoImports/importKotlinCompanionStaticPropertyDefaultGetterFromJava.test +++ b/idea/testData/quickfix/autoImports/importKotlinCompanionStaticPropertyDefaultGetterFromJava.test @@ -1,5 +1,5 @@ // FILE: bar/Foo.before.java -// "Static import method 'foo.Bar.getValue'" "true" +// "/(Static import|Import static) method 'foo.Bar.getValue'/" "true" // ERROR: Unresolved reference: getValue // ACTION: Create method 'foobar' // WITH_RUNTIME @@ -23,7 +23,7 @@ object Bar { } // FILE: bar/Foo.after.java -// "Static import method 'foo.Bar.getValue'" "true" +// "/(Static import|Import static) method 'foo.Bar.getValue'/" "true" // ERROR: Unresolved reference: getValue // ACTION: Create method 'foobar' // WITH_RUNTIME diff --git a/idea/testData/quickfix/autoImports/importKotlinCompanionStaticPropertyDefaultSetterFromJava.test b/idea/testData/quickfix/autoImports/importKotlinCompanionStaticPropertyDefaultSetterFromJava.test index 5ae9fd6f96c..e2ecf2c5ce7 100644 --- a/idea/testData/quickfix/autoImports/importKotlinCompanionStaticPropertyDefaultSetterFromJava.test +++ b/idea/testData/quickfix/autoImports/importKotlinCompanionStaticPropertyDefaultSetterFromJava.test @@ -1,5 +1,5 @@ // FILE: bar/Foo.before.java -// "Static import method 'foo.Bar.setVariable'" "true" +// "/(Static import|Import static) method 'foo.Bar.setVariable'/" "true" // ERROR: Unresolved reference: setVariable // ACTION: Create method 'foobar' // WITH_RUNTIME @@ -23,7 +23,7 @@ object Bar { } // FILE: bar/Foo.after.java -// "Static import method 'foo.Bar.setVariable'" "true" +// "/(Static import|Import static) method 'foo.Bar.setVariable'/" "true" // ERROR: Unresolved reference: setVariable // ACTION: Create method 'foobar' // WITH_RUNTIME diff --git a/idea/testData/quickfix/autoImports/importKotlinCompanionStaticPropertyOverloadedGetterFromJava.test b/idea/testData/quickfix/autoImports/importKotlinCompanionStaticPropertyOverloadedGetterFromJava.test index b7105c7a202..734bbd4d237 100644 --- a/idea/testData/quickfix/autoImports/importKotlinCompanionStaticPropertyOverloadedGetterFromJava.test +++ b/idea/testData/quickfix/autoImports/importKotlinCompanionStaticPropertyOverloadedGetterFromJava.test @@ -1,5 +1,5 @@ // FILE: bar/Foo.before.java -// "Static import method 'foo.Bar.getValue'" "true" +// "/(Static import|Import static) method 'foo.Bar.getValue'/" "true" // ERROR: Unresolved reference: getValue // ACTION: Create method 'foobar' // WITH_RUNTIME @@ -25,7 +25,7 @@ object Bar { } // FILE: bar/Foo.after.java -// "Static import method 'foo.Bar.getValue'" "true" +// "/(Static import|Import static) method 'foo.Bar.getValue'/" "true" // ERROR: Unresolved reference: getValue // ACTION: Create method 'foobar' // WITH_RUNTIME diff --git a/idea/testData/quickfix/autoImports/importKotlinCompanionStaticPropertyOverloadedSetterFromJava.test b/idea/testData/quickfix/autoImports/importKotlinCompanionStaticPropertyOverloadedSetterFromJava.test index 5d05eb02466..4d8ddd52d6d 100644 --- a/idea/testData/quickfix/autoImports/importKotlinCompanionStaticPropertyOverloadedSetterFromJava.test +++ b/idea/testData/quickfix/autoImports/importKotlinCompanionStaticPropertyOverloadedSetterFromJava.test @@ -1,5 +1,5 @@ // FILE: bar/Foo.before.java -// "Static import method 'foo.Bar.setVariable'" "true" +// "/(Static import|Import static) method 'foo.Bar.setVariable'/" "true" // ERROR: Unresolved reference: setVariable // ACTION: Create method 'foobar' // WITH_RUNTIME @@ -26,7 +26,7 @@ object Bar { } // FILE: bar/Foo.after.java -// "Static import method 'foo.Bar.setVariable'" "true" +// "/(Static import|Import static) method 'foo.Bar.setVariable'/" "true" // ERROR: Unresolved reference: setVariable // ACTION: Create method 'foobar' // WITH_RUNTIME diff --git a/idea/testData/quickfix/autoImports/importKotlinPropertyAsFieldFromJava.test b/idea/testData/quickfix/autoImports/importKotlinPropertyAsFieldFromJava.test index a7c6e4910a4..ac84166333c 100644 --- a/idea/testData/quickfix/autoImports/importKotlinPropertyAsFieldFromJava.test +++ b/idea/testData/quickfix/autoImports/importKotlinPropertyAsFieldFromJava.test @@ -1,5 +1,5 @@ // FILE: bar/Foo.before.java -// "Static import constant 'foo.Bar.foobar'" "true" +// "/(Static import|Import static) constant 'foo.Bar.foobar'/" "true" // ERROR: Unresolved reference: foobar // ACTION: Rename reference // ACTION: Create field 'foobar' @@ -24,7 +24,7 @@ object Bar { } // FILE: bar/Foo.after.java -// "Static import constant 'foo.Bar.foobar'" "true" +// "/(Static import|Import static) constant 'foo.Bar.foobar'/" "true" // ERROR: Unresolved reference: foobar // ACTION: Rename reference // ACTION: Create field 'foobar' diff --git a/idea/testData/quickfix/autoImports/importKotlinStaticFunctionFromJava.test b/idea/testData/quickfix/autoImports/importKotlinStaticFunctionFromJava.test index 457f472e2f8..edbc5433228 100644 --- a/idea/testData/quickfix/autoImports/importKotlinStaticFunctionFromJava.test +++ b/idea/testData/quickfix/autoImports/importKotlinStaticFunctionFromJava.test @@ -1,5 +1,5 @@ // FILE: bar/Foo.before.java -// "Static import method 'foo.Bar.foobar'" "true" +// "/(Static import|Import static) method 'foo.Bar.foobar'/" "true" // ERROR: Unresolved reference: foobar // ACTION: Create method 'foobar' // WITH_RUNTIME @@ -22,7 +22,7 @@ object Bar { } // FILE: bar/Foo.after.java -// "Static import method 'foo.Bar.foobar'" "true" +// "/(Static import|Import static) method 'foo.Bar.foobar'/" "true" // ERROR: Unresolved reference: foobar // ACTION: Create method 'foobar' // WITH_RUNTIME diff --git a/idea/testData/quickfix/autoImports/importKotlinStaticPropertyDefaultGetterFromJava.test b/idea/testData/quickfix/autoImports/importKotlinStaticPropertyDefaultGetterFromJava.test index 2b69d574958..d62eaa9c33c 100644 --- a/idea/testData/quickfix/autoImports/importKotlinStaticPropertyDefaultGetterFromJava.test +++ b/idea/testData/quickfix/autoImports/importKotlinStaticPropertyDefaultGetterFromJava.test @@ -1,5 +1,5 @@ // FILE: bar/Foo.before.java -// "Static import method 'foo.Bar.getValue'" "true" +// "/(Static import|Import static) method 'foo.Bar.getValue'/" "true" // ERROR: Unresolved reference: getValue // ACTION: Create method 'foobar' // WITH_RUNTIME @@ -21,7 +21,7 @@ object Bar { } // FILE: bar/Foo.after.java -// "Static import method 'foo.Bar.getValue'" "true" +// "/(Static import|Import static) method 'foo.Bar.getValue'/" "true" // ERROR: Unresolved reference: getValue // ACTION: Create method 'foobar' // WITH_RUNTIME diff --git a/idea/testData/quickfix/autoImports/importKotlinStaticPropertyDefaultSetterFromJava.test b/idea/testData/quickfix/autoImports/importKotlinStaticPropertyDefaultSetterFromJava.test index 22a052154a2..09097618807 100644 --- a/idea/testData/quickfix/autoImports/importKotlinStaticPropertyDefaultSetterFromJava.test +++ b/idea/testData/quickfix/autoImports/importKotlinStaticPropertyDefaultSetterFromJava.test @@ -1,5 +1,5 @@ // FILE: bar/Foo.before.java -// "Static import method 'foo.Bar.setVariable'" "true" +// "/(Static import|Import static) method 'foo.Bar.setVariable'/" "true" // ERROR: Unresolved reference: setVariable // ACTION: Create method 'foobar' // WITH_RUNTIME @@ -21,7 +21,7 @@ object Bar { } // FILE: bar/Foo.after.java -// "Static import method 'foo.Bar.setVariable'" "true" +// "/(Static import|Import static) method 'foo.Bar.setVariable'/" "true" // ERROR: Unresolved reference: setVariable // ACTION: Create method 'foobar' // WITH_RUNTIME diff --git a/idea/testData/quickfix/autoImports/importKotlinStaticPropertyOverloadedGetterFromJava.test b/idea/testData/quickfix/autoImports/importKotlinStaticPropertyOverloadedGetterFromJava.test index e587153e8fb..2bf52c66289 100644 --- a/idea/testData/quickfix/autoImports/importKotlinStaticPropertyOverloadedGetterFromJava.test +++ b/idea/testData/quickfix/autoImports/importKotlinStaticPropertyOverloadedGetterFromJava.test @@ -1,5 +1,5 @@ // FILE: bar/Foo.before.java -// "Static import method 'foo.Bar.getValue'" "true" +// "/(Static import|Import static) method 'foo.Bar.getValue'/" "true" // ERROR: Unresolved reference: getValue // ACTION: Create method 'foobar' // WITH_RUNTIME @@ -23,7 +23,7 @@ object Bar { } // FILE: bar/Foo.after.java -// "Static import method 'foo.Bar.getValue'" "true" +// "/(Static import|Import static) method 'foo.Bar.getValue'/" "true" // ERROR: Unresolved reference: getValue // ACTION: Create method 'foobar' // WITH_RUNTIME diff --git a/idea/testData/quickfix/autoImports/importKotlinStaticPropertyOverloadedSetterFromJava.test b/idea/testData/quickfix/autoImports/importKotlinStaticPropertyOverloadedSetterFromJava.test index 0cf9278165a..e983173f51f 100644 --- a/idea/testData/quickfix/autoImports/importKotlinStaticPropertyOverloadedSetterFromJava.test +++ b/idea/testData/quickfix/autoImports/importKotlinStaticPropertyOverloadedSetterFromJava.test @@ -1,5 +1,5 @@ // FILE: bar/Foo.before.java -// "Static import method 'foo.Bar.setVariable'" "true" +// "/(Static import|Import static) method 'foo.Bar.setVariable'/" "true" // ERROR: Unresolved reference: setVariable // ACTION: Create method 'foobar' // WITH_RUNTIME @@ -24,7 +24,7 @@ object Bar { } // FILE: bar/Foo.after.java -// "Static import method 'foo.Bar.setVariable'" "true" +// "/(Static import|Import static) method 'foo.Bar.setVariable'/" "true" // ERROR: Unresolved reference: setVariable // ACTION: Create method 'foobar' // WITH_RUNTIME diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/AbstractQuickFixMultiFileTest.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/AbstractQuickFixMultiFileTest.java index ec472346aa4..966137a857a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/AbstractQuickFixMultiFileTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/AbstractQuickFixMultiFileTest.java @@ -50,6 +50,7 @@ import kotlin.collections.ArraysKt; import kotlin.collections.CollectionsKt; import kotlin.jvm.functions.Function1; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.idea.KotlinDaemonAnalyzerTestCase; import org.jetbrains.kotlin.idea.KotlinFileType; import org.jetbrains.kotlin.idea.quickfix.utils.QuickfixTestUtilsKt; @@ -64,6 +65,7 @@ import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.util.*; +import java.util.regex.Pattern; public abstract class AbstractQuickFixMultiFileTest extends KotlinDaemonAnalyzerTestCase { @@ -445,8 +447,12 @@ public abstract class AbstractQuickFixMultiFileTest extends KotlinDaemonAnalyzer @SuppressWarnings({"HardCodedStringLiteral"}) public void doAction(String text, boolean actionShouldBeAvailable, String testFilePath) throws Exception { + Pattern pattern = text.startsWith("/") + ? Pattern.compile(text.substring(1, text.length()-1)) + : Pattern.compile(StringUtil.escapeToRegexp(text)); + List availableActions = getAvailableActions(); - IntentionAction action = LightQuickFixTestCase.findActionWithText(availableActions, text); + IntentionAction action = findActionByPattern(pattern, availableActions); if (action == null) { if (actionShouldBeAvailable) { @@ -475,7 +481,7 @@ public abstract class AbstractQuickFixMultiFileTest extends KotlinDaemonAnalyzer //noinspection ConstantConditions if (!shouldBeAvailableAfterExecution()) { - IntentionAction afterAction = LightQuickFixTestCase.findActionWithText(getAvailableActions(), text); + IntentionAction afterAction = findActionByPattern(pattern, getAvailableActions()); if (afterAction != null) { fail("Action '" + text + "' is still available after its invocation in test " + testFilePath); @@ -484,6 +490,17 @@ public abstract class AbstractQuickFixMultiFileTest extends KotlinDaemonAnalyzer } } + @Nullable + private static IntentionAction findActionByPattern(Pattern pattern, List availableActions) { + for (IntentionAction availableAction : availableActions) { + if (pattern.matcher(availableAction.getText()).matches()) { + return availableAction; + } + } + return null; + } + + private List getAvailableActions() { doHighlighting(); return LightQuickFixTestCase.getAvailableActions(getEditor(), getFile());