ScriptDescriptorImpl and related non-lazy code removed
This commit is contained in:
@@ -275,7 +275,7 @@ public class ReplInterpreter {
|
|||||||
trace.clearDiagnostics();
|
trace.clearDiagnostics();
|
||||||
|
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
psiFile.getScript().putUserData(ScriptHeaderResolver.PRIORITY_KEY, lineNumber);
|
psiFile.getScript().putUserData(ScriptPriorities.PRIORITY_KEY, lineNumber);
|
||||||
|
|
||||||
ScriptDescriptor scriptDescriptor = doAnalyze(psiFile, errorCollector);
|
ScriptDescriptor scriptDescriptor = doAnalyze(psiFile, errorCollector);
|
||||||
if (scriptDescriptor == null) {
|
if (scriptDescriptor == null) {
|
||||||
|
|||||||
-214
@@ -1,214 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2015 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.impl;
|
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
|
||||||
import org.jetbrains.kotlin.name.Name;
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.RedeclarationHandler;
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.WritableScope;
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.WritableScopeImpl;
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ScriptReceiver;
|
|
||||||
import org.jetbrains.kotlin.types.JetType;
|
|
||||||
import org.jetbrains.kotlin.types.TypeSubstitutor;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
// SCRIPT: Script declaration descriptor
|
|
||||||
public class ScriptDescriptorImpl extends DeclarationDescriptorNonRootImpl implements ScriptDescriptor {
|
|
||||||
|
|
||||||
private final int priority;
|
|
||||||
|
|
||||||
private List<ValueParameterDescriptor> valueParameters;
|
|
||||||
|
|
||||||
private final ScriptCodeDescriptor scriptCodeDescriptor = new ScriptCodeDescriptor(this);
|
|
||||||
private final ReceiverParameterDescriptor implicitReceiver = new ReceiverParameterDescriptorImpl(this,
|
|
||||||
// Putting Any here makes no sense,
|
|
||||||
// it is simply copied from someplace else
|
|
||||||
// during a refactoring
|
|
||||||
KotlinBuiltIns.getInstance().getAnyType(),
|
|
||||||
new ScriptReceiver(this));
|
|
||||||
|
|
||||||
private final MutableClassDescriptor classDescriptor;
|
|
||||||
|
|
||||||
private final WritableScopeImpl classScope;
|
|
||||||
private WritableScope scopeForBodyResolution;
|
|
||||||
private PropertyDescriptor scriptResultProperty;
|
|
||||||
|
|
||||||
public ScriptDescriptorImpl(
|
|
||||||
@NotNull DeclarationDescriptor containingDeclaration,
|
|
||||||
int priority,
|
|
||||||
@NotNull JetScope scriptScope,
|
|
||||||
@NotNull Name className,
|
|
||||||
@NotNull SourceElement source
|
|
||||||
) {
|
|
||||||
super(containingDeclaration, Annotations.EMPTY, NAME, source);
|
|
||||||
this.priority = priority;
|
|
||||||
|
|
||||||
classDescriptor = new MutableClassDescriptor(containingDeclaration, scriptScope, ClassKind.CLASS,
|
|
||||||
false, className, SourceElement.NO_SOURCE);
|
|
||||||
classDescriptor.addSupertype(KotlinBuiltIns.getInstance().getAnyType());
|
|
||||||
classDescriptor.setModality(Modality.FINAL);
|
|
||||||
classDescriptor.setVisibility(Visibilities.PUBLIC);
|
|
||||||
classDescriptor.setTypeParameterDescriptors(Collections.<TypeParameterDescriptor>emptyList());
|
|
||||||
|
|
||||||
classScope = new WritableScopeImpl(JetScope.Empty.INSTANCE$, classDescriptor, RedeclarationHandler.DO_NOTHING, "script members");
|
|
||||||
classScope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
|
||||||
classDescriptor.setScopeForMemberLookup(classScope);
|
|
||||||
classDescriptor.createTypeConstructor();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initialize(
|
|
||||||
@NotNull JetType returnType,
|
|
||||||
@NotNull List<? extends PropertyDescriptorImpl> properties,
|
|
||||||
@NotNull List<? extends FunctionDescriptor> functions
|
|
||||||
) {
|
|
||||||
assert valueParameters != null : "setValueParameters() must be called before this method";
|
|
||||||
scriptCodeDescriptor.initialize(implicitReceiver, valueParameters, returnType);
|
|
||||||
|
|
||||||
scriptResultProperty = createScriptResultProperty(this);
|
|
||||||
classScope.addPropertyDescriptor(scriptResultProperty);
|
|
||||||
|
|
||||||
for (PropertyDescriptorImpl property : properties) {
|
|
||||||
classScope.addPropertyDescriptor(property);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (FunctionDescriptor function : functions) {
|
|
||||||
classScope.addFunctionDescriptor(function);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static PropertyDescriptor createScriptResultProperty(@NotNull ScriptDescriptor scriptDescriptor) {
|
|
||||||
PropertyDescriptorImpl propertyDescriptor = PropertyDescriptorImpl.create(scriptDescriptor.getClassDescriptor(),
|
|
||||||
Annotations.EMPTY,
|
|
||||||
Modality.FINAL,
|
|
||||||
Visibilities.PUBLIC,
|
|
||||||
false,
|
|
||||||
Name.identifier(LAST_EXPRESSION_VALUE_FIELD_NAME),
|
|
||||||
CallableMemberDescriptor.Kind.DECLARATION,
|
|
||||||
SourceElement.NO_SOURCE);
|
|
||||||
JetType returnType = scriptDescriptor.getScriptCodeDescriptor().getReturnType();
|
|
||||||
assert returnType != null : "Return type not initialized for " + scriptDescriptor;
|
|
||||||
propertyDescriptor.setType(
|
|
||||||
returnType,
|
|
||||||
Collections.<TypeParameterDescriptor>emptyList(),
|
|
||||||
scriptDescriptor.getThisAsReceiverParameter(),
|
|
||||||
ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER);
|
|
||||||
propertyDescriptor.initialize(null, null);
|
|
||||||
return propertyDescriptor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
public PropertyDescriptor getScriptResultProperty() {
|
|
||||||
return scriptResultProperty;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPriority() {
|
|
||||||
return priority;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public ScriptCodeDescriptor getScriptCodeDescriptor() {
|
|
||||||
return scriptCodeDescriptor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public ReceiverParameterDescriptor getThisAsReceiverParameter() {
|
|
||||||
return implicitReceiver;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DeclarationDescriptor substitute(@NotNull TypeSubstitutor substitutor) {
|
|
||||||
throw new IllegalStateException("nothing to substitute in script");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <R, D> R accept(DeclarationDescriptorVisitor<R, D> visitor, D data) {
|
|
||||||
return visitor.visitScriptDescriptor(this, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setValueParameters(@NotNull List<ValueParameterDescriptor> valueParameters) {
|
|
||||||
this.valueParameters = valueParameters;
|
|
||||||
|
|
||||||
ConstructorDescriptorImpl constructorDescriptor = createConstructor(this, valueParameters);
|
|
||||||
constructorDescriptor.setReturnType(classDescriptor.getDefaultType());
|
|
||||||
classDescriptor.getConstructors().add(constructorDescriptor);
|
|
||||||
classDescriptor.setPrimaryConstructor(constructorDescriptor);
|
|
||||||
|
|
||||||
for (ValueParameterDescriptor valueParameter : valueParameters) {
|
|
||||||
classScope.addPropertyDescriptor(createPropertyFromScriptParameter(this, valueParameter));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static ConstructorDescriptorImpl createConstructor(
|
|
||||||
@NotNull ScriptDescriptor scriptDescriptor, @NotNull List<ValueParameterDescriptor> valueParameters
|
|
||||||
) {
|
|
||||||
return ConstructorDescriptorImpl
|
|
||||||
.create(scriptDescriptor.getClassDescriptor(), Annotations.EMPTY, true, SourceElement.NO_SOURCE)
|
|
||||||
.initialize(Collections.<TypeParameterDescriptor>emptyList(), valueParameters, Visibilities.PUBLIC);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static PropertyDescriptor createPropertyFromScriptParameter(
|
|
||||||
@NotNull ScriptDescriptor scriptDescriptor,
|
|
||||||
@NotNull ValueParameterDescriptor parameter
|
|
||||||
) {
|
|
||||||
PropertyDescriptorImpl propertyDescriptor = PropertyDescriptorImpl.create(
|
|
||||||
scriptDescriptor.getClassDescriptor(),
|
|
||||||
Annotations.EMPTY,
|
|
||||||
Modality.FINAL,
|
|
||||||
Visibilities.PUBLIC,
|
|
||||||
false,
|
|
||||||
parameter.getName(),
|
|
||||||
CallableMemberDescriptor.Kind.DECLARATION,
|
|
||||||
SourceElement.NO_SOURCE
|
|
||||||
);
|
|
||||||
propertyDescriptor.setType(
|
|
||||||
parameter.getType(),
|
|
||||||
Collections.<TypeParameterDescriptor>emptyList(),
|
|
||||||
scriptDescriptor.getThisAsReceiverParameter(), ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER);
|
|
||||||
propertyDescriptor.initialize(null, null);
|
|
||||||
return propertyDescriptor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public ClassDescriptor getClassDescriptor() {
|
|
||||||
return classDescriptor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public WritableScope getScopeForBodyResolution() {
|
|
||||||
return scopeForBodyResolution;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setScopeForBodyResolution(@NotNull WritableScope scopeForBodyResolution) {
|
|
||||||
assert this.scopeForBodyResolution == null : "Scope for body resolution already set for " + this;
|
|
||||||
this.scopeForBodyResolution = scopeForBodyResolution;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,108 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2015 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.resolve;
|
|
||||||
|
|
||||||
import com.intellij.openapi.util.Key;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor;
|
|
||||||
import org.jetbrains.kotlin.descriptors.ScriptDescriptor;
|
|
||||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor;
|
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ScriptDescriptorImpl;
|
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
|
||||||
import org.jetbrains.kotlin.name.Name;
|
|
||||||
import org.jetbrains.kotlin.psi.JetFile;
|
|
||||||
import org.jetbrains.kotlin.psi.JetScript;
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.RedeclarationHandler;
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.WritableScope;
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.WritableScopeImpl;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static org.jetbrains.kotlin.resolve.source.SourcePackage.toSourceElement;
|
|
||||||
|
|
||||||
// SCRIPT: Resolve declarations in scripts
|
|
||||||
public class ScriptHeaderResolver {
|
|
||||||
|
|
||||||
public static final Key<Integer> PRIORITY_KEY = Key.create(JetScript.class.getName() + ".priority");
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private MutablePackageFragmentProvider packageFragmentProvider;
|
|
||||||
@NotNull
|
|
||||||
private BindingTrace trace;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public void setPackageFragmentProvider(@NotNull MutablePackageFragmentProvider packageFragmentProvider) {
|
|
||||||
this.packageFragmentProvider = packageFragmentProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public void setTrace(@NotNull BindingTrace trace) {
|
|
||||||
this.trace = trace;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void processScriptHierarchy(@NotNull TopDownAnalysisContext c, @NotNull JetScript script, @NotNull WritableScope outerScope) {
|
|
||||||
JetFile file = script.getContainingJetFile();
|
|
||||||
FqName fqName = file.getPackageFqName();
|
|
||||||
PackageFragmentDescriptor ns = packageFragmentProvider.getOrCreateFragment(fqName);
|
|
||||||
|
|
||||||
Integer priority = getScriptPriority(script);
|
|
||||||
|
|
||||||
FqName nameForScript = ScriptNameUtil.classNameForScript(script);
|
|
||||||
Name className = nameForScript.shortName();
|
|
||||||
ScriptDescriptorImpl scriptDescriptor = new ScriptDescriptorImpl(ns, priority, outerScope, className, toSourceElement(script));
|
|
||||||
|
|
||||||
WritableScopeImpl scriptScope = new WritableScopeImpl(outerScope, scriptDescriptor, RedeclarationHandler.DO_NOTHING, "script");
|
|
||||||
scriptScope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
|
||||||
scriptDescriptor.setScopeForBodyResolution(scriptScope);
|
|
||||||
|
|
||||||
c.getScripts().put(script, scriptDescriptor);
|
|
||||||
|
|
||||||
trace.record(BindingContext.SCRIPT, script, scriptDescriptor);
|
|
||||||
|
|
||||||
outerScope.addClassifierDescriptor(scriptDescriptor.getClassDescriptor());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getScriptPriority(@NotNull JetScript script) {
|
|
||||||
Integer priority = script.getUserData(PRIORITY_KEY);
|
|
||||||
return priority == null ? 0 : priority;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void resolveScriptDeclarations(@NotNull TopDownAnalysisContext c) {
|
|
||||||
for (Map.Entry<JetScript, ScriptDescriptor> e : c.getScripts().entrySet()) {
|
|
||||||
JetScript declaration = e.getKey();
|
|
||||||
ScriptDescriptorImpl descriptor = (ScriptDescriptorImpl) e.getValue();
|
|
||||||
|
|
||||||
List<ValueParameterDescriptor> valueParameters = ScriptParameterResolver.resolveScriptParameters(
|
|
||||||
declaration,
|
|
||||||
descriptor
|
|
||||||
);
|
|
||||||
|
|
||||||
descriptor.setValueParameters(valueParameters);
|
|
||||||
|
|
||||||
WritableScope scope = descriptor.getScopeForBodyResolution();
|
|
||||||
scope.setImplicitReceiver(descriptor.getThisAsReceiverParameter());
|
|
||||||
for (ValueParameterDescriptor valueParameterDescriptor : valueParameters) {
|
|
||||||
scope.addVariableDescriptor(valueParameterDescriptor);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2015 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.resolve;
|
||||||
|
|
||||||
|
import com.intellij.openapi.util.Key;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.kotlin.psi.JetScript;
|
||||||
|
|
||||||
|
// SCRIPT: Resolve declarations in scripts
|
||||||
|
public class ScriptPriorities {
|
||||||
|
|
||||||
|
public static final Key<Integer> PRIORITY_KEY = Key.create(JetScript.class.getName() + ".priority");
|
||||||
|
|
||||||
|
public static int getScriptPriority(@NotNull JetScript script) {
|
||||||
|
Integer priority = script.getUserData(PRIORITY_KEY);
|
||||||
|
return priority == null ? 0 : priority;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -171,7 +171,7 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
|
|||||||
ResolveSession.this,
|
ResolveSession.this,
|
||||||
scriptBodyResolver,
|
scriptBodyResolver,
|
||||||
script,
|
script,
|
||||||
ScriptHeaderResolver.getScriptPriority(script)
|
ScriptPriorities.getScriptPriority(script)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+68
-4
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.kotlin.resolve.lazy.descriptors
|
package org.jetbrains.kotlin.resolve.lazy.descriptors
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ScriptDescriptorImpl
|
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
|
||||||
import org.jetbrains.kotlin.resolve.lazy.data.JetScriptInfo
|
import org.jetbrains.kotlin.resolve.lazy.data.JetScriptInfo
|
||||||
@@ -25,6 +24,11 @@ import org.jetbrains.kotlin.resolve.lazy.declarations.ClassMemberDeclarationProv
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.storage.NotNullLazyValue
|
import org.jetbrains.kotlin.storage.NotNullLazyValue
|
||||||
import org.jetbrains.kotlin.utils.toReadOnlyList
|
import org.jetbrains.kotlin.utils.toReadOnlyList
|
||||||
|
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
|
||||||
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
|
import org.jetbrains.kotlin.types.JetType
|
||||||
|
import java.util.Collections
|
||||||
|
import org.jetbrains.kotlin.descriptors.impl.ConstructorDescriptorImpl
|
||||||
|
|
||||||
// SCRIPT: Members of a script class
|
// SCRIPT: Members of a script class
|
||||||
public class LazyScriptClassMemberScope protected(
|
public class LazyScriptClassMemberScope protected(
|
||||||
@@ -36,7 +40,7 @@ public class LazyScriptClassMemberScope protected(
|
|||||||
|
|
||||||
private val scriptResultProperty: NotNullLazyValue<PropertyDescriptor> = resolveSession.getStorageManager().createLazyValue {
|
private val scriptResultProperty: NotNullLazyValue<PropertyDescriptor> = resolveSession.getStorageManager().createLazyValue {
|
||||||
val scriptInfo = declarationProvider.getOwnerInfo() as JetScriptInfo
|
val scriptInfo = declarationProvider.getOwnerInfo() as JetScriptInfo
|
||||||
ScriptDescriptorImpl.createScriptResultProperty(resolveSession.getScriptDescriptor(scriptInfo.script))
|
createScriptResultProperty(resolveSession.getScriptDescriptor(scriptInfo.script))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun computeExtraDescriptors(): Collection<DeclarationDescriptor> {
|
override fun computeExtraDescriptors(): Collection<DeclarationDescriptor> {
|
||||||
@@ -66,7 +70,7 @@ public class LazyScriptClassMemberScope protected(
|
|||||||
|
|
||||||
for (valueParameterDescriptor in primaryConstructor.getValueParameters()) {
|
for (valueParameterDescriptor in primaryConstructor.getValueParameters()) {
|
||||||
if (name == valueParameterDescriptor.getName()) {
|
if (name == valueParameterDescriptor.getName()) {
|
||||||
result.add(ScriptDescriptorImpl.createPropertyFromScriptParameter(resolveSession.getScriptDescriptor(scriptInfo.script), valueParameterDescriptor))
|
result.add(createPropertyFromScriptParameter(resolveSession.getScriptDescriptor(scriptInfo.script), valueParameterDescriptor))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -74,8 +78,68 @@ public class LazyScriptClassMemberScope protected(
|
|||||||
override fun resolvePrimaryConstructor(): ConstructorDescriptor? {
|
override fun resolvePrimaryConstructor(): ConstructorDescriptor? {
|
||||||
val scriptInfo = declarationProvider.getOwnerInfo() as JetScriptInfo
|
val scriptInfo = declarationProvider.getOwnerInfo() as JetScriptInfo
|
||||||
val scriptDescriptor = resolveSession.getScriptDescriptor(scriptInfo.script)
|
val scriptDescriptor = resolveSession.getScriptDescriptor(scriptInfo.script)
|
||||||
val constructor = ScriptDescriptorImpl.createConstructor(scriptDescriptor, scriptDescriptor.getScriptCodeDescriptor().getValueParameters())
|
val constructor = createConstructor(scriptDescriptor, scriptDescriptor.getScriptCodeDescriptor().getValueParameters())
|
||||||
setDeferredReturnType(constructor)
|
setDeferredReturnType(constructor)
|
||||||
return constructor
|
return constructor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun createScriptResultProperty(scriptDescriptor: ScriptDescriptor): PropertyDescriptor {
|
||||||
|
val propertyDescriptor = PropertyDescriptorImpl.create(
|
||||||
|
scriptDescriptor.getClassDescriptor(),
|
||||||
|
Annotations.EMPTY,
|
||||||
|
Modality.FINAL,
|
||||||
|
Visibilities.PUBLIC,
|
||||||
|
false,
|
||||||
|
Name.identifier(ScriptDescriptor.LAST_EXPRESSION_VALUE_FIELD_NAME),
|
||||||
|
CallableMemberDescriptor.Kind.DECLARATION,
|
||||||
|
SourceElement.NO_SOURCE
|
||||||
|
)
|
||||||
|
|
||||||
|
val returnType = scriptDescriptor.getScriptCodeDescriptor().getReturnType()
|
||||||
|
assert(returnType != null) { "Return type not initialized for " + scriptDescriptor }
|
||||||
|
|
||||||
|
propertyDescriptor.setType(
|
||||||
|
returnType,
|
||||||
|
listOf<TypeParameterDescriptor>(),
|
||||||
|
scriptDescriptor.getThisAsReceiverParameter(),
|
||||||
|
ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER
|
||||||
|
)
|
||||||
|
propertyDescriptor.initialize(null, null)
|
||||||
|
|
||||||
|
return propertyDescriptor
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun createConstructor(scriptDescriptor: ScriptDescriptor, valueParameters: List<ValueParameterDescriptor>): ConstructorDescriptorImpl {
|
||||||
|
return ConstructorDescriptorImpl.create(
|
||||||
|
scriptDescriptor.getClassDescriptor(),
|
||||||
|
Annotations.EMPTY,
|
||||||
|
true,
|
||||||
|
SourceElement.NO_SOURCE
|
||||||
|
).initialize(
|
||||||
|
listOf(),
|
||||||
|
valueParameters,
|
||||||
|
Visibilities.PUBLIC
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun createPropertyFromScriptParameter(scriptDescriptor: ScriptDescriptor, parameter: ValueParameterDescriptor): PropertyDescriptor {
|
||||||
|
val propertyDescriptor = PropertyDescriptorImpl.create(
|
||||||
|
scriptDescriptor.getClassDescriptor(),
|
||||||
|
Annotations.EMPTY,
|
||||||
|
Modality.FINAL,
|
||||||
|
Visibilities.PUBLIC,
|
||||||
|
false,
|
||||||
|
parameter.getName(),
|
||||||
|
CallableMemberDescriptor.Kind.DECLARATION,
|
||||||
|
SourceElement.NO_SOURCE
|
||||||
|
)
|
||||||
|
propertyDescriptor.setType(
|
||||||
|
parameter.getType(),
|
||||||
|
listOf(),
|
||||||
|
scriptDescriptor.getThisAsReceiverParameter(),
|
||||||
|
ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER
|
||||||
|
)
|
||||||
|
propertyDescriptor.initialize(null, null)
|
||||||
|
return propertyDescriptor
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user