001 /*
002 * Copyright 2010-2013 JetBrains s.r.o.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 package org.jetbrains.jet.lang.resolve.java;
018
019 import org.jetbrains.annotations.NotNull;
020 import org.jetbrains.annotations.Nullable;
021 import org.jetbrains.jet.lang.resolve.name.ClassId;
022 import org.jetbrains.jet.lang.resolve.name.FqName;
023 import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
024 import org.jetbrains.jet.lang.resolve.name.Name;
025
026 import java.util.Arrays;
027 import java.util.HashSet;
028 import java.util.Set;
029
030 public final class JvmAnnotationNames {
031 public static final FqName KOTLIN_CLASS = new FqName("kotlin.jvm.internal.KotlinClass");
032 public static final FqName KOTLIN_PACKAGE = new FqName("kotlin.jvm.internal.KotlinPackage");
033
034 public static final FqName KOTLIN_SIGNATURE = new FqName("kotlin.jvm.KotlinSignature");
035 public static final FqName OLD_KOTLIN_SIGNATURE = new FqName("jet.runtime.typeinfo.KotlinSignature");
036
037 public static final String ABI_VERSION_FIELD_NAME = "abiVersion";
038 public static final String DATA_FIELD_NAME = "data";
039 public static final Name DEFAULT_ANNOTATION_MEMBER_NAME = Name.identifier("value");
040
041 public static final FqName JETBRAINS_NOT_NULL_ANNOTATION = new FqName("org.jetbrains.annotations.NotNull");
042 public static final FqName JETBRAINS_NULLABLE_ANNOTATION = new FqName("org.jetbrains.annotations.Nullable");
043 public static final FqName JETBRAINS_MUTABLE_ANNOTATION = new FqName("org.jetbrains.annotations.Mutable");
044 public static final FqName JETBRAINS_READONLY_ANNOTATION = new FqName("org.jetbrains.annotations.ReadOnly");
045
046 public static class KotlinSyntheticClass {
047 public static final JvmClassName CLASS_NAME = JvmClassName.byInternalName("kotlin/jvm/internal/KotlinSyntheticClass");
048 public static final ClassId KIND_CLASS_ID =
049 new ClassId(new FqName("kotlin.jvm.internal"), new FqNameUnsafe("KotlinSyntheticClass.Kind"));
050 public static final String KIND_INTERNAL_NAME = JvmClassName.byClassId(KIND_CLASS_ID).getInternalName();
051
052 public static final Name KIND_FIELD_NAME = Name.identifier("kind");
053
054 /**
055 * This enum duplicates {@link kotlin.jvm.internal.KotlinSyntheticClass.Kind}, because this code can't depend on "runtime.jvm".
056 * Both places should be updated simultaneously
057 */
058 public enum Kind {
059 PACKAGE_PART,
060 TRAIT_IMPL,
061 SAM_WRAPPER,
062 SAM_LAMBDA,
063 CALLABLE_REFERENCE_WRAPPER,
064 LOCAL_FUNCTION,
065 ANONYMOUS_FUNCTION,
066 LOCAL_CLASS,
067 ANONYMOUS_OBJECT,
068 ;
069
070 @Nullable
071 public static Kind valueOfOrNull(@NotNull String name) {
072 try {
073 return valueOf(name);
074 }
075 catch (IllegalArgumentException e) {
076 return null;
077 }
078 }
079 }
080
081 private KotlinSyntheticClass() {
082 }
083 }
084
085 @Deprecated
086 public static final FqName OLD_JET_CLASS_ANNOTATION = new FqName("jet.runtime.typeinfo.JetClass");
087 @Deprecated
088 public static final FqName OLD_JET_PACKAGE_CLASS_ANNOTATION = new FqName("jet.runtime.typeinfo.JetPackageClass");
089 @Deprecated
090 public static final FqName OLD_JET_VALUE_PARAMETER_ANNOTATION = new FqName("jet.runtime.typeinfo.JetValueParameter");
091 @Deprecated
092 public static final FqName OLD_KOTLIN_CLASS = new FqName("jet.KotlinClass");
093 @Deprecated
094 public static final FqName OLD_KOTLIN_PACKAGE = new FqName("jet.KotlinPackage");
095 @Deprecated
096 public static final FqName OLD_KOTLIN_PACKAGE_FRAGMENT = new FqName("jet.KotlinPackageFragment");
097 @Deprecated
098 public static final FqName OLD_KOTLIN_TRAIT_IMPL = new FqName("jet.KotlinTraitImpl");
099
100 private static final Set<JvmClassName> SPECIAL_ANNOTATIONS = new HashSet<JvmClassName>();
101 static {
102 for (FqName fqName : Arrays.asList(KOTLIN_CLASS, KOTLIN_PACKAGE, KOTLIN_SIGNATURE, JETBRAINS_NOT_NULL_ANNOTATION,
103 JETBRAINS_NULLABLE_ANNOTATION)) {
104 SPECIAL_ANNOTATIONS.add(JvmClassName.byFqNameWithoutInnerClasses(fqName));
105 }
106 SPECIAL_ANNOTATIONS.add(KotlinSyntheticClass.CLASS_NAME);
107 }
108
109 public static boolean isSpecialAnnotation(@NotNull ClassId classId, boolean javaSpecificAnnotationsAreSpecial) {
110 JvmClassName className = JvmClassName.byClassId(classId);
111 return (javaSpecificAnnotationsAreSpecial && SPECIAL_ANNOTATIONS.contains(className)) || className.getInternalName().startsWith("jet/runtime/typeinfo/");
112 }
113
114 private JvmAnnotationNames() {
115 }
116 }