javac ast indices: get rid of Name#toUtf() usages

This commit is contained in:
Dmitry Batkovich
2016-12-16 19:08:03 +03:00
parent 98de38d399
commit c08f73e288
15 changed files with 175 additions and 211 deletions
@@ -18,7 +18,7 @@ package com.intellij.compiler.backwardRefs;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiNamedElement;
import com.intellij.psi.impl.source.PsiFileWithStubSupport;
import org.jetbrains.jps.backwardRefs.ByteArrayEnumerator;
import org.jetbrains.jps.backwardRefs.NameEnumerator;
import org.jetbrains.jps.backwardRefs.LightRef;
import java.util.Collection;
@@ -39,8 +39,8 @@ enum CompilerHierarchySearchType {
}
@Override
Object[] convertToIds(Collection<LightRef> lightRef, ByteArrayEnumerator byteArrayEnumerator) {
return lightRef.stream().map(r -> byteArrayEnumerator.getName(((LightRef.LightClassHierarchyElementDef)r).getName())).toArray(String[]::new);
Object[] convertToIds(Collection<LightRef> lightRef, NameEnumerator nameEnumerator) {
return lightRef.stream().map(r -> nameEnumerator.getName(((LightRef.LightClassHierarchyElementDef)r).getName())).toArray(String[]::new);
}
},
FUNCTIONAL_EXPRESSION {
@@ -58,7 +58,7 @@ enum CompilerHierarchySearchType {
}
@Override
Object[] convertToIds(Collection<LightRef> lightRef, ByteArrayEnumerator byteArrayEnumerator) {
Object[] convertToIds(Collection<LightRef> lightRef, NameEnumerator nameEnumerator) {
return lightRef.stream().map(r -> ((LightRef.LightFunExprDef) r).getId()).toArray(Integer[]::new);
}
};
@@ -70,5 +70,5 @@ enum CompilerHierarchySearchType {
abstract Class<? extends LightRef> getRequiredClass(LanguageLightRefAdapter adapter);
abstract Object[] convertToIds(Collection<LightRef> lightRef, ByteArrayEnumerator byteArrayEnumerator);
abstract Object[] convertToIds(Collection<LightRef> lightRef, NameEnumerator nameEnumerator);
}
@@ -30,7 +30,7 @@ import gnu.trove.THashSet;
import gnu.trove.TIntHashSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.backwardRefs.ByteArrayEnumerator;
import org.jetbrains.jps.backwardRefs.NameEnumerator;
import org.jetbrains.jps.backwardRefs.CompilerBackwardReferenceIndex;
import org.jetbrains.jps.backwardRefs.LightRef;
import org.jetbrains.jps.backwardRefs.index.CompilerIndices;
@@ -96,7 +96,7 @@ class CompilerReferenceReader {
}
@NotNull
ByteArrayEnumerator getNameEnumerator() {
NameEnumerator getNameEnumerator() {
return myIndex.getByteSeqEum();
}
@@ -28,10 +28,9 @@ import com.intellij.psi.util.ClassUtil;
import com.intellij.util.ObjectUtils;
import com.intellij.util.Processor;
import com.intellij.util.containers.ContainerUtil;
import com.sun.tools.javac.util.Convert;
import gnu.trove.TIntHashSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jps.backwardRefs.ByteArrayEnumerator;
import org.jetbrains.jps.backwardRefs.NameEnumerator;
import org.jetbrains.jps.backwardRefs.LightRef;
import java.util.ArrayList;
@@ -46,7 +45,7 @@ public class JavaLightUsageAdapter implements LanguageLightRefAdapter {
}
@Override
public LightRef asLightUsage(@NotNull PsiElement element, @NotNull ByteArrayEnumerator names) {
public LightRef asLightUsage(@NotNull PsiElement element, @NotNull NameEnumerator names) {
if (mayBeVisibleOutsideOwnerFile(element)) {
if (element instanceof PsiField) {
final PsiField field = (PsiField)element;
@@ -55,7 +54,7 @@ public class JavaLightUsageAdapter implements LanguageLightRefAdapter {
final String jvmOwnerName = ClassUtil.getJVMClassName(aClass);
final String name = field.getName();
if (name == null || jvmOwnerName == null) return null;
return new LightRef.JavaLightFieldRef(id(jvmOwnerName, names), id(name, names));
return new LightRef.JavaLightFieldRef(names.enumerate(jvmOwnerName), names.enumerate(name));
}
else if (element instanceof PsiMethod) {
final PsiClass aClass = ((PsiMethod)element).getContainingClass();
@@ -65,12 +64,12 @@ public class JavaLightUsageAdapter implements LanguageLightRefAdapter {
final PsiMethod method = (PsiMethod)element;
final String name = method.isConstructor() ? "<init>" : method.getName();
final int parametersCount = method.getParameterList().getParametersCount();
return new LightRef.JavaLightMethodRef(id(jvmOwnerName, names), id(name, names), parametersCount);
return new LightRef.JavaLightMethodRef(names.enumerate(jvmOwnerName), names.enumerate(name), parametersCount);
}
else if (element instanceof PsiClass) {
final String jvmClassName = ClassUtil.getJVMClassName((PsiClass)element);
if (jvmClassName != null) {
return new LightRef.JavaLightClassRef(id(jvmClassName, names));
return new LightRef.JavaLightClassRef(names.enumerate(jvmClassName));
}
}
}
@@ -81,7 +80,7 @@ public class JavaLightUsageAdapter implements LanguageLightRefAdapter {
@Override
public List<LightRef> getHierarchyRestrictedToLibraryScope(@NotNull LightRef baseRef,
@NotNull PsiElement basePsi,
@NotNull ByteArrayEnumerator names, @NotNull GlobalSearchScope libraryScope) {
@NotNull NameEnumerator names, @NotNull GlobalSearchScope libraryScope) {
final PsiClass baseClass = ObjectUtils.notNull(basePsi instanceof PsiClass ? (PsiClass)basePsi : ReadAction.compute(() -> (PsiMember)basePsi).getContainingClass());
final List<LightRef> overridden = new ArrayList<>();
@@ -89,7 +88,7 @@ public class JavaLightUsageAdapter implements LanguageLightRefAdapter {
if (c.hasModifierProperty(PsiModifier.PRIVATE)) return true;
String qName = ReadAction.compute(() -> c.getQualifiedName());
if (qName == null) return true;
overridden.add(baseRef.override(id(qName, names)));
overridden.add(baseRef.override(names.enumerate(qName)));
return true;
};
@@ -139,8 +138,4 @@ public class JavaLightUsageAdapter implements LanguageLightRefAdapter {
if (((PsiModifierListOwner)element).hasModifierProperty(PsiModifier.PRIVATE)) return false;
return true;
}
private static int id(String name, ByteArrayEnumerator names) {
return names.enumerate(Convert.string2utf(name));
}
}
@@ -22,7 +22,7 @@ import com.intellij.psi.impl.source.PsiFileWithStubSupport;
import com.intellij.psi.search.GlobalSearchScope;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.backwardRefs.ByteArrayEnumerator;
import org.jetbrains.jps.backwardRefs.NameEnumerator;
import org.jetbrains.jps.backwardRefs.LightRef;
import java.util.List;
@@ -43,7 +43,7 @@ public interface LanguageLightRefAdapter {
* @return
*/
@Nullable
LightRef asLightUsage(@NotNull PsiElement element, @NotNull ByteArrayEnumerator names);
LightRef asLightUsage(@NotNull PsiElement element, @NotNull NameEnumerator names);
/**
* @return "hierarchy" of given element inside the libraries scope.
@@ -51,7 +51,7 @@ public interface LanguageLightRefAdapter {
@NotNull
List<LightRef> getHierarchyRestrictedToLibraryScope(@NotNull LightRef baseRef,
@NotNull PsiElement basePsi,
@NotNull ByteArrayEnumerator names,
@NotNull NameEnumerator names,
@NotNull GlobalSearchScope libraryScope);
/**
@@ -1166,11 +1166,6 @@ public class BuildManager implements Disposable {
cmdLine.addParameters(args);
}
//TODO[Dmitry Batkovich] should be replaced with the proper solution
if (sdkVersion != null && sdkVersion.isAtLeast(JavaSdkVersion.JDK_1_9)) {
cmdLine.addParameters("--add-exports", "jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED");
}
@SuppressWarnings("UnnecessaryFullyQualifiedName")
final Class<?> launcherClass = org.jetbrains.jps.cmdline.Launcher.class;