Drop path() from FQ names, remove weird code from FqNameUnsafe
This commit is contained in:
@@ -24,52 +24,6 @@ import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class FqNameTest {
|
||||
@Test
|
||||
public void pathRoot() {
|
||||
List<FqName> path = new FqName("").path();
|
||||
Assert.assertEquals(1, path.size());
|
||||
Assert.assertEquals("", path.get(0).asString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pathLevel1() {
|
||||
List<FqName> 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<FqName> 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<FqName> 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<Name>(), new FqName("").pathSegments());
|
||||
|
||||
@@ -99,20 +99,6 @@ public final class FqName {
|
||||
return fqName.shortNameOrSpecial();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<FqName> path() {
|
||||
final List<FqName> path = new ArrayList<FqName>();
|
||||
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<Name> pathSegments() {
|
||||
return fqName.pathSegments();
|
||||
|
||||
@@ -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<FqNameUnsafe> path() {
|
||||
final List<FqNameUnsafe> path = new ArrayList<FqNameUnsafe>();
|
||||
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<Name> pathSegments() {
|
||||
final List<Name> path = new ArrayList<Name>();
|
||||
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.<Name>emptyList() :
|
||||
ArraysKt.map(fqName.split("\\."), new Function1<String, Name>() {
|
||||
@Override
|
||||
public Name invoke(String name) {
|
||||
return Name.guess(name);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public boolean startsWith(@NotNull Name segment) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user