Remove @annotation from stdlib and compiler
This commit is contained in:
-9
@@ -20,7 +20,6 @@ import com.google.protobuf.MessageLite;
|
|||||||
import com.intellij.openapi.util.Pair;
|
import com.intellij.openapi.util.Pair;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
|
||||||
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
|
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
|
||||||
@@ -62,14 +61,6 @@ public class JvmSerializerExtension extends SerializerExtension {
|
|||||||
return useTypeTable;
|
return useTypeTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void serializeClass(@NotNull ClassDescriptor descriptor, @NotNull ProtoBuf.Class.Builder proto) {
|
|
||||||
AnnotationDescriptor annotation = descriptor.getAnnotations().findAnnotation(KotlinBuiltIns.FQ_NAMES.annotation);
|
|
||||||
if (annotation != null) {
|
|
||||||
proto.addExtension(JvmProtoBuf.classAnnotation, annotationSerializer.serializeAnnotation(annotation));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void serializeValueParameter(@NotNull ValueParameterDescriptor descriptor, @NotNull ProtoBuf.ValueParameter.Builder proto) {
|
public void serializeValueParameter(@NotNull ValueParameterDescriptor descriptor, @NotNull ProtoBuf.ValueParameter.Builder proto) {
|
||||||
Integer index = bindings.get(INDEX_FOR_VALUE_PARAMETER, descriptor);
|
Integer index = bindings.get(INDEX_FOR_VALUE_PARAMETER, descriptor);
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ public interface JetTokens {
|
|||||||
|
|
||||||
// Please synchronize this array with org.jetbrains.kotlin.descriptors.annotations.ANNOTATION_MODIFIERS_FQ_NAMES
|
// Please synchronize this array with org.jetbrains.kotlin.descriptors.annotations.ANNOTATION_MODIFIERS_FQ_NAMES
|
||||||
JetModifierKeywordToken[] ANNOTATION_MODIFIERS_KEYWORDS_ARRAY = new JetModifierKeywordToken[] {
|
JetModifierKeywordToken[] ANNOTATION_MODIFIERS_KEYWORDS_ARRAY = new JetModifierKeywordToken[] {
|
||||||
INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD, ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD
|
INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD, CROSSINLINE_KEYWORD
|
||||||
};
|
};
|
||||||
|
|
||||||
TokenSet MODIFIER_KEYWORDS = TokenSet.create(MODIFIER_KEYWORDS_ARRAY);
|
TokenSet MODIFIER_KEYWORDS = TokenSet.create(MODIFIER_KEYWORDS_ARRAY);
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import com.intellij.psi.impl.source.codeStyle.CodeEditUtil
|
|||||||
import com.intellij.psi.stubs.IStubElementType
|
import com.intellij.psi.stubs.IStubElementType
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
import org.jetbrains.kotlin.JetNodeTypes
|
import org.jetbrains.kotlin.JetNodeTypes
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|
||||||
import org.jetbrains.kotlin.lexer.JetTokens
|
import org.jetbrains.kotlin.lexer.JetTokens
|
||||||
import org.jetbrains.kotlin.psi.stubs.KotlinClassOrObjectStub
|
import org.jetbrains.kotlin.psi.stubs.KotlinClassOrObjectStub
|
||||||
import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes
|
import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes
|
||||||
@@ -108,17 +107,7 @@ abstract public class JetClassOrObject :
|
|||||||
|
|
||||||
public fun getSecondaryConstructors(): List<JetSecondaryConstructor> = getBody()?.getSecondaryConstructors().orEmpty()
|
public fun getSecondaryConstructors(): List<JetSecondaryConstructor> = getBody()?.getSecondaryConstructors().orEmpty()
|
||||||
|
|
||||||
public fun isAnnotation(): Boolean =
|
public fun isAnnotation(): Boolean = hasModifier(JetTokens.ANNOTATION_KEYWORD)
|
||||||
getAnnotation(KotlinBuiltIns.FQ_NAMES.annotation.shortName().asString()) != null || hasModifier(JetTokens.ANNOTATION_KEYWORD)
|
|
||||||
|
|
||||||
private fun getAnnotation(name: String): JetAnnotationEntry? {
|
|
||||||
return getAnnotationEntries().firstOrNull() { entry ->
|
|
||||||
val typeReference = entry.getTypeReference()
|
|
||||||
val userType = typeReference?.getStubOrPsiChild(JetStubElementTypes.USER_TYPE)
|
|
||||||
|
|
||||||
name == userType?.getReferencedName()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override fun delete() {
|
public override fun delete() {
|
||||||
CheckUtil.checkWritable(this);
|
CheckUtil.checkWritable(this);
|
||||||
|
|||||||
+1
-1
@@ -165,7 +165,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
|||||||
this.kind = storageManager.createLazyValue(new Function0<ClassKind>() {
|
this.kind = storageManager.createLazyValue(new Function0<ClassKind>() {
|
||||||
@Override
|
@Override
|
||||||
public ClassKind invoke() {
|
public ClassKind invoke() {
|
||||||
return (syntaxKind == ClassKind.CLASS && KotlinBuiltIns.isAnnotation(descriptor)) ? ClassKind.ANNOTATION_CLASS : syntaxKind;
|
return (syntaxKind == ClassKind.CLASS && modifierList != null && modifierList.hasModifier(JetTokens.ANNOTATION_KEYWORD)) ? ClassKind.ANNOTATION_CLASS : syntaxKind;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -76,15 +76,6 @@ public enum class AnnotationRetention {
|
|||||||
@MustBeDocumented
|
@MustBeDocumented
|
||||||
public annotation class Target(vararg val allowedTargets: AnnotationTarget)
|
public annotation class Target(vararg val allowedTargets: AnnotationTarget)
|
||||||
|
|
||||||
/**
|
|
||||||
* This special meta-annotation is used to declare an annotation.
|
|
||||||
* So a class in Kotlin is an annotation if and only if it has the "annotation" meta-annotation.
|
|
||||||
*/
|
|
||||||
@Target(AnnotationTarget.ANNOTATION_CLASS)
|
|
||||||
@Retention(AnnotationRetention.SOURCE)
|
|
||||||
@MustBeDocumented
|
|
||||||
private annotation class annotation
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This meta-annotation determines whether an annotation is stored in binary output and visible for reflection. By default, both are true.
|
* This meta-annotation determines whether an annotation is stored in binary output and visible for reflection. By default, both are true.
|
||||||
*
|
*
|
||||||
|
|||||||
-1
@@ -45,7 +45,6 @@ class LazyJavaAnnotations(
|
|||||||
|
|
||||||
override fun iterator() =
|
override fun iterator() =
|
||||||
(annotationOwner.annotations.asSequence().map(annotationDescriptors)
|
(annotationOwner.annotations.asSequence().map(annotationDescriptors)
|
||||||
+ JavaAnnotationMapper.findMappedJavaAnnotation(KotlinBuiltIns.FQ_NAMES.annotation, annotationOwner, c)
|
|
||||||
+ JavaAnnotationMapper.findMappedJavaAnnotation(KotlinBuiltIns.FQ_NAMES.deprecated, annotationOwner, c)).filterNotNull().iterator()
|
+ JavaAnnotationMapper.findMappedJavaAnnotation(KotlinBuiltIns.FQ_NAMES.deprecated, annotationOwner, c)).filterNotNull().iterator()
|
||||||
|
|
||||||
override fun isEmpty() = !iterator().hasNext()
|
override fun isEmpty() = !iterator().hasNext()
|
||||||
|
|||||||
@@ -145,7 +145,6 @@ public abstract class KotlinBuiltIns {
|
|||||||
public final FqName crossinline = fqName("crossinline");
|
public final FqName crossinline = fqName("crossinline");
|
||||||
public final FqName extension = fqName("Extension");
|
public final FqName extension = fqName("Extension");
|
||||||
public final FqName target = annotationName("Target");
|
public final FqName target = annotationName("Target");
|
||||||
public final FqName annotation = annotationName("annotation");
|
|
||||||
public final FqName annotationTarget = annotationName("AnnotationTarget");
|
public final FqName annotationTarget = annotationName("AnnotationTarget");
|
||||||
public final FqName annotationRetention = annotationName("AnnotationRetention");
|
public final FqName annotationRetention = annotationName("AnnotationRetention");
|
||||||
public final FqName retention = annotationName("Retention");
|
public final FqName retention = annotationName("Retention");
|
||||||
@@ -428,11 +427,6 @@ public abstract class KotlinBuiltIns {
|
|||||||
return result instanceof ClassDescriptor ? (ClassDescriptor) result : null;
|
return result instanceof ClassDescriptor ? (ClassDescriptor) result : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public ClassDescriptor getAnnotationAnnotation() {
|
|
||||||
return getAnnotationClassByName(FQ_NAMES.annotation.shortName());
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public ClassDescriptor getString() {
|
public ClassDescriptor getString() {
|
||||||
return getBuiltInClassByName("String");
|
return getBuiltInClassByName("String");
|
||||||
@@ -1019,11 +1013,6 @@ public abstract class KotlinBuiltIns {
|
|||||||
return FQ_NAMES.array.equals(getFqName(descriptor));
|
return FQ_NAMES.array.equals(getFqName(descriptor));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isAnnotation(@NotNull ClassDescriptor descriptor) {
|
|
||||||
return DescriptorUtils.getFqName(descriptor) == FQ_NAMES.annotation.toUnsafe()
|
|
||||||
|| containsAnnotation(descriptor, FQ_NAMES.annotation);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isCloneable(@NotNull ClassDescriptor descriptor) {
|
public static boolean isCloneable(@NotNull ClassDescriptor descriptor) {
|
||||||
return FQ_NAMES.cloneable.equals(getFqName(descriptor));
|
return FQ_NAMES.cloneable.equals(getFqName(descriptor));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.types.Variance
|
|||||||
|
|
||||||
// Please synchronize this set with JetTokens.ANNOTATION_MODIFIERS_KEYWORDS_ARRAY
|
// Please synchronize this set with JetTokens.ANNOTATION_MODIFIERS_KEYWORDS_ARRAY
|
||||||
public val ANNOTATION_MODIFIERS_FQ_NAMES: Set<FqName> =
|
public val ANNOTATION_MODIFIERS_FQ_NAMES: Set<FqName> =
|
||||||
arrayOf("inline", "noinline", "tailrec", "external", "annotation.annotation", "crossinline").map { FqName("kotlin.$it") }.toSet()
|
arrayOf("inline", "noinline", "tailrec", "external", "crossinline").map { FqName("kotlin.$it") }.toSet()
|
||||||
|
|
||||||
public fun KotlinBuiltIns.createDeprecatedAnnotation(message: String, replaceWith: String): AnnotationDescriptor {
|
public fun KotlinBuiltIns.createDeprecatedAnnotation(message: String, replaceWith: String): AnnotationDescriptor {
|
||||||
val deprecatedAnnotation = deprecatedAnnotation
|
val deprecatedAnnotation = deprecatedAnnotation
|
||||||
|
|||||||
@@ -26,11 +26,11 @@ import com.intellij.psi.util.PsiTreeUtil;
|
|||||||
import com.intellij.util.IncorrectOperationException;
|
import com.intellij.util.IncorrectOperationException;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
|
||||||
import org.jetbrains.kotlin.diagnostics.Diagnostic;
|
import org.jetbrains.kotlin.diagnostics.Diagnostic;
|
||||||
import org.jetbrains.kotlin.idea.JetBundle;
|
import org.jetbrains.kotlin.idea.JetBundle;
|
||||||
import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil;
|
import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil;
|
||||||
import org.jetbrains.kotlin.idea.references.ReferenceUtilKt;
|
import org.jetbrains.kotlin.idea.references.ReferenceUtilKt;
|
||||||
|
import org.jetbrains.kotlin.lexer.JetTokens;
|
||||||
import org.jetbrains.kotlin.psi.*;
|
import org.jetbrains.kotlin.psi.*;
|
||||||
|
|
||||||
public class MakeClassAnAnnotationClassFix extends KotlinQuickFixAction<JetAnnotationEntry> {
|
public class MakeClassAnAnnotationClassFix extends KotlinQuickFixAction<JetAnnotationEntry> {
|
||||||
@@ -84,14 +84,13 @@ public class MakeClassAnAnnotationClassFix extends KotlinQuickFixAction<JetAnnot
|
|||||||
public void invoke(@NotNull Project project, Editor editor, @NotNull JetFile file) throws IncorrectOperationException {
|
public void invoke(@NotNull Project project, Editor editor, @NotNull JetFile file) throws IncorrectOperationException {
|
||||||
JetPsiFactory factory = new JetPsiFactory(annotationClass.getProject());
|
JetPsiFactory factory = new JetPsiFactory(annotationClass.getProject());
|
||||||
JetModifierList list = annotationClass.getModifierList();
|
JetModifierList list = annotationClass.getModifierList();
|
||||||
String annotation = KotlinBuiltIns.FQ_NAMES.annotation.shortName().asString();
|
|
||||||
PsiElement added;
|
PsiElement added;
|
||||||
if (list == null) {
|
if (list == null) {
|
||||||
JetModifierList newModifierList = factory.createModifierList(annotation);
|
JetModifierList newModifierList = factory.createModifierList(JetTokens.ANNOTATION_KEYWORD);
|
||||||
added = annotationClass.addBefore(newModifierList, annotationClass.getClassOrInterfaceKeyword());
|
added = annotationClass.addBefore(newModifierList, annotationClass.getClassOrInterfaceKeyword());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
JetAnnotationEntry entry = factory.createAnnotationEntry(annotation);
|
PsiElement entry = factory.createModifier(JetTokens.ANNOTATION_KEYWORD);
|
||||||
added = list.addBefore(entry, list.getFirstChild());
|
added = list.addBefore(entry, list.getFirstChild());
|
||||||
}
|
}
|
||||||
annotationClass.addAfter(factory.createWhiteSpace(), added);
|
annotationClass.addAfter(factory.createWhiteSpace(), added);
|
||||||
|
|||||||
@@ -58,7 +58,6 @@ import com.intellij.util.VisibilityUtil
|
|||||||
import com.intellij.util.containers.MultiMap
|
import com.intellij.util.containers.MultiMap
|
||||||
import org.jetbrains.kotlin.asJava.KotlinLightMethod
|
import org.jetbrains.kotlin.asJava.KotlinLightMethod
|
||||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
@@ -450,8 +449,8 @@ private fun copyModifierListItems(from: PsiModifierList, to: PsiModifierList, wi
|
|||||||
}
|
}
|
||||||
for (annotation in from.getAnnotations()) {
|
for (annotation in from.getAnnotations()) {
|
||||||
val annotationName = annotation.getQualifiedName()!!
|
val annotationName = annotation.getQualifiedName()!!
|
||||||
if (KotlinBuiltIns.FQ_NAMES.annotation.asString() != annotationName
|
|
||||||
&& javaClass<Retention>().getName() != annotationName) {
|
if (javaClass<Retention>().getName() != annotationName) {
|
||||||
to.addAnnotation(annotationName)
|
to.addAnnotation(annotationName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user