diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java index e6ce342492f..d9f891ac06e 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java @@ -21,7 +21,6 @@ import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl; import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedExternalSignatureResolver; import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedJavaResolverCache; -import org.jetbrains.jet.lang.resolve.java.resolver.FakeOverrideVisibilityResolverImpl; import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedErrorReporter; import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedMethodSignatureChecker; import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver; @@ -53,7 +52,6 @@ public class InjectorForJavaDescriptorResolver { private final JavaClassFinderImpl javaClassFinder; private final TraceBasedExternalSignatureResolver traceBasedExternalSignatureResolver; private final TraceBasedJavaResolverCache traceBasedJavaResolverCache; - private final FakeOverrideVisibilityResolverImpl fakeOverrideVisibilityResolver; private final TraceBasedErrorReporter traceBasedErrorReporter; private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker; private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver; @@ -84,7 +82,6 @@ public class InjectorForJavaDescriptorResolver { this.javaClassFinder = new JavaClassFinderImpl(); this.traceBasedExternalSignatureResolver = new TraceBasedExternalSignatureResolver(); this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache(); - this.fakeOverrideVisibilityResolver = new FakeOverrideVisibilityResolverImpl(); this.traceBasedErrorReporter = new TraceBasedErrorReporter(); this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker(); this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver(); @@ -113,8 +110,6 @@ public class InjectorForJavaDescriptorResolver { traceBasedJavaResolverCache.setTrace(bindingTrace); - fakeOverrideVisibilityResolver.setTrace(bindingTrace); - traceBasedErrorReporter.setTrace(bindingTrace); psiBasedMethodSignatureChecker.setAnnotationResolver(javaAnnotationResolver); @@ -176,8 +171,8 @@ public class InjectorForJavaDescriptorResolver { javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver); javaFunctionResolver.setCache(traceBasedJavaResolverCache); + javaFunctionResolver.setErrorReporter(traceBasedErrorReporter); javaFunctionResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver); - javaFunctionResolver.setFakeOverrideVisibilityResolver(fakeOverrideVisibilityResolver); javaFunctionResolver.setSignatureChecker(psiBasedMethodSignatureChecker); javaFunctionResolver.setTypeParameterResolver(javaTypeParameterResolver); javaFunctionResolver.setTypeTransformer(javaTypeTransformer); @@ -187,8 +182,8 @@ public class InjectorForJavaDescriptorResolver { javaPropertyResolver.setAnnotationResolver(javaAnnotationResolver); javaPropertyResolver.setCache(traceBasedJavaResolverCache); + javaPropertyResolver.setErrorReporter(traceBasedErrorReporter); javaPropertyResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver); - javaPropertyResolver.setFakeOverrideVisibilityResolver(fakeOverrideVisibilityResolver); javaPropertyResolver.setTypeTransformer(javaTypeTransformer); javaSupertypeResolver.setClassResolver(javaClassResolver); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java index dd839f6df45..70efb51af59 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -34,7 +34,6 @@ import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap; import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl; import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedExternalSignatureResolver; import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedJavaResolverCache; -import org.jetbrains.jet.lang.resolve.java.resolver.FakeOverrideVisibilityResolverImpl; import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedErrorReporter; import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedMethodSignatureChecker; import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver; @@ -94,7 +93,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly private final JavaClassFinderImpl javaClassFinder; private final TraceBasedExternalSignatureResolver traceBasedExternalSignatureResolver; private final TraceBasedJavaResolverCache traceBasedJavaResolverCache; - private final FakeOverrideVisibilityResolverImpl fakeOverrideVisibilityResolver; private final TraceBasedErrorReporter traceBasedErrorReporter; private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker; private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver; @@ -155,7 +153,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly this.javaClassFinder = new JavaClassFinderImpl(); this.traceBasedExternalSignatureResolver = new TraceBasedExternalSignatureResolver(); this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache(); - this.fakeOverrideVisibilityResolver = new FakeOverrideVisibilityResolverImpl(); this.traceBasedErrorReporter = new TraceBasedErrorReporter(); this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker(); this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver(); @@ -239,8 +236,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly traceBasedJavaResolverCache.setTrace(bindingTrace); - fakeOverrideVisibilityResolver.setTrace(bindingTrace); - traceBasedErrorReporter.setTrace(bindingTrace); psiBasedMethodSignatureChecker.setAnnotationResolver(javaAnnotationResolver); @@ -367,8 +362,8 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver); javaFunctionResolver.setCache(traceBasedJavaResolverCache); + javaFunctionResolver.setErrorReporter(traceBasedErrorReporter); javaFunctionResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver); - javaFunctionResolver.setFakeOverrideVisibilityResolver(fakeOverrideVisibilityResolver); javaFunctionResolver.setSignatureChecker(psiBasedMethodSignatureChecker); javaFunctionResolver.setTypeParameterResolver(javaTypeParameterResolver); javaFunctionResolver.setTypeTransformer(javaTypeTransformer); @@ -378,8 +373,8 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly javaPropertyResolver.setAnnotationResolver(javaAnnotationResolver); javaPropertyResolver.setCache(traceBasedJavaResolverCache); + javaPropertyResolver.setErrorReporter(traceBasedErrorReporter); javaPropertyResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver); - javaPropertyResolver.setFakeOverrideVisibilityResolver(fakeOverrideVisibilityResolver); javaPropertyResolver.setTypeTransformer(javaTypeTransformer); javaSupertypeResolver.setClassResolver(javaClassResolver); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/FakeOverrideVisibilityResolverImpl.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/FakeOverrideVisibilityResolverImpl.java deleted file mode 100644 index 32cb806c301..00000000000 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/FakeOverrideVisibilityResolverImpl.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.jetbrains.jet.lang.resolve.java.resolver; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; -import org.jetbrains.jet.lang.resolve.BindingTrace; -import org.jetbrains.jet.lang.resolve.OverridingUtil; - -import javax.inject.Inject; - -public class FakeOverrideVisibilityResolverImpl implements FakeOverrideVisibilityResolver { - private BindingTrace trace; - - @Inject - public void setTrace(BindingTrace trace) { - this.trace = trace; - } - - @Override - public void resolveUnknownVisibilityForMember(@NotNull CallableMemberDescriptor descriptor) { - OverridingUtil.resolveUnknownVisibilityForMember(null, descriptor, trace); - } -} diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedErrorReporter.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedErrorReporter.java index b82c393ca7c..8980dcaed83 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedErrorReporter.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedErrorReporter.java @@ -17,7 +17,11 @@ package org.jetbrains.jet.lang.resolve.java.resolver; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; +import org.jetbrains.jet.lang.psi.JetDeclaration; +import org.jetbrains.jet.lang.resolve.BindingContextUtils; import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.util.slicedmap.BasicWritableSlice; @@ -26,6 +30,8 @@ import org.jetbrains.jet.util.slicedmap.WritableSlice; import javax.inject.Inject; +import static org.jetbrains.jet.lang.diagnostics.Errors.CANNOT_INFER_VISIBILITY; + public class TraceBasedErrorReporter implements ErrorReporter { public static final WritableSlice ABI_VERSION_ERRORS = new BasicWritableSlice(Slices.ONLY_REWRITE_TO_EQUAL, true); @@ -41,6 +47,14 @@ public class TraceBasedErrorReporter implements ErrorReporter { trace.record(ABI_VERSION_ERRORS, new AbiVersionErrorLocation(fqName, file), actualVersion); } + @Override + public void reportCannotInferVisibility(@NotNull CallableMemberDescriptor descriptor) { + PsiElement element = BindingContextUtils.descriptorToDeclaration(trace.getBindingContext(), descriptor); + if (element instanceof JetDeclaration) { + trace.report(CANNOT_INFER_VISIBILITY.on((JetDeclaration) element)); + } + } + public static final class AbiVersionErrorLocation { @NotNull private final FqName classFqName; diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java index 745f1236ec9..2c85d4c7076 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java @@ -26,7 +26,6 @@ import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.impl.*; import org.jetbrains.jet.lang.resolve.DescriptorFactory; import org.jetbrains.jet.lang.resolve.OverridingUtil; -import org.jetbrains.jet.lang.resolve.TraceUtil; import org.jetbrains.jet.lang.resolve.lazy.storage.MemoizedFunctionToNullable; import org.jetbrains.jet.lang.resolve.lazy.storage.NotNullLazyValue; import org.jetbrains.jet.lang.resolve.lazy.storage.NullableLazyValue; @@ -430,7 +429,13 @@ public class DeserializedClassDescriptor extends ClassDescriptorBase implements new OverridingUtil.DescriptorSink() { @Override public void addToScope(@NotNull CallableMemberDescriptor fakeOverride) { - OverridingUtil.resolveUnknownVisibilityForMember(null, fakeOverride, TraceUtil.TRACE_STUB); + OverridingUtil.resolveUnknownVisibilityForMember(fakeOverride, new OverridingUtil.NotInferredVisibilitySink() { + @Override + public void cannotInferVisibility(@NotNull CallableMemberDescriptor descriptor) { + // Do nothing + // TODO: do something + } + }); //noinspection unchecked result.add((D) fakeOverride); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java index 0f9f68f23ef..d1ddf94320f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java @@ -168,16 +168,21 @@ public class OverrideResolver { public static void resolveUnknownVisibilities( @NotNull Collection descriptors, @NotNull BindingTrace trace) { - for (CallableMemberDescriptor memberDescriptor : descriptors) { - JetDeclaration declaration = null; - if (memberDescriptor.getKind() == CallableMemberDescriptor.Kind.DECLARATION) { - PsiElement element = BindingContextUtils.descriptorToDeclaration(trace.getBindingContext(), memberDescriptor); + for (CallableMemberDescriptor descriptor : descriptors) { + resolveUnknownVisibilityForMember(descriptor, trace); + } + } + + public static void resolveUnknownVisibilityForMember(@NotNull CallableMemberDescriptor descriptor, @NotNull final BindingTrace trace) { + OverridingUtil.resolveUnknownVisibilityForMember(descriptor, new OverridingUtil.NotInferredVisibilitySink() { + @Override + public void cannotInferVisibility(@NotNull CallableMemberDescriptor descriptor) { + PsiElement element = BindingContextUtils.descriptorToDeclaration(trace.getBindingContext(), descriptor); if (element instanceof JetDeclaration) { - declaration = (JetDeclaration) element; + trace.report(CANNOT_INFER_VISIBILITY.on((JetDeclaration) element)); } } - OverridingUtil.resolveUnknownVisibilityForMember(declaration, memberDescriptor, trace); - } + }); } private static MultiMap groupDescriptorsByName(Collection properties) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java index 26e51d42f57..499bcce90c8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java @@ -18,7 +18,6 @@ package org.jetbrains.jet.lang.resolve; import com.google.common.base.Predicate; import com.google.common.collect.*; -import com.intellij.psi.PsiElement; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; @@ -27,14 +26,12 @@ import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.impl.FunctionDescriptorImpl; import org.jetbrains.jet.lang.descriptors.impl.PropertyAccessorDescriptorImpl; import org.jetbrains.jet.lang.descriptors.impl.PropertyDescriptorImpl; -import org.jetbrains.jet.lang.psi.JetDeclaration; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import java.util.*; -import static org.jetbrains.jet.lang.diagnostics.Errors.CANNOT_INFER_VISIBILITY; import static org.jetbrains.jet.lang.resolve.OverridingUtil.OverrideCompatibilityInfo.Result.CONFLICT; import static org.jetbrains.jet.lang.resolve.OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE; @@ -489,28 +486,34 @@ public class OverridingUtil { return overridable; } - public static void resolveUnknownVisibilityForMember(@Nullable JetDeclaration member, @NotNull CallableMemberDescriptor memberDescriptor, @NotNull BindingTrace trace) { - resolveUnknownVisibilityForOverriddenDescriptors(memberDescriptor.getOverriddenDescriptors(), trace); + public static void resolveUnknownVisibilityForMember( + @NotNull CallableMemberDescriptor memberDescriptor, + @NotNull NotInferredVisibilitySink sink + ) { + for (CallableMemberDescriptor descriptor : memberDescriptor.getOverriddenDescriptors()) { + if (descriptor.getVisibility() == Visibilities.INHERITED) { + resolveUnknownVisibilityForMember(descriptor, sink); + } + } + if (memberDescriptor.getVisibility() != Visibilities.INHERITED) { return; } Visibility visibility = findMaxVisibility(memberDescriptor.getOverriddenDescriptors()); if (visibility == null) { - if (member != null) { - trace.report(CANNOT_INFER_VISIBILITY.on(member)); - } + sink.cannotInferVisibility(memberDescriptor); visibility = Visibilities.PUBLIC; } if (memberDescriptor instanceof PropertyDescriptorImpl) { - ((PropertyDescriptorImpl)memberDescriptor).setVisibility(visibility.normalize()); + ((PropertyDescriptorImpl) memberDescriptor).setVisibility(visibility.normalize()); for (PropertyAccessorDescriptor accessor : ((PropertyDescriptor) memberDescriptor).getAccessors()) { - resolveUnknownVisibilityForMember(null, accessor, trace); + resolveUnknownVisibilityForMember(accessor, sink); } } else if (memberDescriptor instanceof FunctionDescriptorImpl) { - ((FunctionDescriptorImpl)memberDescriptor).setVisibility(visibility.normalize()); + ((FunctionDescriptorImpl) memberDescriptor).setVisibility(visibility.normalize()); } else { assert memberDescriptor instanceof PropertyAccessorDescriptorImpl; @@ -518,16 +521,6 @@ public class OverridingUtil { } } - private static void resolveUnknownVisibilityForOverriddenDescriptors(@NotNull Collection descriptors, @NotNull BindingTrace trace) { - for (CallableMemberDescriptor descriptor : descriptors) { - if (descriptor.getVisibility() == Visibilities.INHERITED) { - PsiElement element = BindingContextUtils.descriptorToDeclaration(trace.getBindingContext(), descriptor); - JetDeclaration declaration = (element instanceof JetDeclaration) ? (JetDeclaration) element : null; - resolveUnknownVisibilityForMember(declaration, descriptor, trace); - } - } - } - @Nullable private static Visibility findMaxVisibility(@NotNull Collection descriptors) { if (descriptors.isEmpty()) { @@ -567,6 +560,10 @@ public class OverridingUtil { void conflict(@NotNull CallableMemberDescriptor fromSuper, @NotNull CallableMemberDescriptor fromCurrent); } + public interface NotInferredVisibilitySink { + void cannotInferVisibility(@NotNull CallableMemberDescriptor descriptor); + } + public static class OverrideCompatibilityInfo { public enum Result { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java index 14e754ee12f..deaee57e447 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java @@ -19,7 +19,6 @@ package org.jetbrains.jet.lang.resolve.lazy.descriptors; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.intellij.openapi.util.Computable; -import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; @@ -140,10 +139,9 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope functions = super.getFunctions(name); for (FunctionDescriptor functionDescriptor : functions) { - if (functionDescriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) continue; - PsiElement element = - BindingContextUtils.callableDescriptorToDeclaration(resolveSession.getTrace().getBindingContext(), functionDescriptor); - OverridingUtil.resolveUnknownVisibilityForMember((JetDeclaration) element, functionDescriptor, resolveSession.getTrace()); + if (functionDescriptor.getKind() != CallableMemberDescriptor.Kind.FAKE_OVERRIDE) { + OverrideResolver.resolveUnknownVisibilityForMember(functionDescriptor, resolveSession.getTrace()); + } } return functions; } @@ -214,10 +212,9 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope properties = super.getProperties(name); for (VariableDescriptor variableDescriptor : properties) { PropertyDescriptor propertyDescriptor = (PropertyDescriptor) variableDescriptor; - if (propertyDescriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) continue; - PsiElement element = - BindingContextUtils.callableDescriptorToDeclaration(resolveSession.getTrace().getBindingContext(), propertyDescriptor); - OverridingUtil.resolveUnknownVisibilityForMember((JetDeclaration) element, propertyDescriptor, resolveSession.getTrace()); + if (propertyDescriptor.getKind() != CallableMemberDescriptor.Kind.FAKE_OVERRIDE) { + OverrideResolver.resolveUnknownVisibilityForMember(propertyDescriptor, resolveSession.getTrace()); + } } return properties; } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java index 6183d7dd520..5996fb0c940 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java @@ -66,7 +66,7 @@ public final class DescriptorResolverUtils { @NotNull Collection membersFromSupertypes, @NotNull Collection membersFromCurrent, @NotNull ClassDescriptor classDescriptor, - @NotNull final FakeOverrideVisibilityResolver visibilityResolver + @NotNull final ErrorReporter errorReporter ) { final Set result = new HashSet(); @@ -76,7 +76,12 @@ public final class DescriptorResolverUtils { @Override @SuppressWarnings("unchecked") public void addToScope(@NotNull CallableMemberDescriptor fakeOverride) { - visibilityResolver.resolveUnknownVisibilityForMember(fakeOverride); + OverridingUtil.resolveUnknownVisibilityForMember(fakeOverride, new OverridingUtil.NotInferredVisibilitySink() { + @Override + public void cannotInferVisibility(@NotNull CallableMemberDescriptor descriptor) { + errorReporter.reportCannotInferVisibility(descriptor); + } + }); result.add((D) fakeOverride); } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/ErrorReporter.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/ErrorReporter.java index a477ce0546d..9299cf7315a 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/ErrorReporter.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/ErrorReporter.java @@ -18,8 +18,11 @@ package org.jetbrains.jet.lang.resolve.java.resolver; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; import org.jetbrains.jet.lang.resolve.name.FqName; public interface ErrorReporter { void reportIncompatibleAbiVersion(@NotNull FqName fqName, @NotNull VirtualFile file, int actualVersion); + + void reportCannotInferVisibility(@NotNull CallableMemberDescriptor descriptor); } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/FakeOverrideVisibilityResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/FakeOverrideVisibilityResolver.java deleted file mode 100644 index a210ddf3b80..00000000000 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/FakeOverrideVisibilityResolver.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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.resolve.java.resolver; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; - -public interface FakeOverrideVisibilityResolver { - void resolveUnknownVisibilityForMember(@NotNull CallableMemberDescriptor descriptor); -} diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java index 1f8eb43ead1..5e5562ad32c 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java @@ -47,7 +47,7 @@ public final class JavaFunctionResolver { private JavaValueParameterResolver valueParameterResolver; private JavaAnnotationResolver annotationResolver; private ExternalSignatureResolver externalSignatureResolver; - private FakeOverrideVisibilityResolver fakeOverrideVisibilityResolver; + private ErrorReporter errorReporter; private MethodSignatureChecker signatureChecker; @Inject @@ -81,8 +81,8 @@ public final class JavaFunctionResolver { } @Inject - public void setFakeOverrideVisibilityResolver(FakeOverrideVisibilityResolver fakeOverrideVisibilityResolver) { - this.fakeOverrideVisibilityResolver = fakeOverrideVisibilityResolver; + public void setErrorReporter(ErrorReporter errorReporter) { + this.errorReporter = errorReporter; } @Inject @@ -211,8 +211,7 @@ public final class JavaFunctionResolver { Collection functionsFromSupertypes = getFunctionsFromSupertypes(methodName, classDescriptor); - functions.addAll(resolveOverrides(methodName, functionsFromSupertypes, functionsFromCurrent, classDescriptor, - fakeOverrideVisibilityResolver)); + functions.addAll(resolveOverrides(methodName, functionsFromSupertypes, functionsFromCurrent, classDescriptor, errorReporter)); } if (isEnumClassObject(owner)) { diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPropertyResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPropertyResolver.java index b25f823c6db..b9af4dae72d 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPropertyResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPropertyResolver.java @@ -41,10 +41,7 @@ public final class JavaPropertyResolver { private JavaResolverCache cache; private JavaAnnotationResolver annotationResolver; private ExternalSignatureResolver externalSignatureResolver; - private FakeOverrideVisibilityResolver fakeOverrideVisibilityResolver; - - public JavaPropertyResolver() { - } + private ErrorReporter errorReporter; @Inject public void setTypeTransformer(@NotNull JavaTypeTransformer javaTypeTransformer) { @@ -67,8 +64,8 @@ public final class JavaPropertyResolver { } @Inject - public void setFakeOverrideVisibilityResolver(FakeOverrideVisibilityResolver fakeOverrideVisibilityResolver) { - this.fakeOverrideVisibilityResolver = fakeOverrideVisibilityResolver; + public void setErrorReporter(ErrorReporter errorReporter) { + this.errorReporter = errorReporter; } @NotNull @@ -93,7 +90,7 @@ public final class JavaPropertyResolver { Collection propertiesFromSupertypes = getPropertiesFromSupertypes(propertyName, classDescriptor); properties.addAll(resolveOverrides(propertyName, propertiesFromSupertypes, propertiesFromCurrent, classDescriptor, - fakeOverrideVisibilityResolver)); + errorReporter)); } properties.addAll(propertiesFromCurrent); diff --git a/generators/org/jetbrains/jet/generators/injectors/GenerateInjectors.java b/generators/org/jetbrains/jet/generators/injectors/GenerateInjectors.java index 778013498ed..6ab9fb0bce3 100644 --- a/generators/org/jetbrains/jet/generators/injectors/GenerateInjectors.java +++ b/generators/org/jetbrains/jet/generators/injectors/GenerateInjectors.java @@ -114,7 +114,6 @@ public class GenerateInjectors { generator.addField(JavaClassFinderImpl.class); generator.addField(TraceBasedExternalSignatureResolver.class); generator.addField(TraceBasedJavaResolverCache.class); - generator.addField(FakeOverrideVisibilityResolverImpl.class); generator.addField(TraceBasedErrorReporter.class); generator.addField(PsiBasedMethodSignatureChecker.class); generator.addField(PsiBasedExternalAnnotationResolver.class); @@ -137,7 +136,6 @@ public class GenerateInjectors { generator.addField(JavaClassFinderImpl.class); generator.addField(TraceBasedExternalSignatureResolver.class); generator.addField(TraceBasedJavaResolverCache.class); - generator.addField(FakeOverrideVisibilityResolverImpl.class); generator.addField(TraceBasedErrorReporter.class); generator.addField(PsiBasedMethodSignatureChecker.class); generator.addField(PsiBasedExternalAnnotationResolver.class);