From 05f9f5a6618098064b83dc87ac45624004e06f21 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 20 Oct 2015 21:45:08 +0300 Subject: [PATCH] Drop path() from FQ names, remove weird code from FqNameUnsafe --- .../org/jetbrains/kotlin/name/FqNameTest.java | 46 ----------- .../src/org/jetbrains/kotlin/name/FqName.java | 14 ---- .../jetbrains/kotlin/name/FqNameUnsafe.java | 80 +++---------------- .../js/translate/context/StaticContext.java | 10 ++- 4 files changed, 17 insertions(+), 133 deletions(-) diff --git a/compiler/tests/org/jetbrains/kotlin/name/FqNameTest.java b/compiler/tests/org/jetbrains/kotlin/name/FqNameTest.java index f047e8a997c..61f0ea3dc9f 100644 --- a/compiler/tests/org/jetbrains/kotlin/name/FqNameTest.java +++ b/compiler/tests/org/jetbrains/kotlin/name/FqNameTest.java @@ -24,52 +24,6 @@ import java.util.Arrays; import java.util.List; public class FqNameTest { - @Test - public void pathRoot() { - List path = new FqName("").path(); - Assert.assertEquals(1, path.size()); - Assert.assertEquals("", path.get(0).asString()); - } - - @Test - public void pathLevel1() { - List path = new FqName("org").path(); - Assert.assertEquals(2, path.size()); - Assert.assertEquals("", path.get(0).asString()); - Assert.assertEquals("org", path.get(1).asString()); - Assert.assertEquals("org", path.get(1).shortName().asString()); - Assert.assertEquals("", path.get(1).parent().asString()); - } - - @Test - public void pathLevel2() { - List path = new FqName("org.jetbrains").path(); - Assert.assertEquals(3, path.size()); - Assert.assertEquals("", path.get(0).asString()); - Assert.assertEquals("org", path.get(1).asString()); - Assert.assertEquals("org", path.get(1).shortName().asString()); - Assert.assertEquals("", path.get(1).parent().asString()); - Assert.assertEquals("org.jetbrains", path.get(2).asString()); - Assert.assertEquals("jetbrains", path.get(2).shortName().asString()); - Assert.assertEquals("org", path.get(2).parent().asString()); - } - - @Test - public void pathLevel3() { - List path = new FqName("org.jetbrains.kotlin").path(); - Assert.assertEquals(4, path.size()); - Assert.assertEquals("", path.get(0).asString()); - Assert.assertEquals("org", path.get(1).asString()); - Assert.assertEquals("org", path.get(1).shortName().asString()); - Assert.assertEquals("", path.get(1).parent().asString()); - Assert.assertEquals("org.jetbrains", path.get(2).asString()); - Assert.assertEquals("jetbrains", path.get(2).shortName().asString()); - Assert.assertEquals("org", path.get(2).parent().asString()); - Assert.assertEquals("org.jetbrains.kotlin", path.get(3).asString()); - Assert.assertEquals("kotlin", path.get(3).shortName().asString()); - Assert.assertEquals("org.jetbrains", path.get(3).parent().asString()); - } - @Test public void pathSegments() { Assert.assertEquals(new ArrayList(), new FqName("").pathSegments()); diff --git a/core/descriptors/src/org/jetbrains/kotlin/name/FqName.java b/core/descriptors/src/org/jetbrains/kotlin/name/FqName.java index 359ac4ad38e..97701c40e2e 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/name/FqName.java +++ b/core/descriptors/src/org/jetbrains/kotlin/name/FqName.java @@ -99,20 +99,6 @@ public final class FqName { return fqName.shortNameOrSpecial(); } - @NotNull - public List path() { - final List path = new ArrayList(); - path.add(ROOT); - fqName.walk(new FqNameUnsafe.WalkCallback() { - @Override - public void segment(@NotNull Name shortName, @NotNull FqNameUnsafe fqName) { - // TODO: do not validate - path.add(new FqName(fqName)); - } - }); - return path; - } - @NotNull public List pathSegments() { return fqName.pathSegments(); diff --git a/core/descriptors/src/org/jetbrains/kotlin/name/FqNameUnsafe.java b/core/descriptors/src/org/jetbrains/kotlin/name/FqNameUnsafe.java index c7a1d5aed28..959c545b96b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/name/FqNameUnsafe.java +++ b/core/descriptors/src/org/jetbrains/kotlin/name/FqNameUnsafe.java @@ -16,10 +16,12 @@ package org.jetbrains.kotlin.name; +import kotlin.ArraysKt; +import kotlin.jvm.functions.Function1; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -146,77 +148,15 @@ public final class FqNameUnsafe { } } - interface WalkCallback { - void segment(@NotNull Name shortName, @NotNull FqNameUnsafe fqName); - } - - @NotNull - public List path() { - final List path = new ArrayList(); - path.add(FqName.ROOT.toUnsafe()); - walk(new WalkCallback() { - @Override - public void segment(@NotNull Name shortName, @NotNull FqNameUnsafe fqName) { - path.add(fqName); - } - }); - return path; - } - @NotNull public List pathSegments() { - final List path = new ArrayList(); - walk(new WalkCallback() { - @Override - public void segment(@NotNull Name shortName, @NotNull FqNameUnsafe fqName) { - path.add(shortName); - } - }); - return path; - } - - void walk(@NotNull WalkCallback callback) { - if (isRoot()) { - return; - } - - int pos = fqName.indexOf('.'); - - if (pos < 0) { - if (this.parent == null) { - this.parent = FqName.ROOT.toUnsafe(); - } - if (this.shortName == null) { - this.shortName = Name.guess(fqName); - } - callback.segment(shortName, this); - return; - } - - Name firstSegment = Name.guess(fqName.substring(0, pos)); - FqNameUnsafe last = new FqNameUnsafe(firstSegment.asString(), FqName.ROOT.toUnsafe(), firstSegment); - callback.segment(firstSegment, last); - - while (true) { - int next = fqName.indexOf('.', pos + 1); - if (next < 0) { - if (this.parent == null) { - this.parent = last; - } - Name shortName = Name.guess(fqName.substring(pos + 1)); - if (this.shortName == null) { - this.shortName = shortName; - } - callback.segment(shortName, this); - return; - } - - Name shortName = Name.guess(fqName.substring(pos + 1, next)); - last = new FqNameUnsafe(fqName.substring(0, next), last, shortName); - callback.segment(shortName, last); - - pos = next; - } + return isRoot() ? Collections.emptyList() : + ArraysKt.map(fqName.split("\\."), new Function1() { + @Override + public Name invoke(String name) { + return Name.guess(name); + } + }); } public boolean startsWith(@NotNull Name segment) { diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/StaticContext.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/StaticContext.java index c34876bfd47..9f9d43a102d 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/StaticContext.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/StaticContext.java @@ -208,8 +208,10 @@ public final class StaticContext { JsNameRef result = null; JsNameRef qualifier = null; - for (FqName pathElement : ContainerUtil.reverse(packageFqName.path())) { - JsNameRef ref = getNameForPackage(pathElement).makeRef(); + FqName fqName = packageFqName; + + while (true) { + JsNameRef ref = getNameForPackage(fqName).makeRef(); if (qualifier == null) { result = ref; @@ -219,9 +221,11 @@ public final class StaticContext { } qualifier = ref; + + if (fqName.isRoot()) break; + fqName = fqName.parent(); } - assert result != null : "didn't iterate: " + packageFqName; return result; }