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.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.*;
|
||||
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
||||
import org.jetbrains.jet.lang.types.ErrorUtils;
|
||||
@@ -82,9 +79,13 @@ public class ScriptBodyResolver {
|
||||
BindingContext bindingContext = trace.getBindingContext();
|
||||
for (JetDeclaration jetDeclaration : declaration.getDeclarations()) {
|
||||
if (jetDeclaration instanceof JetProperty) {
|
||||
if (!shouldBeScriptClassMember(jetDeclaration)) continue;
|
||||
|
||||
properties.add((PropertyDescriptorImpl) bindingContext.get(BindingContext.VARIABLE, jetDeclaration));
|
||||
}
|
||||
else if (jetDeclaration instanceof JetNamedFunction) {
|
||||
if (!shouldBeScriptClassMember(jetDeclaration)) continue;
|
||||
|
||||
SimpleFunctionDescriptor function = bindingContext.get(BindingContext.FUNCTION, jetDeclaration);
|
||||
assert function != null;
|
||||
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
|
||||
}
|
||||
|
||||
val result = fib(num)
|
||||
val result: Int = fib(num)
|
||||
12
|
||||
Reference in New Issue
Block a user