Remove PSI usages from ScriptDescriptor
This commit is contained in:
@@ -34,7 +34,6 @@ import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
|
|||||||
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.lang.resolve.ScriptNameUtil;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -106,7 +105,7 @@ public class ScriptCodegen extends MemberCodegen {
|
|||||||
|
|
||||||
Type blockType = typeMapper.mapType(scriptDescriptor.getReturnType());
|
Type blockType = typeMapper.mapType(scriptDescriptor.getReturnType());
|
||||||
|
|
||||||
classBuilder.newField(null, ACC_PUBLIC | ACC_FINAL, ScriptNameUtil.LAST_EXPRESSION_VALUE_FIELD_NAME,
|
classBuilder.newField(null, ACC_PUBLIC | ACC_FINAL, ScriptDescriptor.LAST_EXPRESSION_VALUE_FIELD_NAME,
|
||||||
blockType.getDescriptor(), null, null);
|
blockType.getDescriptor(), null, null);
|
||||||
|
|
||||||
JvmMethodSignature jvmSignature = typeMapper.mapScriptSignature(scriptDescriptor, importedScripts);
|
JvmMethodSignature jvmSignature = typeMapper.mapScriptSignature(scriptDescriptor, importedScripts);
|
||||||
@@ -173,7 +172,7 @@ public class ScriptCodegen extends MemberCodegen {
|
|||||||
if (stackValue.type != Type.VOID_TYPE) {
|
if (stackValue.type != Type.VOID_TYPE) {
|
||||||
stackValue.put(stackValue.type, instructionAdapter);
|
stackValue.put(stackValue.type, instructionAdapter);
|
||||||
instructionAdapter
|
instructionAdapter
|
||||||
.putfield(className.getInternalName(), ScriptNameUtil.LAST_EXPRESSION_VALUE_FIELD_NAME, blockType.getDescriptor());
|
.putfield(className.getInternalName(), ScriptDescriptor.LAST_EXPRESSION_VALUE_FIELD_NAME, blockType.getDescriptor());
|
||||||
}
|
}
|
||||||
|
|
||||||
instructionAdapter.areturn(Type.VOID_TYPE);
|
instructionAdapter.areturn(Type.VOID_TYPE);
|
||||||
|
|||||||
@@ -17,14 +17,9 @@
|
|||||||
package org.jetbrains.jet.lang.descriptors;
|
package org.jetbrains.jet.lang.descriptors;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.impl.*;
|
import org.jetbrains.jet.lang.descriptors.impl.*;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorFactory;
|
import org.jetbrains.jet.lang.resolve.DescriptorFactory;
|
||||||
import org.jetbrains.jet.lang.resolve.ScriptNameUtil;
|
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler;
|
import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler;
|
||||||
@@ -40,6 +35,7 @@ import java.util.HashSet;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ScriptDescriptor extends DeclarationDescriptorNonRootImpl {
|
public class ScriptDescriptor extends DeclarationDescriptorNonRootImpl {
|
||||||
|
public static final String LAST_EXPRESSION_VALUE_FIELD_NAME = "rv";
|
||||||
private static final Name NAME = Name.special("<script>");
|
private static final Name NAME = Name.special("<script>");
|
||||||
|
|
||||||
private final int priority;
|
private final int priority;
|
||||||
@@ -59,17 +55,20 @@ public class ScriptDescriptor extends DeclarationDescriptorNonRootImpl {
|
|||||||
|
|
||||||
private final WritableScopeImpl classScope;
|
private final WritableScopeImpl classScope;
|
||||||
|
|
||||||
public ScriptDescriptor(@Nullable DeclarationDescriptor containingDeclaration, int priority, JetScript script, JetScope scriptScope) {
|
public ScriptDescriptor(
|
||||||
|
@NotNull DeclarationDescriptor containingDeclaration,
|
||||||
|
int priority,
|
||||||
|
@NotNull JetScope scriptScope,
|
||||||
|
@NotNull Name className
|
||||||
|
) {
|
||||||
super(containingDeclaration, Collections.<AnnotationDescriptor>emptyList(), NAME);
|
super(containingDeclaration, Collections.<AnnotationDescriptor>emptyList(), NAME);
|
||||||
this.priority = priority;
|
this.priority = priority;
|
||||||
|
|
||||||
String className = ScriptNameUtil.classNameForScript((JetFile) script.getContainingFile()).replace('/','.');
|
|
||||||
|
|
||||||
classDescriptor = new ClassDescriptorImpl(
|
classDescriptor = new ClassDescriptorImpl(
|
||||||
containingDeclaration,
|
containingDeclaration,
|
||||||
Collections.<AnnotationDescriptor>emptyList(),
|
Collections.<AnnotationDescriptor>emptyList(),
|
||||||
Modality.FINAL,
|
Modality.FINAL,
|
||||||
new FqName(className).shortName());
|
className);
|
||||||
classScope = new WritableScopeImpl(scriptScope, containingDeclaration, RedeclarationHandler.DO_NOTHING, "script members");
|
classScope = new WritableScopeImpl(scriptScope, containingDeclaration, RedeclarationHandler.DO_NOTHING, "script members");
|
||||||
classScope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
classScope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
||||||
classDescriptor.initialize(
|
classDescriptor.initialize(
|
||||||
@@ -82,7 +81,11 @@ public class ScriptDescriptor extends DeclarationDescriptorNonRootImpl {
|
|||||||
false);
|
false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initialize(@NotNull JetType returnType, JetScript declaration, BindingContext bindingContext) {
|
public void initialize(
|
||||||
|
@NotNull JetType returnType,
|
||||||
|
@NotNull List<? extends PropertyDescriptorImpl> properties,
|
||||||
|
@NotNull List<? extends FunctionDescriptor> functions
|
||||||
|
) {
|
||||||
this.returnType = returnType;
|
this.returnType = returnType;
|
||||||
scriptCodeDescriptor.initialize(implicitReceiver, valueParameters, returnType);
|
scriptCodeDescriptor.initialize(implicitReceiver, valueParameters, returnType);
|
||||||
|
|
||||||
@@ -91,7 +94,7 @@ public class ScriptDescriptor extends DeclarationDescriptorNonRootImpl {
|
|||||||
Modality.FINAL,
|
Modality.FINAL,
|
||||||
Visibilities.PUBLIC,
|
Visibilities.PUBLIC,
|
||||||
false,
|
false,
|
||||||
Name.identifier(ScriptNameUtil.LAST_EXPRESSION_VALUE_FIELD_NAME),
|
Name.identifier(LAST_EXPRESSION_VALUE_FIELD_NAME),
|
||||||
CallableMemberDescriptor.Kind.DECLARATION);
|
CallableMemberDescriptor.Kind.DECLARATION);
|
||||||
propertyDescriptor.setType(
|
propertyDescriptor.setType(
|
||||||
returnType,
|
returnType,
|
||||||
@@ -101,20 +104,13 @@ public class ScriptDescriptor extends DeclarationDescriptorNonRootImpl {
|
|||||||
propertyDescriptor.initialize(null, null);
|
propertyDescriptor.initialize(null, null);
|
||||||
classScope.addPropertyDescriptor(propertyDescriptor);
|
classScope.addPropertyDescriptor(propertyDescriptor);
|
||||||
|
|
||||||
for (JetDeclaration jetDeclaration : declaration.getDeclarations()) {
|
for (PropertyDescriptorImpl property : properties) {
|
||||||
if(jetDeclaration instanceof JetProperty) {
|
initializeWithDefaultGetterSetter(property);
|
||||||
VariableDescriptor descriptor = bindingContext.get(BindingContext.VARIABLE, jetDeclaration);
|
classScope.addPropertyDescriptor(property);
|
||||||
assert descriptor != null;
|
}
|
||||||
initializeWithDefaultGetterSetter((PropertyDescriptorImpl) descriptor);
|
|
||||||
classScope.addPropertyDescriptor(descriptor);
|
for (FunctionDescriptor function : functions) {
|
||||||
}
|
classScope.addFunctionDescriptor(function);
|
||||||
else if(jetDeclaration instanceof JetNamedFunction) {
|
|
||||||
SimpleFunctionDescriptor descriptor = bindingContext.get(BindingContext.FUNCTION, jetDeclaration);
|
|
||||||
assert descriptor != null;
|
|
||||||
SimpleFunctionDescriptor copy =
|
|
||||||
descriptor.copy(classDescriptor, descriptor.getModality(), descriptor.getVisibility(), CallableMemberDescriptor.Kind.DECLARATION, false);
|
|
||||||
classScope.addFunctionDescriptor(copy);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,6 +191,7 @@ public class ScriptDescriptor extends DeclarationDescriptorNonRootImpl {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
public ClassDescriptor getClassDescriptor() {
|
public ClassDescriptor getClassDescriptor() {
|
||||||
return classDescriptor;
|
return classDescriptor;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,13 @@
|
|||||||
package org.jetbrains.jet.lang.resolve;
|
package org.jetbrains.jet.lang.resolve;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.impl.PropertyDescriptorImpl;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetDeclaration;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetNamedFunction;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetProperty;
|
||||||
import org.jetbrains.jet.lang.psi.JetScript;
|
import org.jetbrains.jet.lang.psi.JetScript;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
|
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.context.ExpressionPosition;
|
import org.jetbrains.jet.lang.resolve.calls.context.ExpressionPosition;
|
||||||
@@ -29,6 +35,8 @@ import org.jetbrains.jet.lang.types.expressions.ExpressionTypingContext;
|
|||||||
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.jetbrains.jet.lang.types.TypeUtils.NO_EXPECTED_TYPE;
|
import static org.jetbrains.jet.lang.types.TypeUtils.NO_EXPECTED_TYPE;
|
||||||
@@ -79,7 +87,24 @@ public class ScriptBodyResolver {
|
|||||||
if (returnType == null) {
|
if (returnType == null) {
|
||||||
returnType = ErrorUtils.createErrorType("getBlockReturnedType returned null");
|
returnType = ErrorUtils.createErrorType("getBlockReturnedType returned null");
|
||||||
}
|
}
|
||||||
descriptor.initialize(returnType, declaration, trace.getBindingContext());
|
|
||||||
|
List<PropertyDescriptorImpl> properties = new ArrayList<PropertyDescriptorImpl>();
|
||||||
|
List<SimpleFunctionDescriptor> functions = new ArrayList<SimpleFunctionDescriptor>();
|
||||||
|
|
||||||
|
BindingContext bindingContext = trace.getBindingContext();
|
||||||
|
for (JetDeclaration jetDeclaration : declaration.getDeclarations()) {
|
||||||
|
if (jetDeclaration instanceof JetProperty) {
|
||||||
|
properties.add((PropertyDescriptorImpl) bindingContext.get(BindingContext.VARIABLE, jetDeclaration));
|
||||||
|
}
|
||||||
|
else if (jetDeclaration instanceof JetNamedFunction) {
|
||||||
|
SimpleFunctionDescriptor function = bindingContext.get(BindingContext.FUNCTION, jetDeclaration);
|
||||||
|
assert function != null;
|
||||||
|
functions.add(function.copy(descriptor.getClassDescriptor(), function.getModality(), function.getVisibility(),
|
||||||
|
CallableMemberDescriptor.Kind.DECLARATION, false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
descriptor.initialize(returnType, properties, functions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,9 @@ package org.jetbrains.jet.lang.resolve;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.intellij.openapi.util.Key;
|
import com.intellij.openapi.util.Key;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorImpl;
|
import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorImpl;
|
||||||
import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl;
|
import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl;
|
||||||
@@ -29,6 +31,7 @@ import org.jetbrains.jet.lang.psi.JetFile;
|
|||||||
import org.jetbrains.jet.lang.psi.JetNamespaceHeader;
|
import org.jetbrains.jet.lang.psi.JetNamespaceHeader;
|
||||||
import org.jetbrains.jet.lang.psi.JetScript;
|
import org.jetbrains.jet.lang.psi.JetScript;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler;
|
import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
||||||
@@ -39,7 +42,10 @@ import org.jetbrains.jet.lang.types.TypeUtils;
|
|||||||
import org.jetbrains.jet.lang.types.ref.JetTypeName;
|
import org.jetbrains.jet.lang.types.ref.JetTypeName;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class ScriptHeaderResolver {
|
public class ScriptHeaderResolver {
|
||||||
|
|
||||||
@@ -122,7 +128,9 @@ public class ScriptHeaderResolver {
|
|||||||
priority = 0;
|
priority = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptDescriptor scriptDescriptor = new ScriptDescriptor(ns, priority, script, outerScope);
|
Name className = new FqName(ScriptNameUtil.classNameForScript((JetFile) script.getContainingFile()).replace('/', '.')).shortName();
|
||||||
|
ScriptDescriptor scriptDescriptor = new ScriptDescriptor(ns, priority, outerScope, className);
|
||||||
|
|
||||||
//WriteThroughScope scriptScope = new WriteThroughScope(
|
//WriteThroughScope scriptScope = new WriteThroughScope(
|
||||||
// outerScope, ns.getMemberScope(), new TraceBasedRedeclarationHandler(trace));
|
// outerScope, ns.getMemberScope(), new TraceBasedRedeclarationHandler(trace));
|
||||||
WritableScopeImpl scriptScope = new WritableScopeImpl(outerScope, scriptDescriptor, RedeclarationHandler.DO_NOTHING, "script");
|
WritableScopeImpl scriptScope = new WritableScopeImpl(outerScope, scriptDescriptor, RedeclarationHandler.DO_NOTHING, "script");
|
||||||
|
|||||||
@@ -22,8 +22,6 @@ import org.jetbrains.jet.lang.psi.JetFile;
|
|||||||
import org.jetbrains.jet.lang.psi.JetNamespaceHeader;
|
import org.jetbrains.jet.lang.psi.JetNamespaceHeader;
|
||||||
|
|
||||||
public class ScriptNameUtil {
|
public class ScriptNameUtil {
|
||||||
public static final String LAST_EXPRESSION_VALUE_FIELD_NAME = "rv";
|
|
||||||
|
|
||||||
private ScriptNameUtil() {
|
private ScriptNameUtil() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user