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
017package org.jetbrains.jet.lang.resolve.java;
018
019import org.jetbrains.annotations.NotNull;
020import org.jetbrains.annotations.Nullable;
021import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
022import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
023import org.jetbrains.jet.lang.resolve.BindingContext;
024import org.jetbrains.jet.lang.resolve.BindingTrace;
025import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProviderFactory;
026import org.jetbrains.jet.lang.resolve.name.FqName;
027import org.jetbrains.jet.lang.resolve.name.Name;
028import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
029
030import javax.inject.Inject;
031
032public 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}