diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java index 4f3446cab05..a23ea8dece9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java @@ -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(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java index 9254fcdc0de..94ea67e824e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java @@ -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; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java index ccd0c4d9385..2c060f36b97 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java @@ -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; } diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt843.jet b/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt843.jet new file mode 100644 index 00000000000..3e276fe45d3 --- /dev/null +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt843.jet @@ -0,0 +1,8 @@ +//KT-843 Don't highlight incomplete variables as unused + +namespace kt843 + +fun main(args : Array) { + // Integer type + val // this word is grey, which looks strange +} \ No newline at end of file