rollback -resolveModifiers() method location
This commit is contained in:
@@ -1,10 +1,5 @@
|
||||
package org.jetbrains.jet.lang.descriptors;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.psi.JetModifierList;
|
||||
import org.jetbrains.jet.lexer.JetTokens;
|
||||
|
||||
/**
|
||||
* @author svtk
|
||||
*/
|
||||
@@ -28,13 +23,5 @@ public class ClassModifiers extends Modifiers {
|
||||
return trait;
|
||||
}
|
||||
|
||||
public static ClassModifiers resolveModifiers(@Nullable JetModifierList modifierList) {
|
||||
if (modifierList == null) return DEFAULT_MODIFIERS;
|
||||
return new ClassModifiers(
|
||||
modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD),
|
||||
modifierList.hasModifier(JetTokens.OPEN_KEYWORD) || modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD),
|
||||
modifierList.hasModifier(JetTokens.TRAIT_KEYWORD)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,10 +1,5 @@
|
||||
package org.jetbrains.jet.lang.descriptors;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.psi.JetModifierList;
|
||||
import org.jetbrains.jet.lexer.JetTokens;
|
||||
|
||||
/**
|
||||
* @author abreslav
|
||||
*/
|
||||
@@ -32,19 +27,4 @@ public class MemberModifiers extends Modifiers {
|
||||
public boolean isOverridable() {
|
||||
return isAbstract() || isVirtual() || isOverride();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static MemberModifiers resolveModifiers(@Nullable JetModifierList modifierList) {
|
||||
return resolveModifiers(modifierList, DEFAULT_MODIFIERS);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static MemberModifiers resolveModifiers(@Nullable JetModifierList modifierList, @NotNull MemberModifiers defaultModifiers) {
|
||||
if (modifierList == null) return defaultModifiers;
|
||||
return new MemberModifiers(
|
||||
modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD),
|
||||
modifierList.hasModifier(JetTokens.VIRTUAL_KEYWORD),
|
||||
modifierList.hasModifier(JetTokens.OVERRIDE_KEYWORD)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,9 +25,6 @@ import java.util.*;
|
||||
* @author abreslav
|
||||
*/
|
||||
public class ClassDescriptorResolver {
|
||||
|
||||
// private static final MemberModifiers DEFAULT_MODIFIERS = new MemberModifiers(false, false, false);
|
||||
|
||||
private final JetSemanticServices semanticServices;
|
||||
private final TypeResolver typeResolver;
|
||||
private final TypeResolver typeResolverNotCheckingBounds;
|
||||
@@ -144,7 +141,7 @@ public class ClassDescriptorResolver {
|
||||
index++;
|
||||
}
|
||||
descriptor.setTypeParameterDescriptors(typeParameters);
|
||||
descriptor.setClassModifiers(ClassModifiers.resolveModifiers(classElement.getModifierList()));
|
||||
descriptor.setClassModifiers(resolveClassModifiers(classElement.getModifierList()));
|
||||
|
||||
trace.record(BindingContext.CLASS, classElement, descriptor);
|
||||
}
|
||||
@@ -230,7 +227,7 @@ public class ClassDescriptorResolver {
|
||||
typeParameterDescriptors,
|
||||
valueParameterDescriptors,
|
||||
returnType,
|
||||
MemberModifiers.resolveModifiers(function.getModifierList()));
|
||||
resolveMemberModifiers(function.getModifierList()));
|
||||
|
||||
trace.record(BindingContext.FUNCTION, function, functionDescriptor);
|
||||
return functionDescriptor;
|
||||
@@ -463,7 +460,7 @@ public class ClassDescriptorResolver {
|
||||
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(
|
||||
containingDeclaration,
|
||||
annotationResolver.createAnnotationStubs(modifierList),
|
||||
MemberModifiers.resolveModifiers(modifierList), // TODO : default modifiers differ in different contexts
|
||||
resolveMemberModifiers(modifierList), // TODO : default modifiers differ in different contexts
|
||||
false,
|
||||
null,
|
||||
JetPsiUtil.safeName(objectDeclaration.getName()),
|
||||
@@ -513,7 +510,7 @@ public class ClassDescriptorResolver {
|
||||
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(
|
||||
containingDeclaration,
|
||||
annotationResolver.resolveAnnotations(scope, modifierList),
|
||||
MemberModifiers.resolveModifiers(modifierList), // TODO : default modifiers differ in different contexts
|
||||
resolveMemberModifiers(modifierList), // TODO : default modifiers differ in different contexts
|
||||
isVar,
|
||||
receiverType,
|
||||
JetPsiUtil.safeName(property.getName()),
|
||||
@@ -559,6 +556,30 @@ public class ClassDescriptorResolver {
|
||||
return typeResolver.resolveType(scope, propertyTypeRef);
|
||||
}
|
||||
}
|
||||
|
||||
private static ClassModifiers resolveClassModifiers(@Nullable JetModifierList modifierList) {
|
||||
if (modifierList == null) return ClassModifiers.DEFAULT_MODIFIERS;
|
||||
return new ClassModifiers(
|
||||
modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD),
|
||||
modifierList.hasModifier(JetTokens.OPEN_KEYWORD) || modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD),
|
||||
modifierList.hasModifier(JetTokens.TRAIT_KEYWORD)
|
||||
);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private MemberModifiers resolveMemberModifiers(@Nullable JetModifierList modifierList, @NotNull MemberModifiers defaultModifiers) {
|
||||
if (modifierList == null) return defaultModifiers;
|
||||
return new MemberModifiers(
|
||||
modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD),
|
||||
modifierList.hasModifier(JetTokens.VIRTUAL_KEYWORD),
|
||||
modifierList.hasModifier(JetTokens.OVERRIDE_KEYWORD)
|
||||
);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private MemberModifiers resolveMemberModifiers(@Nullable JetModifierList modifierList) {
|
||||
return resolveMemberModifiers(modifierList, MemberModifiers.DEFAULT_MODIFIERS);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private PropertySetterDescriptor resolvePropertySetterDescriptor(@NotNull JetScope scope, @NotNull JetProperty property, @NotNull PropertyDescriptor propertyDescriptor) {
|
||||
@@ -569,7 +590,7 @@ public class ClassDescriptorResolver {
|
||||
JetParameter parameter = setter.getParameter();
|
||||
|
||||
setterDescriptor = new PropertySetterDescriptor(
|
||||
MemberModifiers.resolveModifiers(setter.getModifierList()), // TODO : default modifiers differ in different contexts
|
||||
resolveMemberModifiers(setter.getModifierList()), // TODO : default modifiers differ in different contexts
|
||||
propertyDescriptor, annotations, setter.getBodyExpression() != null, false);
|
||||
if (parameter != null) {
|
||||
if (parameter.isRef()) {
|
||||
@@ -633,7 +654,7 @@ public class ClassDescriptorResolver {
|
||||
}
|
||||
|
||||
getterDescriptor = new PropertyGetterDescriptor(
|
||||
MemberModifiers.resolveModifiers(getter.getModifierList()), // TODO : default modifiers differ in different contexts
|
||||
resolveMemberModifiers(getter.getModifierList()), // TODO : default modifiers differ in different contexts
|
||||
propertyDescriptor, annotations, returnType, getter.getBodyExpression() != null, false);
|
||||
trace.record(BindingContext.PROPERTY_ACCESSOR, getter, getterDescriptor);
|
||||
}
|
||||
@@ -708,7 +729,7 @@ public class ClassDescriptorResolver {
|
||||
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(
|
||||
classDescriptor,
|
||||
annotationResolver.resolveAnnotations(scope, modifierList),
|
||||
MemberModifiers.resolveModifiers(modifierList),
|
||||
resolveMemberModifiers(modifierList),
|
||||
isMutable,
|
||||
null,
|
||||
name == null ? "<no name>" : name,
|
||||
|
||||
@@ -451,7 +451,7 @@ public class TopDownAnalyzer {
|
||||
@Override
|
||||
public void visitNamedFunction(JetNamedFunction function) {
|
||||
FunctionDescriptorImpl functionDescriptor = classDescriptorResolver.resolveFunctionDescriptor(namespaceLike, scope, function);
|
||||
checkFunctionCorrectness(function, functionDescriptor, namespaceLike);
|
||||
checkFunction(function, functionDescriptor, namespaceLike);
|
||||
namespaceLike.addFunctionDescriptor(functionDescriptor);
|
||||
functions.put(function, functionDescriptor);
|
||||
declaringScopes.put(function, scope);
|
||||
@@ -550,14 +550,31 @@ public class TopDownAnalyzer {
|
||||
private void bindOverridesInAClass(MutableClassDescriptor classDescriptor) {
|
||||
|
||||
for (FunctionDescriptor declaredFunction : classDescriptor.getFunctions()) {
|
||||
// JetFunction function = (JetFunction) trace.get(BindingContext.DESCRIPTOR_TO_DECLARATION, declaredFunction);
|
||||
// boolean isOverride = declaredFunction.getModifiers().isOverride();
|
||||
for (JetType supertype : classDescriptor.getTypeConstructor().getSupertypes()) {
|
||||
FunctionDescriptor overridden = findFunctionOverridableBy(declaredFunction, supertype);
|
||||
if (overridden != null) {
|
||||
// if (isOverride && !overridden.getModifiers().isOverridable()) {
|
||||
// trace.getErrorHandler().genericError(function.getModifierList().getModifierNode(JetTokens.OVERRIDE_KEYWORD),
|
||||
// "Method " + overridden.getName() + " in " + overridden.getContainingDeclaration().getName() + " is final and can not be overridden");
|
||||
// isOverride = false;
|
||||
// }
|
||||
((FunctionDescriptorImpl) declaredFunction).addOverriddenFunction(overridden);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// if (declaredFunction.getModifiers().isOverride() && declaredFunction.getOverriddenDescriptors().size() == 0) {
|
||||
// trace.getErrorHandler().genericError(function.getModifierList().getModifierNode(JetTokens.OVERRIDE_KEYWORD),
|
||||
// "Method " + declaredFunction.getName() + " overrides nothing");
|
||||
}
|
||||
// if (!declaredFunction.getModifiers().isOverride() && declaredFunction.getOverriddenDescriptors().size() > 0) {
|
||||
// FunctionDescriptor overriddenMethod = declaredFunction.getOverriddenDescriptors().iterator().next();
|
||||
// trace.getErrorHandler().genericError(function.getNameIdentifier().getNode(),
|
||||
// "Method " + declaredFunction.getName() + " overrides method " + overriddenMethod.getName() + " in class " +
|
||||
// overriddenMethod.getContainingDeclaration().getName() + " and needs 'override' modifier");
|
||||
}
|
||||
// }
|
||||
// }
|
||||
|
||||
@Nullable
|
||||
private FunctionDescriptor findFunctionOverridableBy(@NotNull FunctionDescriptor declaredFunction, @NotNull JetType supertype) {
|
||||
@@ -916,11 +933,6 @@ public class TopDownAnalyzer {
|
||||
if (setter != null && setterDescriptor != null) {
|
||||
resolveFunctionBody(fieldAccessTrackingTrace, setter, setterDescriptor, accessorScope);
|
||||
}
|
||||
|
||||
// JetExpression initializer = property.getInitializer();
|
||||
// if (!property.isVar() && initializer != null && !trace.getBindingContext().get(BindingContext.BACKING_FIELD_REQUIRED, propertyDescriptor)) {
|
||||
// trace.getErrorHandler().genericError(initializer.getNode(), "Initializer is not allowed here because this property has no setter and no backing field either");
|
||||
// }
|
||||
}
|
||||
|
||||
protected void checkProperty(JetProperty property, PropertyDescriptor propertyDescriptor, @Nullable ClassDescriptor classDescriptor) {
|
||||
@@ -968,7 +980,7 @@ public class TopDownAnalyzer {
|
||||
}
|
||||
}
|
||||
|
||||
protected void checkFunctionCorrectness(JetNamedFunction function, FunctionDescriptor functionDescriptor, DeclarationDescriptor containingDescriptor) {
|
||||
protected void checkFunction(JetNamedFunction function, FunctionDescriptor functionDescriptor, DeclarationDescriptor containingDescriptor) {
|
||||
PsiElement nameIdentifier = function.getNameIdentifier();
|
||||
if (containingDescriptor instanceof ClassDescriptor) {
|
||||
ClassDescriptor classDescriptor = (ClassDescriptor) containingDescriptor;
|
||||
|
||||
@@ -27,5 +27,5 @@ public class TopDownAnalyzerForStandardLibrary extends TopDownAnalyzer {
|
||||
|
||||
|
||||
@Override
|
||||
protected void checkFunctionCorrectness(JetNamedFunction function, FunctionDescriptor functionDescriptor, DeclarationDescriptor containingDescriptor) {}
|
||||
protected void checkFunction(JetNamedFunction function, FunctionDescriptor functionDescriptor, DeclarationDescriptor containingDescriptor) {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user