Refactor CodegenBinding & PsiCodegenPredictor

Use ASM Type to store names of classes, use strings in PsiCodegenPredictor.
Inline some methods, move closer to their usages
This commit is contained in:
Alexander Udalov
2013-10-02 19:16:31 +04:00
parent 035a7cccda
commit 8729c88aa2
12 changed files with 132 additions and 154 deletions
@@ -43,8 +43,8 @@ import org.jetbrains.jet.codegen.binding.PsiCodegenPredictor;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.java.jetAsJava.JetJavaMirrorMarker;
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
import org.jetbrains.jet.lang.resolve.java.jetAsJava.JetJavaMirrorMarker;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
@@ -66,10 +66,10 @@ public class KotlinLightClassForExplicitDeclaration extends AbstractLightClass i
return null;
}
JvmClassName jvmClassName = PsiCodegenPredictor.getPredefinedJvmClassName(classOrObject);
if (jvmClassName == null) return null;
String jvmInternalName = PsiCodegenPredictor.getPredefinedJvmInternalName(classOrObject);
if (jvmInternalName == null) return null;
return new KotlinLightClassForExplicitDeclaration(manager, jvmClassName.getFqName(), classOrObject);
return new KotlinLightClassForExplicitDeclaration(manager, JvmClassName.byInternalName(jvmInternalName).getFqName(), classOrObject);
}
private final FqName classFqName; // FqName of (possibly inner) class
@@ -36,11 +36,10 @@ import com.intellij.util.PathUtil;
import com.intellij.util.SmartList;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.codegen.binding.PsiCodegenPredictor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.java.jetAsJava.JetClsMethod;
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
import org.jetbrains.jet.lang.resolve.java.jetAsJava.JetClsMethod;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.utils.ExceptionUtils;
@@ -235,12 +234,11 @@ public class LightClassUtil {
if (parent instanceof JetFile) {
// top-level declaration
JvmClassName jvmName = PsiCodegenPredictor.getPredefinedJvmClassName((JetFile) parent, true);
if (jvmName != null) {
FqName fqName = getPackageClassNameForFile((JetFile) parent);
if (fqName != null) {
Project project = declaration.getProject();
String fqName = jvmName.getFqName().asString();
return JavaElementFinder.getInstance(project).findClass(fqName, GlobalSearchScope.allScope(project));
return JavaElementFinder.getInstance(project).findClass(fqName.asString(), GlobalSearchScope.allScope(project));
}
}
else if (parent instanceof JetClassBody) {
@@ -251,6 +249,12 @@ public class LightClassUtil {
return null;
}
@Nullable
private static FqName getPackageClassNameForFile(@NotNull JetFile jetFile) {
String packageName = jetFile.getPackageName();
return packageName == null ? null : PackageClassUtils.getPackageClassFqName(new FqName(packageName));
}
private static PropertyAccessorsPsiMethods extractPropertyAccessors(
@NotNull JetDeclaration jetDeclaration,
@Nullable PsiMethod specialGetter, @Nullable PsiMethod specialSetter