Diagnostric for default

This commit is contained in:
Mikhael Bogdanov
2013-11-18 11:57:55 +04:00
parent 7329a7a9ef
commit 87e66a6e57
2 changed files with 38 additions and 0 deletions
@@ -18,11 +18,15 @@ package org.jetbrains.jet.lang.resolve.extension;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.diagnostics.Errors;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.FunctionAnalyzerExtension;
import java.util.List;
public class InlineAnalyzerExtension implements FunctionAnalyzerExtension.AnalyzerExtension {
public static final InlineAnalyzerExtension INSTANCE = new InlineAnalyzerExtension();
@@ -35,6 +39,10 @@ public class InlineAnalyzerExtension implements FunctionAnalyzerExtension.Analyz
public void process(
@NotNull final FunctionDescriptor descriptor, @NotNull JetNamedFunction function, @NotNull final BindingTrace trace
) {
assert descriptor instanceof SimpleFunctionDescriptor && ((SimpleFunctionDescriptor) descriptor).isInline() :
"This method should be invoced on inline function: " + descriptor;
checkDefaults(descriptor, function, trace);
JetVisitorVoid visitor = new JetVisitorVoid() {
@@ -62,4 +70,20 @@ public class InlineAnalyzerExtension implements FunctionAnalyzerExtension.Analyz
function.acceptChildren(visitor);
}
private static void checkDefaults(
@NotNull FunctionDescriptor functionDescriptor,
@NotNull JetFunction function,
@NotNull BindingTrace trace
) {
int index = 0;
List<JetParameter> jetParameters = function.getValueParameters();
for (ValueParameterDescriptor parameter : functionDescriptor.getValueParameters()) {
if (parameter.hasDefaultValue()) {
JetParameter jetParameter = jetParameters.get(index);
trace.report(Errors.NOT_YET_SUPPORTED_IN_INLINE.on(jetParameter, jetParameter, functionDescriptor));
}
index++;
}
}
}
@@ -23,4 +23,18 @@ inline fun unsupported() {
<!NOT_YET_SUPPORTED_IN_INLINE!>fun local() {
fun localInner() {}
}<!>
}
inline fun unsupportedDefault(<!NOT_YET_SUPPORTED_IN_INLINE!>s : Int = 10<!>) {
}
open class Base {
open fun foo(a: Int = 1) {}
}
class Derived: Base() {
inline final override fun foo(<!NOT_YET_SUPPORTED_IN_INLINE!>a: Int<!>) {
}
}