Do not add functions and properties with inferred types as script class memebrs
This commit is contained in:
@@ -22,10 +22,7 @@ import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
|
|||||||
import org.jetbrains.jet.lang.descriptors.ScriptDescriptorImpl;
|
import org.jetbrains.jet.lang.descriptors.ScriptDescriptorImpl;
|
||||||
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
|
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.impl.PropertyDescriptorImpl;
|
import org.jetbrains.jet.lang.descriptors.impl.PropertyDescriptorImpl;
|
||||||
import org.jetbrains.jet.lang.psi.JetDeclaration;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
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.resolve.calls.autocasts.DataFlowInfo;
|
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
||||||
import org.jetbrains.jet.lang.types.ErrorUtils;
|
import org.jetbrains.jet.lang.types.ErrorUtils;
|
||||||
@@ -82,9 +79,13 @@ public class ScriptBodyResolver {
|
|||||||
BindingContext bindingContext = trace.getBindingContext();
|
BindingContext bindingContext = trace.getBindingContext();
|
||||||
for (JetDeclaration jetDeclaration : declaration.getDeclarations()) {
|
for (JetDeclaration jetDeclaration : declaration.getDeclarations()) {
|
||||||
if (jetDeclaration instanceof JetProperty) {
|
if (jetDeclaration instanceof JetProperty) {
|
||||||
|
if (!shouldBeScriptClassMember(jetDeclaration)) continue;
|
||||||
|
|
||||||
properties.add((PropertyDescriptorImpl) bindingContext.get(BindingContext.VARIABLE, jetDeclaration));
|
properties.add((PropertyDescriptorImpl) bindingContext.get(BindingContext.VARIABLE, jetDeclaration));
|
||||||
}
|
}
|
||||||
else if (jetDeclaration instanceof JetNamedFunction) {
|
else if (jetDeclaration instanceof JetNamedFunction) {
|
||||||
|
if (!shouldBeScriptClassMember(jetDeclaration)) continue;
|
||||||
|
|
||||||
SimpleFunctionDescriptor function = bindingContext.get(BindingContext.FUNCTION, jetDeclaration);
|
SimpleFunctionDescriptor function = bindingContext.get(BindingContext.FUNCTION, jetDeclaration);
|
||||||
assert function != null;
|
assert function != null;
|
||||||
functions.add(function.copy(descriptor.getClassDescriptor(), function.getModality(), function.getVisibility(),
|
functions.add(function.copy(descriptor.getClassDescriptor(), function.getModality(), function.getVisibility(),
|
||||||
@@ -96,4 +97,11 @@ public class ScriptBodyResolver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean shouldBeScriptClassMember(@NotNull JetDeclaration declaration) {
|
||||||
|
// To avoid the necessity to always analyze the whole body of a script even if just its class descriptor is needed
|
||||||
|
// we only add those vals, vars and funs that have explicitly specified return types
|
||||||
|
// (or implicit Unit for function with block body)
|
||||||
|
return declaration instanceof JetCallableDeclaration && ((JetCallableDeclaration) declaration).getReturnTypeRef() != null ||
|
||||||
|
declaration instanceof JetNamedFunction && ((JetNamedFunction) declaration).hasBlockBody();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,5 +7,5 @@ fun fib(n: Int): Int {
|
|||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
|
|
||||||
val result = fib(num)
|
val result: Int = fib(num)
|
||||||
12
|
12
|
||||||
Reference in New Issue
Block a user