[AA LC] Fix computation of const initializers of fields

This commit is contained in:
Dmitriy Novozhilov
2022-08-12 14:21:15 +03:00
parent 573b292cbc
commit c5916e1d1f
24 changed files with 199 additions and 42 deletions
@@ -40,7 +40,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
context(KtAnalysisSession)
internal abstract class SymbolLightClassForClassOrObject(
abstract class SymbolLightClassForClassOrObject(
private val classOrObjectSymbol: KtNamedClassOrObjectSymbol,
manager: PsiManager
) : SymbolLightClassBase(manager),
@@ -117,8 +117,6 @@ internal class SymbolLightFieldForProperty(
private val _initializer by lazyPub {
if (propertySymbol !is KtKotlinPropertySymbol) return@lazyPub null
if (!propertySymbol.isConst) return@lazyPub null
if (!propertySymbol.isVal) return@lazyPub null
val constInitializer = propertySymbol.initializer as? KtConstantInitializerValue ?: return@lazyPub null
(constInitializer.constant as? KtConstantValue)?.createPsiLiteral(this)
}
@@ -265,6 +265,7 @@ private fun KtKClassAnnotationValue.KtNonLocalKClassAnnotationValue.toAnnotation
private fun KtConstantValue.asStringForPsiLiteral(): String =
when (val value = value) {
is Char -> "'$value'"
is String -> "\"${escapeString(value)}\""
is Long -> "${value}L"
is Float -> "${value}f"
@@ -0,0 +1,18 @@
public final class A /* A*/ {
@kotlin.jvm.Transient()
@kotlin.jvm.Volatile()
@org.jetbrains.annotations.NotNull()
private transient volatile java.lang.String c = "" /* initializer type: java.lang.String */;
@kotlin.jvm.Strictfp()
@kotlin.jvm.Synchronized()
public final synchronized strictfp void f();// f()
@org.jetbrains.annotations.NotNull()
public final java.lang.String getC();// getC()
public A();// .ctor()
public final void setC(@org.jetbrains.annotations.NotNull() java.lang.String);// setC(java.lang.String)
}
@@ -15,4 +15,4 @@ public final class A /* A*/ {
public final void setC(@org.jetbrains.annotations.NotNull() java.lang.String);// setC(java.lang.String)
}
}
@@ -3,11 +3,11 @@ public final class SmartSet /* SmartSet*/<T> extends kotlin.collections.Abstrac
public static final SmartSet.Companion Companion;
@org.jetbrains.annotations.Nullable()
private java.lang.Object data;
private java.lang.Object data = null /* initializer type: null */;
private int size;
private int size = 0 /* initializer type: int */;
private static final int ARRAY_THRESHOLD;
private static final int ARRAY_THRESHOLD = 5 /* initializer type: int */;
@java.lang.Override()
@org.jetbrains.annotations.NotNull()
@@ -1,5 +1,5 @@
public final class C /* p.C*/ {
private final int ip;
private final int ip = 5 /* initializer type: int */;
public C();// .ctor()
@@ -71,8 +71,7 @@ public final class FileFacadeKt /* FileFacadeKt*/ {
@org.jetbrains.annotations.Nullable()
public static final void setNotNullVarWithGetSet(@org.jetbrains.annotations.NotNull() java.lang.String);// setNotNullVarWithGetSet(java.lang.String)
@org.jetbrains.annotations.Nullable()
static final java.lang.String privateFun(@org.jetbrains.annotations.NotNull() java.lang.String, @org.jetbrains.annotations.Nullable() java.lang.String);// privateFun(java.lang.String, java.lang.String)
private static final java.lang.String privateFun(java.lang.String, java.lang.String);// privateFun(java.lang.String, java.lang.String)
public static final void setNotNullVar(@org.jetbrains.annotations.NotNull() java.lang.String);// setNotNullVar(java.lang.String)
@@ -89,7 +89,7 @@ public abstract @interface Ann /* Ann*/ {
public final class F /* F*/ implements java.lang.Runnable {
@Anno(p = "p")
@org.jetbrains.annotations.NotNull()
private java.lang.String prop;
private java.lang.String prop = "x" /* initializer type: java.lang.String */;
@Anno(p = "f")
public final void f(@Anno() @org.jetbrains.annotations.NotNull() java.lang.String);// f(java.lang.String)
@@ -105,7 +105,7 @@ public final class F /* F*/ implements java.lang.Runnable {
public final class Foo /* Foo*/ {
@org.jetbrains.annotations.Nullable()
private java.lang.String x;
private java.lang.String x = null /* initializer type: null */;
@Anno()
public Foo(error.NonExistentClass);// .ctor(error.NonExistentClass)
@@ -36,7 +36,7 @@ public static final class Nested /* Outer.Nested*/ {
public abstract class A /* A*/ {
@org.jetbrains.annotations.Nullable()
private final java.lang.String x;
private final java.lang.String x = null /* initializer type: null */;
@org.jetbrains.annotations.Nullable()
public final java.lang.String getX();// getX()
+2 -1
View File
@@ -1,6 +1,7 @@
// IGNORE_FIR
// Ignored due to KT-53573
data class User(val name: String = "", val age: Int = 0)
data class Person(val name: String) {
var age: Int = 0
}
+2
View File
@@ -1,3 +1,5 @@
// IGNORE_FIR
// Ignored due to KT-53573
// CHECK_BY_JAVA_FILE
import java.util.function.*
@@ -9,9 +9,9 @@ public abstract interface IntfWithProp /* IntfWithProp*/ extends Intf {
}
public abstract class Base /* Base*/ {
private int y;
private int y = 1 /* initializer type: int */;
private int z;
private int z = 1 /* initializer type: int */;
@org.jetbrains.annotations.Nullable()
protected java.lang.Integer v();// v()
@@ -35,7 +35,7 @@ public abstract class Base /* Base*/ {
}
public final class Derived /* Derived*/ extends Base implements IntfWithProp {
private final int x;
private final int x = 3 /* initializer type: int */;
@java.lang.Override()
protected error.NonExistentClass v();// v()
+3 -1
View File
@@ -1,3 +1,5 @@
// IGNORE_FIR
// Ignored due to KT-53573
class A {
@JvmField
val a: Collection<*> = emptyList()
@@ -25,4 +27,4 @@ class C(
@JvmField
var b: Int = 1
)
// COMPILATION_ERRORS
// COMPILATION_ERRORS
@@ -8,7 +8,7 @@ public final class C /* C*/ {
@org.jetbrains.annotations.Nullable()
private final java.lang.String type;
private final boolean p1;
private final boolean p1 = false /* initializer type: boolean */;
@kotlin.jvm.JvmOverloads()
@kotlin.jvm.JvmStatic()
@@ -86,7 +86,7 @@ public final class C /* C*/ {
class Companion ...
}
public static final class Companion /* C.Companion*/ {
@@ -113,4 +113,4 @@ public static final class Companion /* C.Companion*/ {
private Companion();// .ctor()
}
}
@@ -0,0 +1,116 @@
public final class C /* C*/ {
@org.jetbrains.annotations.NotNull()
private final java.lang.String p2;
@org.jetbrains.annotations.NotNull()
public static final C.Companion Companion;
@org.jetbrains.annotations.Nullable()
private final java.lang.String type;
private final boolean p1;
@kotlin.jvm.JvmOverloads()
@kotlin.jvm.JvmStatic()
public static final void fooStatic(double);// fooStatic(double)
@kotlin.jvm.JvmOverloads()
@kotlin.jvm.JvmStatic()
public static final void fooStatic(int, double);// fooStatic(int, double)
@kotlin.jvm.JvmOverloads()
@kotlin.jvm.JvmStatic()
public static final void fooStatic(int, double, @org.jetbrains.annotations.NotNull() java.lang.String);// fooStatic(int, double, java.lang.String)
@kotlin.jvm.JvmOverloads()
public C(@org.jetbrains.annotations.Nullable() java.lang.String);// .ctor(java.lang.String)
@kotlin.jvm.JvmOverloads()
public C(@org.jetbrains.annotations.Nullable() java.lang.String, boolean);// .ctor(java.lang.String, boolean)
@kotlin.jvm.JvmOverloads()
public C(@org.jetbrains.annotations.Nullable() java.lang.String, boolean, @org.jetbrains.annotations.NotNull() java.lang.String);// .ctor(java.lang.String, boolean, java.lang.String)
@kotlin.jvm.JvmOverloads()
public final void bar();// bar()
@kotlin.jvm.JvmOverloads()
public final void bar(int);// bar(int)
@kotlin.jvm.JvmOverloads()
public final void bar(int, double);// bar(int, double)
@kotlin.jvm.JvmOverloads()
public final void bar(int, double, @org.jetbrains.annotations.NotNull() java.lang.String);// bar(int, double, java.lang.String)
@kotlin.jvm.JvmOverloads()
public final void baz(@org.jetbrains.annotations.NotNull() java.lang.String);// baz(java.lang.String)
@kotlin.jvm.JvmOverloads()
public final void baz(int, @org.jetbrains.annotations.NotNull() java.lang.String);// baz(int, java.lang.String)
@kotlin.jvm.JvmOverloads()
public final void baz(int, double, @org.jetbrains.annotations.NotNull() java.lang.String);// baz(int, double, java.lang.String)
@kotlin.jvm.JvmOverloads()
public final void foo(double);// foo(double)
@kotlin.jvm.JvmOverloads()
public final void foo(int, double);// foo(int, double)
@kotlin.jvm.JvmOverloads()
public final void foo(int, double, @org.jetbrains.annotations.NotNull() java.lang.String);// foo(int, double, java.lang.String)
@kotlin.jvm.JvmOverloads()
public final void foobar(int);// foobar(int)
@kotlin.jvm.JvmOverloads()
public final void foobar(int, double);// foobar(int, double)
@kotlin.jvm.JvmOverloads()
public final void foobar(int, double, @org.jetbrains.annotations.NotNull() java.lang.String);// foobar(int, double, java.lang.String)
@kotlin.jvm.JvmOverloads()
public final void foobarbaz(int, @org.jetbrains.annotations.NotNull() java.lang.String);// foobarbaz(int, java.lang.String)
@kotlin.jvm.JvmOverloads()
public final void foobarbaz(int, double, @org.jetbrains.annotations.NotNull() java.lang.String);// foobarbaz(int, double, java.lang.String)
@org.jetbrains.annotations.NotNull()
public final java.lang.String getP2();// getP2()
@org.jetbrains.annotations.Nullable()
public final java.lang.String getType();// getType()
public final boolean getP1();// getP1()
class Companion ...
}
public static final class Companion /* C.Companion*/ {
@kotlin.jvm.JvmOverloads()
@kotlin.jvm.JvmStatic()
public final void fooStatic(double);// fooStatic(double)
@kotlin.jvm.JvmOverloads()
@kotlin.jvm.JvmStatic()
public final void fooStatic(int, double);// fooStatic(int, double)
@kotlin.jvm.JvmOverloads()
@kotlin.jvm.JvmStatic()
public final void fooStatic(int, double, @org.jetbrains.annotations.NotNull() java.lang.String);// fooStatic(int, double, java.lang.String)
@kotlin.jvm.JvmOverloads()
public final void foo123(double);// foo123(double)
@kotlin.jvm.JvmOverloads()
public final void foo123(int, double);// foo123(int, double)
@kotlin.jvm.JvmOverloads()
public final void foo123(int, double, @org.jetbrains.annotations.NotNull() java.lang.String);// foo123(int, double, java.lang.String)
private Companion();// .ctor()
}
@@ -0,0 +1,10 @@
public final class A /* A*/ {
private int z = 1 /* initializer type: int */;
public A();// .ctor()
public final int getX();// getX()
public final void setX(int);// setX(int)
}
@@ -7,4 +7,4 @@ public final class A /* A*/ {
public final void setX(int);// setX(int)
}
}
@@ -1,7 +1,7 @@
public final class X /* X*/ {
private int v;
private int v = 1 /* initializer type: int */;
private int w;
private int w = 1 /* initializer type: int */;
@kotlin.jvm.JvmSynthetic()
public final int getV();// getV()
@@ -1,7 +1,7 @@
public final class C /* C*/ {
@kotlin.jvm.JvmStatic()
@org.jetbrains.annotations.NotNull()
private static java.lang.String x;
private static java.lang.String x = "" /* initializer type: java.lang.String */;
@org.jetbrains.annotations.NotNull()
private static java.lang.String c1;
@@ -96,7 +96,7 @@ public static final class Companion /* I.Companion*/ {
public final class Obj /* Obj*/ implements java.lang.Runnable {
@kotlin.jvm.JvmStatic()
@org.jetbrains.annotations.NotNull()
private static java.lang.String x;
private static java.lang.String x = "" /* initializer type: java.lang.String */;
@org.jetbrains.annotations.NotNull()
public static final Obj INSTANCE;
+3 -2
View File
@@ -1,4 +1,5 @@
// IGNORE_FIR
// Ignored due to KT-53573
import kotlin.reflect.KProperty
class Foo(a: Int, val b:Foo, var c:Boolean, private val d: List, protected val e: Long = 2) {
@@ -108,4 +109,4 @@ class Foo {
fun getMeNonNullFoo() : Foo = Foo()
}
// COMPILATION_ERRORS
// COMPILATION_ERRORS
@@ -48,9 +48,9 @@ public final class Y /* Y*/ {
public final class klass /* klass*/ {
@org.jetbrains.annotations.Nullable()
private final java.util.List<java.lang.Integer> y;
private final java.util.List<java.lang.Integer> y = null /* initializer type: null */;
private final int x;
private final int x = 2 /* initializer type: int */;
@org.jetbrains.annotations.NotNull()
public final X annotatedMethod(@org.jetbrains.annotations.NotNull() P<X, P<X, Y>>, @org.jetbrains.annotations.NotNull() Y[]);// annotatedMethod(P<X, P<X, Y>>, Y[])
@@ -0,0 +1,9 @@
public final class JvmFieldKt /* JvmFieldKt*/ {
@kotlin.jvm.JvmField()
@org.jetbrains.annotations.NotNull()
public static final java.util.Collection<?> a;
@kotlin.jvm.JvmField()
public static int b = 1 /* initializer type: int */;
}
@@ -6,7 +6,7 @@ public final class PropertiesKt /* PropertiesKt*/ {
private static final java.lang.Object arrayConst;
@org.jetbrains.annotations.NotNull()
private static final java.lang.String x;
private static final java.lang.String x = "" /* initializer type: java.lang.String */;
@org.jetbrains.annotations.NotNull()
private static final kotlin.Lazy<java.lang.String> lazyProp$delegate;
@@ -15,13 +15,13 @@ public final class PropertiesKt /* PropertiesKt*/ {
private static final kotlin.jvm.functions.Function1<java.lang.Integer, java.lang.Integer> sum;
@org.jetbrains.annotations.NotNull()
private static java.lang.String name;
private static java.lang.String name = "x" /* initializer type: java.lang.String */;
@org.jetbrains.annotations.NotNull()
private static java.lang.String protectedWithPrivateSet;
private static java.lang.String protectedWithPrivateSet = "" /* initializer type: java.lang.String */;
@org.jetbrains.annotations.NotNull()
private static java.lang.String x$1;
private static java.lang.String x$1 = "" /* initializer type: java.lang.String */;
@org.jetbrains.annotations.NotNull()
public static final java.lang.String SUBSYSTEM_DEPRECATED = "This subsystem is deprecated" /* initializer type: java.lang.String */;
@@ -43,25 +43,25 @@ public final class PropertiesKt /* PropertiesKt*/ {
private static final error.NonExistentClass delegatedProp2$delegate;
private static final error.NonExistentClass intConst;
private static final error.NonExistentClass intConst = 30 /* initializer type: int */;
private static final int f1;
private static final int f1 = 2 /* initializer type: int */;
private static final int plainField;
private static final int plainField = 1 /* initializer type: int */;
private static final int privateVal;
private static final int privateVal = 42 /* initializer type: int */;
private static final int privateVar;
private static final int privateVar = 42 /* initializer type: int */;
private static int counter;
private static int counter = 0 /* initializer type: int */;
private static int f2;
private static int f2 = 3 /* initializer type: int */;
private static int int1;
private static int int2;
private static int internalWithPrivateSet;
private static int internalWithPrivateSet = 1 /* initializer type: int */;
private static java.lang.String internalVarPrivateSet;