001 /*
002 * Copyright 2010-2014 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.resolver;
018
019 import com.intellij.psi.PsiField;
020 import org.jetbrains.annotations.NotNull;
021 import org.jetbrains.annotations.Nullable;
022 import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
023 import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
024 import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
025 import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
026 import org.jetbrains.jet.lang.resolve.BindingContextUtils;
027 import org.jetbrains.jet.lang.resolve.BindingTrace;
028 import org.jetbrains.jet.lang.resolve.java.structure.JavaClass;
029 import org.jetbrains.jet.lang.resolve.java.structure.JavaElement;
030 import org.jetbrains.jet.lang.resolve.java.structure.JavaField;
031 import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod;
032 import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaClassImpl;
033 import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaElementImpl;
034 import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaFieldImpl;
035 import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaMethodImpl;
036 import org.jetbrains.jet.lang.resolve.name.FqName;
037
038 import javax.inject.Inject;
039
040 import static org.jetbrains.jet.lang.resolve.BindingContext.*;
041
042 public class TraceBasedJavaResolverCache implements JavaResolverCache {
043 private BindingTrace trace;
044
045 @Inject
046 public void setTrace(BindingTrace trace) {
047 this.trace = trace;
048 }
049
050 @Nullable
051 @Override
052 public ClassDescriptor getClassResolvedFromSource(@NotNull FqName fqName) {
053 return trace.get(FQNAME_TO_CLASS_DESCRIPTOR, fqName.toUnsafe());
054 }
055
056 @Override
057 public void recordMethod(@NotNull JavaMethod method, @NotNull SimpleFunctionDescriptor descriptor) {
058 BindingContextUtils.recordFunctionDeclarationToDescriptor(trace, ((JavaMethodImpl) method).getPsi(), descriptor);
059 }
060
061 @Override
062 public void recordConstructor(@NotNull JavaElement element, @NotNull ConstructorDescriptor descriptor) {
063 trace.record(CONSTRUCTOR, ((JavaElementImpl) element).getPsi(), descriptor);
064 }
065
066 @Override
067 public void recordField(@NotNull JavaField field, @NotNull PropertyDescriptor descriptor) {
068 PsiField psiField = ((JavaFieldImpl) field).getPsi();
069 trace.record(VARIABLE, psiField, descriptor);
070 }
071
072 @Override
073 public void recordClass(@NotNull JavaClass javaClass, @NotNull ClassDescriptor descriptor) {
074 trace.record(CLASS, ((JavaClassImpl) javaClass).getPsi(), descriptor);
075 }
076 }