Optimize RAM consumption by FqName: remove `FqName.parent` as it can be calculated on the fly
diff --git a/core/compiler.common/src/org/jetbrains/kotlin/name/FqName.java b/core/compiler.common/src/org/jetbrains/kotlin/name/FqName.java
index 497fece..e186dc6 100644
--- a/core/compiler.common/src/org/jetbrains/kotlin/name/FqName.java
+++ b/core/compiler.common/src/org/jetbrains/kotlin/name/FqName.java
@@ -33,9 +33,6 @@
     @NotNull
     private final FqNameUnsafe fqName;
 
-    // cache
-    private transient FqName parent;
-
     public FqName(@NotNull String fqName) {
         this.fqName = new FqNameUnsafe(fqName);
     }
@@ -44,10 +41,6 @@
         this.fqName = fqName;
     }
 
-    private FqName(@NotNull FqNameUnsafe fqName, FqName parent) {
-        this.fqName = fqName;
-        this.parent = parent;
-    }
 
     @NotNull
     public String asString() {
@@ -65,22 +58,12 @@
 
     @NotNull
     public FqName parent() {
-        if (parent != null) {
-            return parent;
-        }
-
-        if (isRoot()) {
-            throw new IllegalStateException("root");
-        }
-
-        parent = new FqName(fqName.parent());
-
-        return parent;
+        return new FqName(fqName.parent());
     }
 
     @NotNull
     public FqName child(@NotNull Name name) {
-        return new FqName(fqName.child(name), this);
+        return new FqName(fqName.child(name));
     }
 
     @NotNull