Minor, inline one of CodegenBinding#registerClassNameForScript
This commit is contained in:
@@ -43,6 +43,7 @@ import java.util.*;
|
|||||||
import static org.jetbrains.jet.codegen.JvmCodegenUtil.isInterface;
|
import static org.jetbrains.jet.codegen.JvmCodegenUtil.isInterface;
|
||||||
import static org.jetbrains.jet.lang.resolve.BindingContext.*;
|
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.calls.callUtil.CallUtilPackage.getResolvedCall;
|
||||||
|
import static org.jetbrains.jet.lang.resolve.source.SourcePackage.toSourceElement;
|
||||||
|
|
||||||
public class CodegenBinding {
|
public class CodegenBinding {
|
||||||
public static final WritableSlice<ClassDescriptor, MutableClosure> CLOSURE = Slices.createSimpleSlice();
|
public static final WritableSlice<ClassDescriptor, MutableClosure> CLOSURE = Slices.createSimpleSlice();
|
||||||
@@ -136,23 +137,6 @@ public class CodegenBinding {
|
|||||||
return getAsmType(bindingContext, anonymousClassForFunction(bindingContext, descriptor));
|
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) {
|
public static boolean canHaveOuter(@NotNull BindingContext bindingContext, @NotNull ClassDescriptor classDescriptor) {
|
||||||
if (classDescriptor.getKind() != ClassKind.CLASS) {
|
if (classDescriptor.getKind() != ClassKind.CLASS) {
|
||||||
return false;
|
return false;
|
||||||
@@ -168,7 +152,7 @@ public class CodegenBinding {
|
|||||||
|
|
||||||
static void recordClosure(
|
static void recordClosure(
|
||||||
@NotNull BindingTrace bindingTrace,
|
@NotNull BindingTrace bindingTrace,
|
||||||
@Nullable JetElement element,
|
@NotNull JetElement element,
|
||||||
@NotNull ClassDescriptor classDescriptor,
|
@NotNull ClassDescriptor classDescriptor,
|
||||||
@Nullable ClassDescriptor enclosing,
|
@Nullable ClassDescriptor enclosing,
|
||||||
@NotNull Type asmType
|
@NotNull Type asmType
|
||||||
@@ -218,16 +202,21 @@ public class CodegenBinding {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SCRIPT: register asmType for script, move to ScriptingUtil
|
// SCRIPT: register asmType for script, move to ScriptingUtil
|
||||||
public static void registerClassNameForScript(
|
public static void registerClassNameForScript(@NotNull BindingTrace trace, @NotNull JetScript script, @NotNull Type asmType) {
|
||||||
BindingTrace bindingTrace,
|
ScriptDescriptor descriptor = trace.getBindingContext().get(SCRIPT, script);
|
||||||
@NotNull JetScript jetScript,
|
|
||||||
@NotNull Type asmType
|
|
||||||
) {
|
|
||||||
ScriptDescriptor descriptor = bindingTrace.getBindingContext().get(SCRIPT, jetScript);
|
|
||||||
if (descriptor == null) {
|
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
|
@NotNull
|
||||||
@@ -294,7 +283,7 @@ public class CodegenBinding {
|
|||||||
@Nullable
|
@Nullable
|
||||||
private static ResolvedCall<ConstructorDescriptor> findSuperCall(
|
private static ResolvedCall<ConstructorDescriptor> findSuperCall(
|
||||||
@NotNull BindingContext bindingContext,
|
@NotNull BindingContext bindingContext,
|
||||||
@Nullable JetElement classOrObject
|
@NotNull JetElement classOrObject
|
||||||
) {
|
) {
|
||||||
if (!(classOrObject instanceof JetClassOrObject)) {
|
if (!(classOrObject instanceof JetClassOrObject)) {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import com.intellij.openapi.Disposable;
|
|||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.util.Pair;
|
import com.intellij.openapi.util.Pair;
|
||||||
import com.intellij.openapi.vfs.CharsetToolkit;
|
import com.intellij.openapi.vfs.CharsetToolkit;
|
||||||
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
import com.intellij.psi.PsiFileFactory;
|
import com.intellij.psi.PsiFileFactory;
|
||||||
import com.intellij.psi.impl.PsiFileFactoryImpl;
|
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.JetFile;
|
||||||
import org.jetbrains.jet.lang.psi.JetScript;
|
import org.jetbrains.jet.lang.psi.JetScript;
|
||||||
import org.jetbrains.jet.lang.resolve.*;
|
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.JvmClassName;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.TopDownAnalyzerFacadeForJVM;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
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.AsmUtil.asmTypeByFqNameWithoutInnerClasses;
|
||||||
import static org.jetbrains.jet.codegen.binding.CodegenBinding.registerClassNameForScript;
|
import static org.jetbrains.jet.codegen.binding.CodegenBinding.registerClassNameForScript;
|
||||||
|
import static org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils.descriptorToDeclaration;
|
||||||
|
|
||||||
public class ReplInterpreter {
|
public class ReplInterpreter {
|
||||||
private int lineNumber = 0;
|
private int lineNumber = 0;
|
||||||
@@ -366,8 +368,11 @@ public class ReplInterpreter {
|
|||||||
ScriptDescriptor earlierDescriptor = pair.first;
|
ScriptDescriptor earlierDescriptor = pair.first;
|
||||||
Type earlierClassType = pair.second;
|
Type earlierClassType = pair.second;
|
||||||
|
|
||||||
registerClassNameForScript(state.getBindingTrace(), earlierDescriptor, earlierClassType);
|
PsiElement jetScript = descriptorToDeclaration(earlierDescriptor);
|
||||||
earlierScriptDescriptors.add(earlierDescriptor);
|
if (jetScript != null) {
|
||||||
|
registerClassNameForScript(state.getBindingTrace(), (JetScript) jetScript, earlierClassType);
|
||||||
|
earlierScriptDescriptors.add(earlierDescriptor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
state.setEarlierScriptsForReplInterpreter(earlierScriptDescriptors);
|
state.setEarlierScriptsForReplInterpreter(earlierScriptDescriptors);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user