Interfaces are always abstract

This commit is contained in:
Andrey Breslav
2013-01-15 18:57:42 +04:00
parent 4549ad0a5e
commit dad59b20ba
2 changed files with 11 additions and 3 deletions
@@ -281,7 +281,6 @@ public class KotlinLightClassForExplicitDeclaration extends AbstractLightClass i
Pair.create(PUBLIC_KEYWORD, PsiModifier.PUBLIC), Pair.create(PUBLIC_KEYWORD, PsiModifier.PUBLIC),
Pair.create(INTERNAL_KEYWORD, PsiModifier.PUBLIC), Pair.create(INTERNAL_KEYWORD, PsiModifier.PUBLIC),
Pair.create(PROTECTED_KEYWORD, PsiModifier.PROTECTED), Pair.create(PROTECTED_KEYWORD, PsiModifier.PROTECTED),
Pair.create(ABSTRACT_KEYWORD, PsiModifier.ABSTRACT),
Pair.create(FINAL_KEYWORD, PsiModifier.FINAL)); Pair.create(FINAL_KEYWORD, PsiModifier.FINAL));
for (Pair<JetKeywordToken, String> tokenAndModifier : jetTokenToPsiModifier) { for (Pair<JetKeywordToken, String> tokenAndModifier : jetTokenToPsiModifier) {
@@ -300,8 +299,12 @@ public class KotlinLightClassForExplicitDeclaration extends AbstractLightClass i
psiModifiers.add(PsiModifier.PUBLIC); // For internal (default) visibility psiModifiers.add(PsiModifier.PUBLIC); // For internal (default) visibility
} }
// FINAL // FINAL
if (!classOrObject.hasModifier(OPEN_KEYWORD) && !classOrObject.hasModifier(ABSTRACT_KEYWORD)) { if (isAbstract(classOrObject)) {
psiModifiers.add(PsiModifier.ABSTRACT);
}
else if (!classOrObject.hasModifier(OPEN_KEYWORD)) {
psiModifiers.add(PsiModifier.FINAL); psiModifiers.add(PsiModifier.FINAL);
} }
@@ -313,6 +316,11 @@ public class KotlinLightClassForExplicitDeclaration extends AbstractLightClass i
return psiModifiers.toArray(new String[psiModifiers.size()]); return psiModifiers.toArray(new String[psiModifiers.size()]);
} }
private boolean isAbstract(@NotNull JetClassOrObject object) {
return object.hasModifier(ABSTRACT_KEYWORD) ||
classOrObject instanceof JetClass && ((JetClass) classOrObject).isTrait();
}
@Override @Override
public boolean hasModifierProperty(@NonNls @NotNull String name) { public boolean hasModifierProperty(@NonNls @NotNull String name) {
return getModifierList().hasModifierProperty(name); return getModifierList().hasModifierProperty(name);
@@ -206,7 +206,7 @@ public abstract class KotlinLightClassTest extends KotlinAsJavaTestBase {
ENUM { ENUM {
@Override @Override
public boolean present(@NotNull PsiClass psiClass) { public boolean present(@NotNull PsiClass psiClass) {
return psiClass.isInterface(); return psiClass.isEnum();
} }
}, },
ANNOTATION { ANNOTATION {