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.descriptors.ClassDescriptor;
022 import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
023 import org.jetbrains.jet.lang.resolve.BindingContext;
024 import org.jetbrains.jet.lang.resolve.BindingTrace;
025 import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProviderFactory;
026 import org.jetbrains.jet.lang.resolve.name.FqName;
027 import org.jetbrains.jet.lang.resolve.name.Name;
028 import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
029
030 import javax.inject.Inject;
031
032 public class JavaSemanticServices {
033 @NotNull
034 private JavaTypeTransformer typeTransformer;
035 @NotNull
036 private JavaDescriptorResolver descriptorResolver;
037 @NotNull
038 private PsiClassFinder psiClassFinder;
039 @NotNull
040 private BindingTrace trace;
041 @NotNull
042 private PsiDeclarationProviderFactory psiDeclarationProviderFactory;
043
044 @Inject
045 public void setTypeTransformer(@NotNull JavaTypeTransformer typeTransformer) {
046 this.typeTransformer = typeTransformer;
047 }
048
049 @Inject
050 public void setDescriptorResolver(@NotNull JavaDescriptorResolver descriptorResolver) {
051 this.descriptorResolver = descriptorResolver;
052 }
053
054 @Inject
055 public void setPsiClassFinder(@NotNull PsiClassFinder psiClassFinder) {
056 this.psiClassFinder = psiClassFinder;
057 }
058
059 @Inject
060 public void setTrace(@NotNull BindingTrace trace) {
061 this.trace = trace;
062 }
063
064 @NotNull
065 public JavaTypeTransformer getTypeTransformer() {
066 return typeTransformer;
067 }
068
069 @Inject
070 public void setPsiDeclarationProviderFactory(PsiDeclarationProviderFactory psiDeclarationProviderFactory) {
071 this.psiDeclarationProviderFactory = psiDeclarationProviderFactory;
072 }
073
074 @NotNull
075 public JavaDescriptorResolver getDescriptorResolver() {
076 return descriptorResolver;
077 }
078
079 @Nullable
080 public ClassDescriptor getKotlinClassDescriptor(@NotNull FqName qualifiedName) {
081 return trace.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, qualifiedName);
082 }
083
084 @NotNull
085 public PsiClassFinder getPsiClassFinder() {
086 return psiClassFinder;
087 }
088
089 @NotNull
090 public PsiDeclarationProviderFactory getPsiDeclarationProviderFactory() {
091 return psiDeclarationProviderFactory;
092 }
093
094 @Nullable
095 public ClassDescriptor getKotlinBuiltinClassDescriptor(@NotNull FqName qualifiedName) {
096 if (qualifiedName.firstSegmentIs(Name.identifier("jet")) && qualifiedName.pathSegments().size() == 2) {
097 return (ClassDescriptor) KotlinBuiltIns.getInstance().getBuiltInsScope().getClassifier(qualifiedName.pathSegments().get(1));
098 }
099 else {
100 return null;
101 }
102 }
103
104 @Nullable
105 public NamespaceDescriptor getKotlinNamespaceDescriptor(@NotNull FqName qualifiedName) {
106 return trace.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, qualifiedName);
107 }
108 }