better diagnostics for KT-424
highlight full function definition, not only function name
This commit is contained in:
@@ -375,17 +375,7 @@ public interface Errors {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
ParameterizedDiagnosticFactory2<JetClassOrObject, CallableMemberDescriptor> CONFLICTING_OVERLOADS = new ParameterizedDiagnosticFactory2<JetClassOrObject, CallableMemberDescriptor>(ERROR, "{1} is already defined in ''{0}''") {
|
FunctionSignatureDiagnosticFactory CONFLICTING_OVERLOADS = new FunctionSignatureDiagnosticFactory(ERROR, "{1} is already defined in ''{0}''");
|
||||||
@Override
|
|
||||||
protected String makeMessageForA(@NotNull JetClassOrObject jetClassOrObject) {
|
|
||||||
return jetClassOrObject.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String makeMessageForB(@NotNull CallableMemberDescriptor memberDescriptor) {
|
|
||||||
return DescriptorRenderer.TEXT.render(memberDescriptor);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
ParameterizedDiagnosticFactory3<String, JetType, JetType> RESULT_TYPE_MISMATCH = ParameterizedDiagnosticFactory3.create(ERROR, "{0} must return {1} but returns {2}");
|
ParameterizedDiagnosticFactory3<String, JetType, JetType> RESULT_TYPE_MISMATCH = ParameterizedDiagnosticFactory3.create(ERROR, "{0} must return {1} but returns {2}");
|
||||||
|
|||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
package org.jetbrains.jet.lang.diagnostics;
|
||||||
|
|
||||||
|
import com.intellij.openapi.util.TextRange;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetClassOrObject;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetNamedFunction;
|
||||||
|
import org.jetbrains.jet.resolve.DescriptorRenderer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Stepan Koltsov
|
||||||
|
*/
|
||||||
|
public class FunctionSignatureDiagnosticFactory extends DiagnosticFactoryWithMessageFormat {
|
||||||
|
|
||||||
|
public FunctionSignatureDiagnosticFactory(Severity severity, String messageTemplate) {
|
||||||
|
super(severity, messageTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public Diagnostic on(@NotNull JetNamedFunction functionElement, @NotNull FunctionDescriptor functionDescriptor,
|
||||||
|
@NotNull JetClassOrObject jetClassOrObject)
|
||||||
|
{
|
||||||
|
TextRange rangeToMark = new TextRange(
|
||||||
|
functionElement.getStartOfSignatureElement().getTextRange().getStartOffset(),
|
||||||
|
functionElement.getEndOfSignatureElement().getTextRange().getEndOffset()
|
||||||
|
);
|
||||||
|
String message = messageFormat.format(new Object[]{
|
||||||
|
jetClassOrObject.getName(),
|
||||||
|
DescriptorRenderer.TEXT.render(functionDescriptor)});
|
||||||
|
return new GenericDiagnostic(this, severity, message, functionElement.getContainingFile(), rangeToMark);
|
||||||
|
}
|
||||||
|
|
||||||
|
} //~
|
||||||
@@ -40,4 +40,26 @@ public class JetNamedFunction extends JetFunction {
|
|||||||
return findChildByType(JetTokens.EQ) == null;
|
return findChildByType(JetTokens.EQ) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public JetElement getStartOfSignatureElement() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public JetElement getEndOfSignatureElement() {
|
||||||
|
JetElement r = getReturnTypeRef();
|
||||||
|
if (r != null) {
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
r = getValueParameterList();
|
||||||
|
if (r != null) {
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
// otherwise it is an error
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,9 +75,7 @@ public class OverloadResolver {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX: mark "fun" keyword and parameters as in Java IDE // stepan.koltsov@
|
context.getTrace().report(Errors.CONFLICTING_OVERLOADS.on(member, function, klass));
|
||||||
PsiElement mark = member.getNameIdentifier();
|
|
||||||
context.getTrace().report(Errors.CONFLICTING_OVERLOADS.on(mark, klass, function));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
// http://youtrack.jetbrains.net/issue/KT-424
|
// http://youtrack.jetbrains.net/issue/KT-424
|
||||||
|
|
||||||
class A {
|
class A {
|
||||||
// XXX: error should be reported on the whole method signature
|
<!CONFLICTING_OVERLOADS!>fun a(a: Int): Int<!> = 0
|
||||||
// not only on method name
|
|
||||||
fun <!CONFLICTING_OVERLOADS!>a<!>() {
|
<!CONFLICTING_OVERLOADS!>fun a(a: Int)<!> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <!CONFLICTING_OVERLOADS!>a<!>() {
|
<!CONFLICTING_OVERLOADS!>fun b()<!> {
|
||||||
|
}
|
||||||
|
|
||||||
|
<!CONFLICTING_OVERLOADS!>fun b()<!> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user