set LOCAL visibility for local functions
(it can't be INHERIT)
This commit is contained in:
@@ -265,6 +265,9 @@ public class DeclarationsChecker {
|
||||
if (function.getBodyExpression() == null && !hasAbstractModifier) {
|
||||
trace.report(NON_MEMBER_FUNCTION_NO_BODY.on(function, functionDescriptor));
|
||||
}
|
||||
if (function.hasModifier(JetTokens.OVERRIDE_KEYWORD)) {
|
||||
trace.report(ILLEGAL_MODIFIER.on(function.getModifierList().getModifierNode(JetTokens.OVERRIDE_KEYWORD).getPsi(), JetTokens.OVERRIDE_KEYWORD));
|
||||
}
|
||||
}
|
||||
|
||||
private void checkAccessors(@NotNull JetProperty property, @NotNull PropertyDescriptor propertyDescriptor) {
|
||||
|
||||
@@ -49,6 +49,7 @@ import java.util.*;
|
||||
|
||||
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
|
||||
import static org.jetbrains.jet.lang.resolve.BindingContext.CONSTRUCTOR;
|
||||
import static org.jetbrains.jet.lexer.JetTokens.OVERRIDE_KEYWORD;
|
||||
|
||||
/**
|
||||
* @author abreslav
|
||||
@@ -273,7 +274,7 @@ public class DescriptorResolver {
|
||||
}
|
||||
boolean hasBody = function.getBodyExpression() != null;
|
||||
Modality modality = ModifiersChecker.resolveModalityFromModifiers(function, getDefaultModality(containingDescriptor, hasBody));
|
||||
Visibility visibility = ModifiersChecker.resolveVisibilityFromModifiers(function);
|
||||
Visibility visibility = ModifiersChecker.resolveVisibilityFromModifiers(function, getDefaultVisibility(function, containingDescriptor));
|
||||
JetModifierList modifierList = function.getModifierList();
|
||||
boolean isInline = (modifierList != null) && modifierList.hasModifier(JetTokens.INLINE_KEYWORD);
|
||||
functionDescriptor.initialize(
|
||||
@@ -290,6 +291,23 @@ public class DescriptorResolver {
|
||||
return functionDescriptor;
|
||||
}
|
||||
|
||||
public static Visibility getDefaultVisibility(JetModifierListOwner modifierListOwner, DeclarationDescriptor containingDescriptor) {
|
||||
Visibility defaultVisibility;
|
||||
if (containingDescriptor instanceof ClassDescriptor) {
|
||||
JetModifierList modifierList = modifierListOwner.getModifierList();
|
||||
defaultVisibility = modifierList != null && modifierList.hasModifier(OVERRIDE_KEYWORD)
|
||||
? Visibilities.INHERITED
|
||||
: Visibilities.INTERNAL;
|
||||
}
|
||||
else if (containingDescriptor instanceof FunctionDescriptor) {
|
||||
defaultVisibility = Visibilities.LOCAL;
|
||||
}
|
||||
else {
|
||||
defaultVisibility = Visibilities.INTERNAL;
|
||||
}
|
||||
return defaultVisibility;
|
||||
}
|
||||
|
||||
public static Modality getDefaultModality(DeclarationDescriptor containingDescriptor, boolean isBodyPresent) {
|
||||
Modality defaultModality;
|
||||
if (containingDescriptor instanceof ClassDescriptor) {
|
||||
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package d
|
||||
|
||||
class T {
|
||||
fun baz() = 1
|
||||
}
|
||||
|
||||
<!ILLEGAL_MODIFIER!>override<!> fun zzz() {}
|
||||
|
||||
fun foo(t: T) {
|
||||
<!ILLEGAL_MODIFIER!>override<!> fun T.baz() = 2
|
||||
|
||||
// was "Visibility is unknown yet exception"
|
||||
t.baz()
|
||||
|
||||
zzz()
|
||||
}
|
||||
@@ -1103,6 +1103,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
|
||||
doTest("compiler/testData/diagnostics/tests/declarationChecks/localDeclarationModifiers.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("localFunctionNoInheritVisibility.kt")
|
||||
public void testLocalFunctionNoInheritVisibility() throws Exception {
|
||||
doTest("compiler/testData/diagnostics/tests/declarationChecks/localFunctionNoInheritVisibility.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("LocalVariableWithNoTypeInformation.kt")
|
||||
public void testLocalVariableWithNoTypeInformation() throws Exception {
|
||||
doTest("compiler/testData/diagnostics/tests/declarationChecks/LocalVariableWithNoTypeInformation.kt");
|
||||
|
||||
Reference in New Issue
Block a user