diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromReferenceExpressionActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromReferenceExpressionActionFactory.kt index 2b947f279a5..0160ec5ef50 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromReferenceExpressionActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromReferenceExpressionActionFactory.kt @@ -87,6 +87,10 @@ object CreateClassFromReferenceExpressionActionFactory : CreateClassFromUsageFac } } } + val parent = element.parent + if (parent is KtClassLiteralExpression && parent.receiverExpression == element) { + return listOf(ClassKind.PLAIN_CLASS, ClassKind.ENUM_CLASS, ClassKind.INTERFACE, ClassKind.ANNOTATION_CLASS, ClassKind.OBJECT) + } if (fullCallExpr.getAssignmentByLHS() != null) return Collections.emptyList() diff --git a/idea/testData/quickfix/autoImports/excludedCoroutineImpl.kt b/idea/testData/quickfix/autoImports/excludedCoroutineImpl.kt index 8ddfaa6ea51..43ac3ed327d 100644 --- a/idea/testData/quickfix/autoImports/excludedCoroutineImpl.kt +++ b/idea/testData/quickfix/autoImports/excludedCoroutineImpl.kt @@ -5,6 +5,10 @@ // ACTION: Create parameter 'CoroutineImpl' // ACTION: Create property 'CoroutineImpl' // ACTION: Introduce local variable +// ACTION: Create annotation 'CoroutineImpl' +// ACTION: Create class 'CoroutineImpl' +// ACTION: Create enum 'CoroutineImpl' +// ACTION: Create interface 'CoroutineImpl' // ACTION: Rename reference // ERROR: Unresolved reference: CoroutineImpl diff --git a/idea/testData/quickfix/autoImports/excludedFromImport.kt b/idea/testData/quickfix/autoImports/excludedFromImport.kt index 3fdd75afeb7..c571f91a7ac 100644 --- a/idea/testData/quickfix/autoImports/excludedFromImport.kt +++ b/idea/testData/quickfix/autoImports/excludedFromImport.kt @@ -4,6 +4,10 @@ // ACTION: Create object 'FunctionReference' // ACTION: Create parameter 'FunctionReference' // ACTION: Create property 'FunctionReference' +// ACTION: Create annotation 'FunctionReference' +// ACTION: Create class 'FunctionReference' +// ACTION: Create enum 'FunctionReference' +// ACTION: Create interface 'FunctionReference' // ACTION: Introduce local variable // ACTION: Rename reference // ERROR: Unresolved reference: FunctionReference diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/annotationByClassLiteral.kt b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/annotationByClassLiteral.kt new file mode 100644 index 00000000000..930b2fed398 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/annotationByClassLiteral.kt @@ -0,0 +1,6 @@ +// "Create annotation 'Foo'" "true" + class Test{ + fun doSth(){ + Foo::class.java + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/annotationByClassLiteral.kt.after b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/annotationByClassLiteral.kt.after new file mode 100644 index 00000000000..b88597656e8 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/annotationByClassLiteral.kt.after @@ -0,0 +1,8 @@ +// "Create annotation 'Foo'" "true" + class Test{ + fun doSth(){ + Foo::class.java + } +} + +annotation class Foo diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/classByClassLiteral.kt b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/classByClassLiteral.kt new file mode 100644 index 00000000000..069011033ce --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/classByClassLiteral.kt @@ -0,0 +1,6 @@ +// "Create class 'Foo'" "true" + class Test{ + fun doSth(){ + Foo::class.java + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/classByClassLiteral.kt.after b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/classByClassLiteral.kt.after new file mode 100644 index 00000000000..c8eeacde265 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/classByClassLiteral.kt.after @@ -0,0 +1,10 @@ +// "Create class 'Foo'" "true" + class Test{ + fun doSth(){ + Foo::class.java + } +} + +class Foo { + +} diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumByClassLiteral.kt b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumByClassLiteral.kt new file mode 100644 index 00000000000..460c154df4f --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumByClassLiteral.kt @@ -0,0 +1,6 @@ +// "Create enum 'Foo'" "true" + class Test{ + fun doSth(){ + Foo::class.java + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumByClassLiteral.kt.after b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumByClassLiteral.kt.after new file mode 100644 index 00000000000..f75db539810 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumByClassLiteral.kt.after @@ -0,0 +1,10 @@ +// "Create enum 'Foo'" "true" + class Test{ + fun doSth(){ + Foo::class.java + } +} + +enum class Foo { + +} diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/interfaceByClassLiteral.kt b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/interfaceByClassLiteral.kt new file mode 100644 index 00000000000..683ff80c4c2 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/interfaceByClassLiteral.kt @@ -0,0 +1,6 @@ +// "Create interface 'Foo'" "true" + class Test{ + fun doSth(){ + Foo::class.java + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/interfaceByClassLiteral.kt.after b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/interfaceByClassLiteral.kt.after new file mode 100644 index 00000000000..d58589dd272 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/interfaceByClassLiteral.kt.after @@ -0,0 +1,10 @@ +// "Create interface 'Foo'" "true" + class Test{ + fun doSth(){ + Foo::class.java + } +} + +interface Foo { + +} diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectByClassLiteral.kt b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectByClassLiteral.kt new file mode 100644 index 00000000000..2da1d28241a --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectByClassLiteral.kt @@ -0,0 +1,6 @@ +// "Create object 'Foo'" "true" + class Test{ + fun doSth(){ + Foo::class.java + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectByClassLiteral.kt.after b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectByClassLiteral.kt.after new file mode 100644 index 00000000000..ea2b01bce4e --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectByClassLiteral.kt.after @@ -0,0 +1,10 @@ +// "Create object 'Foo'" "true" + class Test{ + fun doSth(){ + Foo::class.java + } +} + +object Foo { + +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index ec4e14f3364..1cf895106d4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -1727,12 +1727,24 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/createFromUsage/createClass/referenceExpression"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), TargetBackend.ANY, true); } + @TestMetadata("annotationByClassLiteral.kt") + public void testAnnotationByClassLiteral() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/annotationByClassLiteral.kt"); + doTest(fileName); + } + @TestMetadata("annotationNoReceiver.kt") public void testAnnotationNoReceiver() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/annotationNoReceiver.kt"); doTest(fileName); } + @TestMetadata("classByClassLiteral.kt") + public void testClassByClassLiteral() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/classByClassLiteral.kt"); + doTest(fileName); + } + @TestMetadata("classByNestedQualifier.kt") public void testClassByNestedQualifier() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/classByNestedQualifier.kt"); @@ -1769,6 +1781,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("enumByClassLiteral.kt") + public void testEnumByClassLiteral() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumByClassLiteral.kt"); + doTest(fileName); + } + @TestMetadata("enumByQualifier.kt") public void testEnumByQualifier() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumByQualifier.kt"); @@ -1835,6 +1853,18 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("interfaceByClassLiteral.kt") + public void testInterfaceByClassLiteral() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/interfaceByClassLiteral.kt"); + doTest(fileName); + } + + @TestMetadata("objectByClassLiteral.kt") + public void testObjectByClassLiteral() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectByClassLiteral.kt"); + doTest(fileName); + } + @TestMetadata("objectByQualifier.kt") public void testObjectByQualifier() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/objectByQualifier.kt");