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.FqName; 022 import org.jetbrains.jet.lang.resolve.name.Name; 023 024 import java.util.Arrays; 025 import java.util.HashSet; 026 import java.util.Set; 027 028 public final class JvmAnnotationNames { 029 public static final FqName KOTLIN_CLASS = new FqName("kotlin.jvm.internal.KotlinClass"); 030 public static final FqName KOTLIN_PACKAGE = new FqName("kotlin.jvm.internal.KotlinPackage"); 031 032 public static final FqName KOTLIN_SIGNATURE = new FqName("kotlin.jvm.KotlinSignature"); 033 public static final FqName OLD_KOTLIN_SIGNATURE = new FqName("jet.runtime.typeinfo.KotlinSignature"); 034 035 public static final String ABI_VERSION_FIELD_NAME = "abiVersion"; 036 public static final String DATA_FIELD_NAME = "data"; 037 public static final Name DEFAULT_ANNOTATION_MEMBER_NAME = Name.identifier("value"); 038 039 public static final FqName JETBRAINS_NOT_NULL_ANNOTATION = new FqName("org.jetbrains.annotations.NotNull"); 040 public static final FqName JETBRAINS_NULLABLE_ANNOTATION = new FqName("org.jetbrains.annotations.Nullable"); 041 public static final FqName JETBRAINS_MUTABLE_ANNOTATION = new FqName("org.jetbrains.annotations.Mutable"); 042 public static final FqName JETBRAINS_READONLY_ANNOTATION = new FqName("org.jetbrains.annotations.ReadOnly"); 043 044 public static class KotlinSyntheticClass { 045 public static final JvmClassName CLASS_NAME = JvmClassName.byInternalName("kotlin/jvm/internal/KotlinSyntheticClass"); 046 public static final String KIND_INTERNAL_NAME = "kotlin/jvm/internal/KotlinSyntheticClass$Kind"; 047 048 public static final Name KIND_FIELD_NAME = Name.identifier("kind"); 049 050 /** 051 * This enum duplicates {@link kotlin.jvm.internal.KotlinSyntheticClass.Kind}, because this code can't depend on "runtime.jvm". 052 * Both places should be updated simultaneously 053 */ 054 public enum Kind { 055 PACKAGE_PART, 056 TRAIT_IMPL, 057 SAM_WRAPPER, 058 SAM_LAMBDA, 059 CALLABLE_REFERENCE_WRAPPER, 060 LOCAL_FUNCTION, 061 ANONYMOUS_FUNCTION, 062 LOCAL_CLASS, 063 ANONYMOUS_OBJECT, 064 ; 065 066 @Nullable 067 public static Kind valueOfOrNull(@NotNull String name) { 068 try { 069 return valueOf(name); 070 } 071 catch (IllegalArgumentException e) { 072 return null; 073 } 074 } 075 } 076 077 private KotlinSyntheticClass() { 078 } 079 } 080 081 @Deprecated 082 public static final FqName OLD_JET_CLASS_ANNOTATION = new FqName("jet.runtime.typeinfo.JetClass"); 083 @Deprecated 084 public static final FqName OLD_JET_PACKAGE_CLASS_ANNOTATION = new FqName("jet.runtime.typeinfo.JetPackageClass"); 085 @Deprecated 086 public static final FqName OLD_JET_VALUE_PARAMETER_ANNOTATION = new FqName("jet.runtime.typeinfo.JetValueParameter"); 087 @Deprecated 088 public static final FqName OLD_KOTLIN_CLASS = new FqName("jet.KotlinClass"); 089 @Deprecated 090 public static final FqName OLD_KOTLIN_PACKAGE = new FqName("jet.KotlinPackage"); 091 @Deprecated 092 public static final FqName OLD_KOTLIN_PACKAGE_FRAGMENT = new FqName("jet.KotlinPackageFragment"); 093 @Deprecated 094 public static final FqName OLD_KOTLIN_TRAIT_IMPL = new FqName("jet.KotlinTraitImpl"); 095 096 private static final Set<JvmClassName> SPECIAL_ANNOTATIONS = new HashSet<JvmClassName>(); 097 static { 098 for (FqName fqName : Arrays.asList(KOTLIN_CLASS, KOTLIN_PACKAGE, KOTLIN_SIGNATURE, JETBRAINS_NOT_NULL_ANNOTATION, 099 JETBRAINS_NULLABLE_ANNOTATION)) { 100 SPECIAL_ANNOTATIONS.add(JvmClassName.byFqNameWithoutInnerClasses(fqName)); 101 } 102 SPECIAL_ANNOTATIONS.add(KotlinSyntheticClass.CLASS_NAME); 103 } 104 105 public static boolean isSpecialAnnotation(@NotNull FqName fqName) { 106 return isSpecialAnnotation(JvmClassName.byFqNameWithoutInnerClasses(fqName)); 107 } 108 109 public static boolean isSpecialAnnotation(@NotNull JvmClassName name) { 110 return SPECIAL_ANNOTATIONS.contains(name) || name.getInternalName().startsWith("jet/runtime/typeinfo/"); 111 } 112 113 private JvmAnnotationNames() { 114 } 115 }