CONFLICTING_UPPER_BOUNDS reported in LAZY mode
This commit is contained in:
@@ -35,6 +35,7 @@ import java.util.*;
|
|||||||
|
|
||||||
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
|
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
|
||||||
import static org.jetbrains.jet.lang.resolve.BindingContext.TYPE;
|
import static org.jetbrains.jet.lang.resolve.BindingContext.TYPE;
|
||||||
|
import static org.jetbrains.jet.lang.resolve.BindingContext.TYPE_PARAMETER;
|
||||||
|
|
||||||
public class DeclarationsChecker {
|
public class DeclarationsChecker {
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -276,8 +277,13 @@ public class DeclarationsChecker {
|
|||||||
|
|
||||||
private void checkTypeParameters(JetTypeParameterListOwner typeParameterListOwner) {
|
private void checkTypeParameters(JetTypeParameterListOwner typeParameterListOwner) {
|
||||||
// TODO: Support annotation for type parameters
|
// TODO: Support annotation for type parameters
|
||||||
for (JetTypeParameter typeParameter : typeParameterListOwner.getTypeParameters()) {
|
for (JetTypeParameter jetTypeParameter : typeParameterListOwner.getTypeParameters()) {
|
||||||
AnnotationResolver.reportUnsupportedAnnotationForTypeParameter(typeParameter, trace);
|
AnnotationResolver.reportUnsupportedAnnotationForTypeParameter(jetTypeParameter, trace);
|
||||||
|
|
||||||
|
TypeParameterDescriptor typeParameter = trace.get(TYPE_PARAMETER, jetTypeParameter);
|
||||||
|
if (typeParameter != null) {
|
||||||
|
DescriptorResolver.checkConflictingUpperBounds(trace, typeParameter, jetTypeParameter);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -685,20 +685,7 @@ public class DescriptorResolver {
|
|||||||
|
|
||||||
parameter.setInitialized();
|
parameter.setInitialized();
|
||||||
|
|
||||||
if (KotlinBuiltIns.getInstance().isNothing(parameter.getUpperBoundsAsType())) {
|
checkConflictingUpperBounds(trace, parameter, typeParameters.get(parameter.getIndex()));
|
||||||
PsiElement nameIdentifier = typeParameters.get(parameter.getIndex()).getNameIdentifier();
|
|
||||||
if (nameIdentifier != null) {
|
|
||||||
trace.report(CONFLICTING_UPPER_BOUNDS.on(nameIdentifier, parameter));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
JetType classObjectType = parameter.getClassObjectType();
|
|
||||||
if (classObjectType != null && KotlinBuiltIns.getInstance().isNothing(classObjectType)) {
|
|
||||||
PsiElement nameIdentifier = typeParameters.get(parameter.getIndex()).getNameIdentifier();
|
|
||||||
if (nameIdentifier != null) {
|
|
||||||
trace.report(CONFLICTING_CLASS_OBJECT_UPPER_BOUNDS.on(nameIdentifier, parameter));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(declaration instanceof JetClass)) {
|
if (!(declaration instanceof JetClass)) {
|
||||||
@@ -710,6 +697,26 @@ public class DescriptorResolver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void checkConflictingUpperBounds(
|
||||||
|
@NotNull BindingTrace trace,
|
||||||
|
@NotNull TypeParameterDescriptor parameter,
|
||||||
|
@NotNull JetTypeParameter typeParameter
|
||||||
|
) {
|
||||||
|
PsiElement nameIdentifier = typeParameter.getNameIdentifier();
|
||||||
|
if (KotlinBuiltIns.getInstance().isNothing(parameter.getUpperBoundsAsType())) {
|
||||||
|
if (nameIdentifier != null) {
|
||||||
|
trace.report(CONFLICTING_UPPER_BOUNDS.on(nameIdentifier, parameter));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
JetType classObjectType = parameter.getClassObjectType();
|
||||||
|
if (classObjectType != null && KotlinBuiltIns.getInstance().isNothing(classObjectType)) {
|
||||||
|
if (nameIdentifier != null) {
|
||||||
|
trace.report(CONFLICTING_CLASS_OBJECT_UPPER_BOUNDS.on(nameIdentifier, parameter));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void checkNamesInConstraints(
|
public void checkNamesInConstraints(
|
||||||
@NotNull JetTypeParameterListOwner declaration,
|
@NotNull JetTypeParameterListOwner declaration,
|
||||||
@NotNull DeclarationDescriptor descriptor,
|
@NotNull DeclarationDescriptor descriptor,
|
||||||
|
|||||||
Reference in New Issue
Block a user