Minor, inline one of CodegenBinding#registerClassNameForScript

This commit is contained in:
Alexander Udalov
2014-09-18 19:25:01 +04:00
parent 4194f1c418
commit 7d6da551d1
2 changed files with 24 additions and 30 deletions
@@ -43,6 +43,7 @@ import java.util.*;
import static org.jetbrains.jet.codegen.JvmCodegenUtil.isInterface;
import static org.jetbrains.jet.lang.resolve.BindingContext.*;
import static org.jetbrains.jet.lang.resolve.calls.callUtil.CallUtilPackage.getResolvedCall;
import static org.jetbrains.jet.lang.resolve.source.SourcePackage.toSourceElement;
public class CodegenBinding {
public static final WritableSlice<ClassDescriptor, MutableClosure> CLOSURE = Slices.createSimpleSlice();
@@ -136,23 +137,6 @@ public class CodegenBinding {
return getAsmType(bindingContext, anonymousClassForFunction(bindingContext, descriptor));
}
// SCRIPT: register asmType for script descriptor, move to ScriptingUtil
public static void registerClassNameForScript(
BindingTrace bindingTrace,
@NotNull ScriptDescriptor scriptDescriptor,
@NotNull Type asmType
) {
String simpleName = asmType.getInternalName().substring(asmType.getInternalName().lastIndexOf('/') + 1);
ClassDescriptorImpl classDescriptor =
new ClassDescriptorImpl(scriptDescriptor, Name.special("<script-" + simpleName + ">"), Modality.FINAL,
Collections.singleton(KotlinBuiltIns.getInstance().getAnyType()), SourceElement.NO_SOURCE);
classDescriptor.initialize(JetScope.EMPTY, Collections.<ConstructorDescriptor>emptySet(), null);
recordClosure(bindingTrace, null, classDescriptor, null, asmType);
bindingTrace.record(CLASS_FOR_SCRIPT, scriptDescriptor, classDescriptor);
}
public static boolean canHaveOuter(@NotNull BindingContext bindingContext, @NotNull ClassDescriptor classDescriptor) {
if (classDescriptor.getKind() != ClassKind.CLASS) {
return false;
@@ -168,7 +152,7 @@ public class CodegenBinding {
static void recordClosure(
@NotNull BindingTrace bindingTrace,
@Nullable JetElement element,
@NotNull JetElement element,
@NotNull ClassDescriptor classDescriptor,
@Nullable ClassDescriptor enclosing,
@NotNull Type asmType
@@ -218,16 +202,21 @@ public class CodegenBinding {
}
// SCRIPT: register asmType for script, move to ScriptingUtil
public static void registerClassNameForScript(
BindingTrace bindingTrace,
@NotNull JetScript jetScript,
@NotNull Type asmType
) {
ScriptDescriptor descriptor = bindingTrace.getBindingContext().get(SCRIPT, jetScript);
public static void registerClassNameForScript(@NotNull BindingTrace trace, @NotNull JetScript script, @NotNull Type asmType) {
ScriptDescriptor descriptor = trace.getBindingContext().get(SCRIPT, script);
if (descriptor == null) {
throw new IllegalStateException("Descriptor is not found for PSI " + jetScript);
throw new IllegalStateException("Script descriptor is not found for PSI: " + JetPsiUtil.getElementTextWithContext(script));
}
registerClassNameForScript(bindingTrace, descriptor, asmType);
String simpleName = asmType.getInternalName().substring(asmType.getInternalName().lastIndexOf('/') + 1);
ClassDescriptorImpl classDescriptor =
new ClassDescriptorImpl(descriptor, Name.special("<script-" + simpleName + ">"), Modality.FINAL,
Collections.singleton(KotlinBuiltIns.getInstance().getAnyType()), toSourceElement(script));
classDescriptor.initialize(JetScope.EMPTY, Collections.<ConstructorDescriptor>emptySet(), null);
recordClosure(trace, script, classDescriptor, null, asmType);
trace.record(CLASS_FOR_SCRIPT, descriptor, classDescriptor);
}
@NotNull
@@ -294,7 +283,7 @@ public class CodegenBinding {
@Nullable
private static ResolvedCall<ConstructorDescriptor> findSuperCall(
@NotNull BindingContext bindingContext,
@Nullable JetElement classOrObject
@NotNull JetElement classOrObject
) {
if (!(classOrObject instanceof JetClassOrObject)) {
return null;
@@ -23,6 +23,7 @@ import com.intellij.openapi.Disposable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vfs.CharsetToolkit;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiFileFactory;
import com.intellij.psi.impl.PsiFileFactoryImpl;
@@ -49,8 +50,8 @@ import org.jetbrains.jet.lang.parsing.JetParserDefinition;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetScript;
import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.java.TopDownAnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
import org.jetbrains.jet.lang.resolve.java.TopDownAnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
@@ -77,6 +78,7 @@ import java.util.List;
import static org.jetbrains.jet.codegen.AsmUtil.asmTypeByFqNameWithoutInnerClasses;
import static org.jetbrains.jet.codegen.binding.CodegenBinding.registerClassNameForScript;
import static org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils.descriptorToDeclaration;
public class ReplInterpreter {
private int lineNumber = 0;
@@ -366,8 +368,11 @@ public class ReplInterpreter {
ScriptDescriptor earlierDescriptor = pair.first;
Type earlierClassType = pair.second;
registerClassNameForScript(state.getBindingTrace(), earlierDescriptor, earlierClassType);
earlierScriptDescriptors.add(earlierDescriptor);
PsiElement jetScript = descriptorToDeclaration(earlierDescriptor);
if (jetScript != null) {
registerClassNameForScript(state.getBindingTrace(), (JetScript) jetScript, earlierClassType);
earlierScriptDescriptors.add(earlierDescriptor);
}
}
state.setEarlierScriptsForReplInterpreter(earlierScriptDescriptors);
}