KT-843 Don't highlight incomplete variables as unused
This commit is contained in:
@@ -556,10 +556,10 @@ public class JetFlowInformationProvider {
|
||||
JetDeclaration element = ((VariableDeclarationInstruction) instruction).getVariableDeclarationElement();
|
||||
if (element instanceof JetNamedDeclaration) {
|
||||
PsiElement nameIdentifier = ((JetNamedDeclaration) element).getNameIdentifier();
|
||||
PsiElement elementToMark = nameIdentifier != null ? nameIdentifier : element;
|
||||
if (nameIdentifier == null) return;
|
||||
if (variableStatus == null || variableStatus == VariableStatus.UNUSED) {
|
||||
if (element instanceof JetProperty) {
|
||||
trace.report(Errors.UNUSED_VARIABLE.on((JetProperty) element, elementToMark, variableDescriptor));
|
||||
trace.report(Errors.UNUSED_VARIABLE.on((JetProperty) element, nameIdentifier, variableDescriptor));
|
||||
}
|
||||
else if (element instanceof JetParameter) {
|
||||
PsiElement psiElement = element.getParent().getParent();
|
||||
@@ -569,13 +569,13 @@ public class JetFlowInformationProvider {
|
||||
assert descriptor instanceof FunctionDescriptor;
|
||||
FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor;
|
||||
if (!isMain && !functionDescriptor.getModality().isOverridable() && functionDescriptor.getOverriddenDescriptors().isEmpty()) {
|
||||
trace.report(Errors.UNUSED_PARAMETER.on((JetParameter) element, elementToMark, variableDescriptor));
|
||||
trace.report(Errors.UNUSED_PARAMETER.on((JetParameter) element, nameIdentifier, variableDescriptor));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (variableStatus == VariableStatus.ONLY_WRITTEN && element instanceof JetProperty) {
|
||||
trace.report(Errors.ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE.on((JetNamedDeclaration) element, elementToMark, variableDescriptor));
|
||||
trace.report(Errors.ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE.on((JetNamedDeclaration) element, nameIdentifier, variableDescriptor));
|
||||
}
|
||||
else if (variableStatus == VariableStatus.WRITTEN && element instanceof JetProperty) {
|
||||
JetExpression initializer = ((JetProperty) element).getInitializer();
|
||||
|
||||
@@ -221,18 +221,17 @@ public class DeclarationsChecker {
|
||||
boolean backingFieldRequired = context.getTrace().getBindingContext().get(BindingContext.BACKING_FIELD_REQUIRED, propertyDescriptor);
|
||||
|
||||
PsiElement nameIdentifier = property.getNameIdentifier();
|
||||
ASTNode nameNode = nameIdentifier == null ? property.getNode() : nameIdentifier.getNode();
|
||||
|
||||
if (inTrait && backingFieldRequired && hasAccessorImplementation) {
|
||||
context.getTrace().report(BACKING_FIELD_IN_TRAIT.on(nameNode));
|
||||
if (inTrait && backingFieldRequired && hasAccessorImplementation && nameIdentifier != null) {
|
||||
context.getTrace().report(BACKING_FIELD_IN_TRAIT.on(nameIdentifier));
|
||||
}
|
||||
if (initializer == null) {
|
||||
if (backingFieldRequired && !inTrait && !context.getTrace().getBindingContext().get(BindingContext.IS_INITIALIZED, propertyDescriptor)) {
|
||||
if (nameIdentifier != null && backingFieldRequired && !inTrait && !context.getTrace().getBindingContext().get(BindingContext.IS_INITIALIZED, propertyDescriptor)) {
|
||||
if (classDescriptor == null || hasAccessorImplementation) {
|
||||
context.getTrace().report(MUST_BE_INITIALIZED.on(nameNode));
|
||||
context.getTrace().report(MUST_BE_INITIALIZED.on(nameIdentifier));
|
||||
}
|
||||
else {
|
||||
context.getTrace().report(MUST_BE_INITIALIZED_OR_BE_ABSTRACT.on(property, nameNode));
|
||||
context.getTrace().report(MUST_BE_INITIALIZED_OR_BE_ABSTRACT.on(property, nameIdentifier));
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -117,10 +117,10 @@ public class OverrideResolver {
|
||||
else if (klass instanceof JetObjectDeclaration) {
|
||||
nameIdentifier = ((JetObjectDeclaration) klass).getNameIdentifier();
|
||||
}
|
||||
PsiElement elementToMark = nameIdentifier != null ? nameIdentifier : klass;
|
||||
if (nameIdentifier == null) return;
|
||||
|
||||
for (CallableMemberDescriptor memberDescriptor : manyImpl) {
|
||||
context.getTrace().report(MANY_IMPL_MEMBER_NOT_IMPLEMENTED.on(elementToMark, klass, memberDescriptor));
|
||||
context.getTrace().report(MANY_IMPL_MEMBER_NOT_IMPLEMENTED.on(nameIdentifier, klass, memberDescriptor));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -130,7 +130,7 @@ public class OverrideResolver {
|
||||
}
|
||||
|
||||
for (CallableMemberDescriptor memberDescriptor : abstractNoImpl) {
|
||||
context.getTrace().report(ABSTRACT_MEMBER_NOT_IMPLEMENTED.on(elementToMark, klass, memberDescriptor));
|
||||
context.getTrace().report(ABSTRACT_MEMBER_NOT_IMPLEMENTED.on(nameIdentifier, klass, memberDescriptor));
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
//KT-843 Don't highlight incomplete variables as unused
|
||||
|
||||
namespace kt843
|
||||
|
||||
fun main(args : Array<String>) {
|
||||
// Integer type
|
||||
val // this word is grey, which looks strange
|
||||
<!SYNTAX!>}<!SYNTAX!><!><!>
|
||||
Reference in New Issue
Block a user