From d52f2e25b00f35fffba64fa40dc2aab7e9bc48fd Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 15 Oct 2013 18:21:30 +0400 Subject: [PATCH] AnnotationDescriptor interface extracted --- .../jet/lang/resolve/AnnotationResolver.java | 13 ++-- .../jet/lang/resolve/BindingContext.java | 5 +- .../java/mapping/JavaToKotlinClassMap.java | 3 +- .../java/resolver/JavaAnnotationResolver.java | 3 +- .../AnnotationDescriptorDeserializer.java | 3 +- .../annotations/AnnotationDescriptor.java | 51 ++------------- .../annotations/AnnotationDescriptorImpl.java | 64 +++++++++++++++++++ 7 files changed, 85 insertions(+), 57 deletions(-) create mode 100644 core/descriptors/src/org/jetbrains/jet/lang/descriptors/annotations/AnnotationDescriptorImpl.java diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java index 9559a636b97..b4ced4c745f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java @@ -22,6 +22,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.Annotated; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; +import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptorImpl; import org.jetbrains.jet.lang.diagnostics.Errors; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.calls.CallResolver; @@ -111,9 +112,9 @@ public class AnnotationResolver { if (annotationEntryElements.isEmpty()) return Collections.emptyList(); List result = Lists.newArrayList(); for (JetAnnotationEntry entryElement : annotationEntryElements) { - AnnotationDescriptor descriptor = trace.get(BindingContext.ANNOTATION, entryElement); + AnnotationDescriptorImpl descriptor = trace.get(BindingContext.ANNOTATION, entryElement); if (descriptor == null) { - descriptor = new AnnotationDescriptor(); + descriptor = new AnnotationDescriptorImpl(); resolveAnnotationStub(scope, entryElement, descriptor, trace); trace.record(BindingContext.ANNOTATION, entryElement, descriptor); } @@ -130,7 +131,7 @@ public class AnnotationResolver { public void resolveAnnotationStub( @NotNull JetScope scope, @NotNull JetAnnotationEntry entryElement, - @NotNull AnnotationDescriptor annotationDescriptor, + @NotNull AnnotationDescriptorImpl annotationDescriptor, @NotNull BindingTrace trace ) { TemporaryBindingTrace temporaryBindingTrace = new TemporaryBindingTrace(trace, "Trace for resolve annotation type"); @@ -196,14 +197,14 @@ public class AnnotationResolver { ) { OverloadResolutionResults results = resolveAnnotationCall(annotationEntry, scope, trace); if (results.isSingleResult()) { - AnnotationDescriptor annotationDescriptor = trace.getBindingContext().get(BindingContext.ANNOTATION, annotationEntry); + AnnotationDescriptorImpl annotationDescriptor = trace.getBindingContext().get(BindingContext.ANNOTATION, annotationEntry); assert annotationDescriptor != null : "Annotation descriptor should be created before resolving arguments for " + annotationEntry.getText(); resolveAnnotationArgument(annotationDescriptor, results.getResultingCall(), trace); } } private void resolveAnnotationArgument( - @NotNull AnnotationDescriptor annotationDescriptor, + @NotNull AnnotationDescriptorImpl annotationDescriptor, @NotNull ResolvedCall call, @NotNull BindingTrace trace ) { @@ -336,7 +337,7 @@ public class AnnotationResolver { JetType constructorReturnType = resultingDescriptor.getReturnType(); assert constructorReturnType != null : "Constructor should have return type"; if (DescriptorUtils.isAnnotationClass(constructorReturnType.getConstructor().getDeclarationDescriptor())) { - AnnotationDescriptor descriptor = new AnnotationDescriptor(); + AnnotationDescriptorImpl descriptor = new AnnotationDescriptorImpl(); descriptor.setAnnotationType(constructorReturnType); resolveAnnotationArgument(descriptor, call, trace); return new AnnotationValue(descriptor); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java index 3279fa3b709..12b43ed16c9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java @@ -23,6 +23,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; +import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptorImpl; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.inference.ConstraintSystemCompleter; @@ -69,8 +70,8 @@ public interface BindingContext { }; WritableSlice ANNOTATION_DESCRIPTOR_TO_PSI_ELEMENT = Slices.createSimpleSlice(); - WritableSlice ANNOTATION = - Slices.sliceBuilder().setOpposite(ANNOTATION_DESCRIPTOR_TO_PSI_ELEMENT).build(); + WritableSlice ANNOTATION = + Slices.sliceBuilder().setOpposite(ANNOTATION_DESCRIPTOR_TO_PSI_ELEMENT).build(); WritableSlice> COMPILE_TIME_VALUE = Slices.createSimpleSlice(); WritableSlice> COMPILE_TIME_INITIALIZER = Slices.createSimpleSlice(); diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/mapping/JavaToKotlinClassMap.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/mapping/JavaToKotlinClassMap.java index 890895fe7b9..484ef887a4a 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/mapping/JavaToKotlinClassMap.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/mapping/JavaToKotlinClassMap.java @@ -23,6 +23,7 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; +import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptorImpl; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.constants.StringValue; import org.jetbrains.jet.lang.resolve.java.JvmPrimitiveType; @@ -105,7 +106,7 @@ public class JavaToKotlinClassMap extends JavaToKotlinClassMapBuilder implements @NotNull private static AnnotationDescriptor getAnnotationDescriptorForJavaLangDeprecated(@NotNull ClassDescriptor annotationClass) { - AnnotationDescriptor annotation = new AnnotationDescriptor(); + AnnotationDescriptorImpl annotation = new AnnotationDescriptorImpl(); annotation.setAnnotationType(annotationClass.getDefaultType()); ValueParameterDescriptor value = DescriptorResolverUtils.getAnnotationParameterByName( JavaAnnotationResolver.DEFAULT_ANNOTATION_MEMBER_NAME, annotationClass); diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaAnnotationResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaAnnotationResolver.java index fcec3c88702..4deced9d587 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaAnnotationResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaAnnotationResolver.java @@ -21,6 +21,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; +import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptorImpl; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames; import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap; @@ -97,7 +98,7 @@ public final class JavaAnnotationResolver { @Nullable public AnnotationDescriptor resolveAnnotation(@NotNull JavaAnnotation javaAnnotation, @NotNull PostponedTasks postponedTasks) { - final AnnotationDescriptor annotation = new AnnotationDescriptor(); + final AnnotationDescriptorImpl annotation = new AnnotationDescriptorImpl(); FqName fqName = javaAnnotation.getFqName(); if (fqName == null) { return null; diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/AnnotationDescriptorDeserializer.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/AnnotationDescriptorDeserializer.java index 6cc195b89d3..f2ec789cbf0 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/AnnotationDescriptorDeserializer.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/AnnotationDescriptorDeserializer.java @@ -25,6 +25,7 @@ import org.jetbrains.jet.descriptors.serialization.ProtoBuf; import org.jetbrains.jet.descriptors.serialization.descriptors.AnnotationDeserializer; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; +import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptorImpl; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.constants.EnumValue; @@ -157,7 +158,7 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer if (ignoreAnnotation(className)) return null; final ClassDescriptor annotationClass = resolveClass(className); - final AnnotationDescriptor annotation = new AnnotationDescriptor(); + final AnnotationDescriptorImpl annotation = new AnnotationDescriptorImpl(); annotation.setAnnotationType(annotationClass.getDefaultType()); return new KotlinJvmBinaryClass.AnnotationArgumentVisitor() { diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/annotations/AnnotationDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/annotations/AnnotationDescriptor.java index 171f56e9684..4c01c32dbe3 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/annotations/AnnotationDescriptor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/annotations/AnnotationDescriptor.java @@ -1,61 +1,20 @@ -/* - * Copyright 2010-2013 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - package org.jetbrains.jet.lang.descriptors.annotations; -import com.google.common.collect.Maps; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; -import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.types.JetType; -import java.util.Collections; import java.util.Map; -public class AnnotationDescriptor { - private JetType annotationType; - private final Map> valueArguments = Maps.newHashMap(); - +public interface AnnotationDescriptor { @NotNull - public JetType getType() { - return annotationType; - } + JetType getType(); @Nullable - public CompileTimeConstant getValueArgument(@NotNull ValueParameterDescriptor valueParameterDescriptor) { - return valueArguments.get(valueParameterDescriptor); - } - + CompileTimeConstant getValueArgument(@NotNull ValueParameterDescriptor valueParameterDescriptor); + @NotNull - public Map> getAllValueArguments() { - return Collections.unmodifiableMap(valueArguments); - } - - public void setAnnotationType(@NotNull JetType annotationType) { - this.annotationType = annotationType; - } - - public void setValueArgument(@NotNull ValueParameterDescriptor name, @NotNull CompileTimeConstant value) { - valueArguments.put(name, value); - } - - @Override - public String toString() { - return annotationType.toString() + DescriptorUtils.getSortedValueArguments(this, null); - } + Map> getAllValueArguments(); } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/annotations/AnnotationDescriptorImpl.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/annotations/AnnotationDescriptorImpl.java new file mode 100644 index 00000000000..ebd21648bce --- /dev/null +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/annotations/AnnotationDescriptorImpl.java @@ -0,0 +1,64 @@ +/* + * Copyright 2010-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.lang.descriptors.annotations; + +import com.google.common.collect.Maps; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; +import org.jetbrains.jet.lang.resolve.DescriptorUtils; +import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; +import org.jetbrains.jet.lang.types.JetType; + +import java.util.Collections; +import java.util.Map; + +public class AnnotationDescriptorImpl implements AnnotationDescriptor { + private JetType annotationType; + private final Map> valueArguments = Maps.newHashMap(); + + @Override + @NotNull + public JetType getType() { + return annotationType; + } + + @Override + @Nullable + public CompileTimeConstant getValueArgument(@NotNull ValueParameterDescriptor valueParameterDescriptor) { + return valueArguments.get(valueParameterDescriptor); + } + + @Override + @NotNull + public Map> getAllValueArguments() { + return Collections.unmodifiableMap(valueArguments); + } + + public void setAnnotationType(@NotNull JetType annotationType) { + this.annotationType = annotationType; + } + + public void setValueArgument(@NotNull ValueParameterDescriptor name, @NotNull CompileTimeConstant value) { + valueArguments.put(name, value); + } + + @Override + public String toString() { + return annotationType.toString() + DescriptorUtils.getSortedValueArguments(this, null); + } +}