Can't omit default object name in imports and types
There should be only one way to denote a type (A.Default.B can't be denoted as A.B)
This commit is contained in:
@@ -37,11 +37,6 @@ public class Importer {
|
||||
else if (descriptor is ClassDescriptor && QualifiedExpressionResolver.canAllUnderImportFromClass(descriptor)) {
|
||||
allUnderImportScopes.add(descriptor.getStaticScope())
|
||||
allUnderImportScopes.add(descriptor.getUnsubstitutedInnerClassesScope())
|
||||
|
||||
val classObjectDescriptor = descriptor.getDefaultObjectDescriptor()
|
||||
if (classObjectDescriptor != null) {
|
||||
allUnderImportScopes.add(classObjectDescriptor.getUnsubstitutedInnerClassesScope())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ import com.google.common.collect.Collections2;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import kotlin.KotlinPackage;
|
||||
import org.jetbrains.annotations.Mutable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -108,7 +109,8 @@ public class QualifiedExpressionResolver {
|
||||
JetSimpleNameExpression referenceExpression = JetPsiUtil.getLastReference(importedReference);
|
||||
if (importDirective.isAllUnder()) {
|
||||
if (!canAllUnderImportFrom(descriptors) && referenceExpression != null) {
|
||||
trace.report(CANNOT_IMPORT_ON_DEMAND_FROM_SINGLETON.on(referenceExpression, (ClassDescriptor) descriptors.iterator().next()));
|
||||
ClassDescriptor toReportOn = KotlinPackage.filterIsInstance(descriptors, ClassDescriptor.class).iterator().next();
|
||||
trace.report(CANNOT_IMPORT_ON_DEMAND_FROM_SINGLETON.on(referenceExpression, toReportOn));
|
||||
}
|
||||
|
||||
if (referenceExpression == null || !canImportMembersFrom(descriptors, referenceExpression, trace, lookupMode)) {
|
||||
@@ -298,11 +300,6 @@ public class QualifiedExpressionResolver {
|
||||
results.add(lookupSimpleNameReference(selector, scope, lookupMode, false));
|
||||
|
||||
results.add(lookupSimpleNameReference(selector, descriptor.getStaticScope(), lookupMode, true));
|
||||
|
||||
ClassDescriptor classObject = descriptor.getDefaultObjectDescriptor();
|
||||
if (classObject != null) {
|
||||
addResultsForClass(results, selector, lookupMode, classObject);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ class A {
|
||||
}
|
||||
}
|
||||
|
||||
fun foo(x : A.Season) : String {
|
||||
fun foo(x : A.Default.Season) : String {
|
||||
return when (x) {
|
||||
A.Season.WINTER -> "winter"
|
||||
A.Season.SPRING -> "spring"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package f
|
||||
|
||||
import f.A.B
|
||||
import f.A.Default.B
|
||||
|
||||
class A {
|
||||
class object {
|
||||
|
||||
@@ -5,12 +5,12 @@ import b.B //class
|
||||
import b.foo //function
|
||||
import b.ext //extension function
|
||||
import b.value //property
|
||||
import b.C.<!CANNOT_BE_IMPORTED!>bar<!> //function from class object
|
||||
import b.C.<!CANNOT_BE_IMPORTED!>cValue<!> //property from class object
|
||||
import b.C.Default.<!CANNOT_BE_IMPORTED!>bar<!> //function from class object
|
||||
import b.C.Default.<!CANNOT_BE_IMPORTED!>cValue<!> //property from class object
|
||||
import b.<!CANNOT_IMPORT_FROM_ELEMENT!>constant<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>fff<!> //function from val
|
||||
import b.<!CANNOT_IMPORT_FROM_ELEMENT!>constant<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>dValue<!> //property from val
|
||||
import b.constant
|
||||
import b.E.<!CANNOT_BE_IMPORTED!>f<!> //val from class object
|
||||
import b.E.Default.<!CANNOT_BE_IMPORTED!>f<!> //val from class object
|
||||
import <!UNRESOLVED_REFERENCE!>smth<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>illegal<!>
|
||||
import b.C.<!UNRESOLVED_REFERENCE!>smth<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>illegal<!>
|
||||
import b.<!CANNOT_IMPORT_FROM_ELEMENT!>bar<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>smth<!>
|
||||
@@ -85,8 +85,8 @@ fun foo() {
|
||||
//FILE:d.kt
|
||||
package d
|
||||
|
||||
import d.A.B
|
||||
import d.A.C
|
||||
import d.A.Default.B
|
||||
import d.A.Default.C
|
||||
|
||||
val b : B = B()
|
||||
val c : B = C
|
||||
|
||||
+5
-5
@@ -21,10 +21,10 @@ public class M1 {
|
||||
public val a: A = A()
|
||||
public val b: A.B = A.B()
|
||||
public val c: A.C = A.C
|
||||
public val d: A.D = A.D()
|
||||
public val e: A.D.E = A.D.E
|
||||
public val d: A.Default.D = A.D()
|
||||
public val e: A.Default.D.E = A.D.E
|
||||
public val f: A.F = A().F()
|
||||
public val g: A.G = A.G()
|
||||
public val g: A.Default.G = A.G()
|
||||
}
|
||||
|
||||
// MODULE: m2
|
||||
@@ -47,8 +47,8 @@ public class A {
|
||||
public fun a(p: A) {}
|
||||
public fun b(p: A.B) {}
|
||||
public fun c(p: A.C) {}
|
||||
public fun d(p: A.D) {}
|
||||
public fun e(p: A.D.E) {}
|
||||
public fun d(p: A.Default.D) {}
|
||||
public fun e(p: A.Default.D.E) {}
|
||||
public fun f(p: A.F) {}
|
||||
public fun g(p: A.G) {}
|
||||
|
||||
|
||||
+1
-1
@@ -10,6 +10,6 @@ class Foo {
|
||||
}
|
||||
class User {
|
||||
fun main() : Unit {
|
||||
var <!UNUSED_VARIABLE!>boo<!> : Foo.Bar? /* <-- this reference is red */ = Foo.Bar()
|
||||
var <!UNUSED_VARIABLE!>boo<!> : Foo.Default.Bar? /* <-- this reference is red */ = Foo.Default.Bar()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// import all members from class object
|
||||
package c
|
||||
|
||||
import c.A.*
|
||||
import c.A.Default.B
|
||||
import c.<!CANNOT_IMPORT_ON_DEMAND_FROM_SINGLETON!>M<!>.*
|
||||
|
||||
fun foo() {
|
||||
|
||||
@@ -36,8 +36,8 @@ object N {
|
||||
package b
|
||||
|
||||
import b.N.M
|
||||
import b.A.P
|
||||
import b.A.B
|
||||
import b.A.Default.P
|
||||
import b.A.Default.B
|
||||
|
||||
fun foo() {
|
||||
val <!UNUSED_VARIABLE!>b<!> : B = B()
|
||||
|
||||
+1
-1
@@ -10,4 +10,4 @@ class A {
|
||||
}
|
||||
}
|
||||
|
||||
A.Anno1 A.B.Anno2 class C
|
||||
A.Default.Anno1 A.Default.B.Anno2 class C
|
||||
@@ -4,6 +4,6 @@ class A {
|
||||
}
|
||||
}
|
||||
|
||||
val v: A.Inner = <caret>
|
||||
val v: A.Default.Inner = <caret>
|
||||
|
||||
// ELEMENT: Inner
|
||||
|
||||
@@ -4,6 +4,6 @@ class A {
|
||||
}
|
||||
}
|
||||
|
||||
val v: A.Inner = A.Inner()<caret>
|
||||
val v: A.Default.Inner = A.Inner()
|
||||
|
||||
// ELEMENT: Inner
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ package test
|
||||
import dependency.*
|
||||
|
||||
public class DependencyOnNestedClasses : D.Nested() {
|
||||
fun f(nc: D.NestedInClassObject, i: D.Inner, ii: D.Inner.Inner, nn: D.Nested.Nested): D.Nested {
|
||||
fun f(nc: D.Default.NestedInClassObject, i: D.Inner, ii: D.Inner.Inner, nn: D.Nested.Nested): D.Nested {
|
||||
return D.Nested()
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ package test
|
||||
import dependency.*
|
||||
|
||||
public class DependencyOnNestedClasses : D.Nested() {
|
||||
fun f(nc: D.NestedInClassObject, i: D.Inner, ii: D.Inner.Inner, nn: D.Nested.Nested): D.Nested {
|
||||
fun f(nc: D.Default.NestedInClassObject, i: D.Inner, ii: D.Inner.Inner, nn: D.Nested.Nested): D.Nested {
|
||||
return D.Nested()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ class C {
|
||||
}
|
||||
}
|
||||
|
||||
fun C.D.text() {
|
||||
fun C.Default.D.text() {
|
||||
Nested()
|
||||
::Nested
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import MyClass.*
|
||||
import MyClass.Default.TEST
|
||||
|
||||
fun main() {
|
||||
TEST
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import MyClass.TEST
|
||||
import MyClass.Default.TEST
|
||||
|
||||
fun main() {
|
||||
TEST
|
||||
|
||||
Reference in New Issue
Block a user