diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java index c264f3ebb87..1fd0b3bb76e 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java @@ -268,8 +268,8 @@ public final class JavaClassResolver { @NotNull PostponedTasks taskList, @NotNull ClassOrNamespaceDescriptor containingDeclaration ) { - ClassDescriptorFromJvmBytecode classDescriptor = new ClassDescriptorFromJvmBytecode(containingDeclaration, javaClass.getKind(), - isInnerClass(javaClass)); + ClassDescriptorFromJvmBytecode classDescriptor = + new ClassDescriptorFromJvmBytecode(containingDeclaration, determineClassKind(javaClass), isInnerClass(javaClass)); cache(javaClassToKotlinFqName(fqName), classDescriptor); @@ -281,7 +281,7 @@ public final class JavaClassResolver { List supertypes = new ArrayList(); classDescriptor.setSupertypes(supertypes); classDescriptor.setVisibility(javaClass.getVisibility()); - classDescriptor.setModality(javaClass.getModality()); + classDescriptor.setModality(determineClassModality(javaClass)); classDescriptor.createTypeConstructor(); JavaClassNonStaticMembersScope scope = new JavaClassNonStaticMembersScope(classDescriptor, javaClass, false, memberResolver); @@ -313,6 +313,21 @@ public final class JavaClassResolver { return classDescriptor; } + @NotNull + private static ClassKind determineClassKind(@NotNull JavaClass klass) { + if (klass.isInterface()) { + return klass.isAnnotationType() ? ClassKind.ANNOTATION_CLASS : ClassKind.TRAIT; + } + return klass.isEnum() ? ClassKind.ENUM_CLASS : ClassKind.CLASS; + } + + @NotNull + private static Modality determineClassModality(@NotNull JavaClass klass) { + return klass.isAnnotationType() + ? Modality.FINAL + : Modality.convertFromFlags(klass.isAbstract() || klass.isInterface(), !klass.isFinal()); + } + @NotNull private static FqNameUnsafe getFqNameForClassObject(@NotNull JavaClass javaClass) { FqName fqName = javaClass.getFqName(); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaSupertypeResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaSupertypeResolver.java index 0278e990052..4d9404af5ad 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaSupertypeResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaSupertypeResolver.java @@ -18,7 +18,6 @@ package org.jetbrains.jet.lang.resolve.java.resolver; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; -import org.jetbrains.jet.lang.descriptors.ClassKind; import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor; import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.TypeUsage; @@ -70,7 +69,7 @@ public final class JavaSupertypeResolver { @NotNull private JetType getDefaultSupertype(@NotNull JavaClass javaClass) { - if (OBJECT_FQ_NAME.equals(javaClass.getFqName()) || javaClass.getKind() == ClassKind.ANNOTATION_CLASS) { + if (OBJECT_FQ_NAME.equals(javaClass.getFqName()) || javaClass.isAnnotationType()) { return KotlinBuiltIns.getInstance().getAnyType(); } else { diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClass.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClass.java index 63c2e77886e..99cb3b5107d 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClass.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClass.java @@ -18,14 +18,11 @@ package org.jetbrains.jet.lang.resolve.java.structure; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.descriptors.ClassKind; -import org.jetbrains.jet.lang.descriptors.Modality; import org.jetbrains.jet.lang.resolve.name.FqName; import java.util.Collection; -public interface JavaClass - extends JavaClassifier, JavaNamedElement, JavaTypeParameterListOwner, JavaModifierListOwner, JavaAnnotationOwner { +public interface JavaClass extends JavaClassifier, JavaTypeParameterListOwner, JavaModifierListOwner, JavaAnnotationOwner { @NotNull Collection getInnerClasses(); @@ -38,15 +35,9 @@ public interface JavaClass boolean isEnum(); - @NotNull - ClassKind getKind(); - @Nullable JavaClass getOuterClass(); - @NotNull - Modality getModality(); - @NotNull Collection getSupertypes(); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClassifier.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClassifier.java index 9cf47754140..9ad7255c9ba 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClassifier.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClassifier.java @@ -16,5 +16,5 @@ package org.jetbrains.jet.lang.resolve.java.structure; -public interface JavaClassifier extends JavaElement { +public interface JavaClassifier extends JavaNamedElement { } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeParameter.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeParameter.java index e4ff03b1248..627f09fc1d1 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeParameter.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaTypeParameter.java @@ -21,7 +21,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Collection; -public interface JavaTypeParameter extends JavaClassifier, JavaNamedElement { +public interface JavaTypeParameter extends JavaClassifier { int getIndex(); @NotNull diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaClassImpl.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaClassImpl.java index 19dcdab7074..62bdef9606e 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaClassImpl.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaClassImpl.java @@ -23,8 +23,6 @@ import com.intellij.psi.PsiTypeParameter; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.descriptors.ClassKind; -import org.jetbrains.jet.lang.descriptors.Modality; import org.jetbrains.jet.lang.descriptors.Visibility; import org.jetbrains.jet.lang.resolve.java.jetAsJava.JetJavaMirrorMarker; import org.jetbrains.jet.lang.resolve.java.structure.*; @@ -76,15 +74,6 @@ public class JavaClassImpl extends JavaClassifierImpl implements JavaClass, Java return getPsi().isEnum(); } - @Override - @NotNull - public ClassKind getKind() { - if (isInterface()) { - return isAnnotationType() ? ClassKind.ANNOTATION_CLASS : ClassKind.TRAIT; - } - return isEnum() ? ClassKind.ENUM_CLASS : ClassKind.CLASS; - } - @Override @Nullable public JavaClass getOuterClass() { @@ -92,12 +81,6 @@ public class JavaClassImpl extends JavaClassifierImpl implements JavaClass, Java return outer == null ? null : new JavaClassImpl(outer); } - @Override - @NotNull - public Modality getModality() { - return isAnnotationType() ? Modality.FINAL : Modality.convertFromFlags(isAbstract() || isInterface(), !isFinal()); - } - @NotNull @Override public Collection getTypeParameters() {