From 2de63d4e1793075903792bd04006609c5be0d460 Mon Sep 17 00:00:00 2001 From: Stephan Herrmann Date: Sun, 14 Jul 2024 20:17:20 +0200 Subject: [PATCH] Simplification / bugfix(?) + nobody ever expected the null returned from TypeBinding.actualType() --- .../internal/compiler/lookup/ReferenceBinding.java | 7 ++++++- .../eclipse/jdt/internal/compiler/lookup/Scope.java | 4 +--- .../internal/compiler/lookup/SourceTypeBinding.java | 11 ++++------- .../jdt/internal/compiler/lookup/TypeBinding.java | 3 ++- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java index f6111791de2..4ccf2411878 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java @@ -330,7 +330,7 @@ public boolean canBeSeenBy(PackageBinding invocationPackage) { public boolean canBeSeenBy(ReferenceBinding receiverType, ReferenceBinding invocationType) { if (isPublic()) return true; - if (isStatic() && (receiverType.isRawType() || receiverType.isParameterizedType())) + if (isStatic()) receiverType = receiverType.actualType(); // outer generics are irrelevant if (TypeBinding.equalsEquals(invocationType, this) && TypeBinding.equalsEquals(invocationType, receiverType)) return true; @@ -1063,6 +1063,11 @@ public final ReferenceBinding enclosingTypeAt(int relativeDepth) { return current; } +@Override +public ReferenceBinding actualType() { + return this; +} + public int enumConstantCount() { int count = 0; FieldBinding[] fields = fields(); diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/Scope.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/Scope.java index 750709cf20f..fb712686a41 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/Scope.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/Scope.java @@ -5709,9 +5709,7 @@ public TypeBinding getMatchingUninitializedType(TypeBinding targetClass, boolean SourceTypeBinding enclosingType = currentEnclosing.referenceContext.binding; TypeBinding currentTarget = targetClass; while (currentTarget != null) { - if (currentTarget instanceof ParameterizedTypeBinding) - currentTarget = currentTarget.actualType(); - if (TypeBinding.equalsEquals(enclosingType, currentTarget)) { + if (TypeBinding.equalsEquals(enclosingType, currentTarget.actualType())) { if (currentEnclosing.insideEarlyConstructionContext) return enclosingType; } diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java index 74f662a2dcf..d7decbf7178 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java @@ -1227,7 +1227,7 @@ else if (this.isInterface()) continue; if (this.isClass()) { ReferenceBinding permSuperType = permittedType.superclass(); - permSuperType = getActualType(permSuperType); + permSuperType = permSuperType.actualType(); if (!TypeBinding.equalsEquals(this, permSuperType)) { this.scope.problemReporter().sealedNotDirectSuperClass(permittedType, permittedTypeRef, this); continue; @@ -1237,7 +1237,7 @@ else if (this.isInterface()) boolean foundSuperInterface = false; if (permSuperInterfaces != null) { for (ReferenceBinding psi : permSuperInterfaces) { - psi = getActualType(psi); + psi = psi.actualType(); if (TypeBinding.equalsEquals(this, psi)) { foundSuperInterface = true; break; @@ -1298,9 +1298,6 @@ private void reportSealedSuperTypeDoesNotPermitProblem(TypeReference superTypeRe } } -private ReferenceBinding getActualType(ReferenceBinding ref) { - return ref.isParameterizedType() || ref.isRawType() ? ref.actualType(): ref; -} public List collectAllTypeBindings(TypeDeclaration typeDecl, CompilationUnitScope unitScope) { class TypeBindingsCollector extends ASTVisitor { List types = new ArrayList<>(); @@ -1341,10 +1338,10 @@ private boolean checkPermitsAndAdd(ReferenceBinding superType) { || !superType.isSealed()) return true; if (superType.isSealed()) { - superType = getActualType(superType); + superType = superType.actualType(); ReferenceBinding[] superPermittedTypes = superType.permittedTypes(); for (ReferenceBinding permittedType : superPermittedTypes) { - permittedType = getActualType(permittedType); + permittedType = permittedType.actualType(); if (permittedType.isValidBinding() && TypeBinding.equalsEquals(this, permittedType)) return true; } diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java index ce91f97244a..3746eafca0a 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java @@ -168,7 +168,8 @@ public static final TypeBinding wellKnownBaseType(int id) { } public ReferenceBinding actualType() { - return null; // overridden in ParameterizedTypeBinding & WildcardBinding + assert false : "Invocation on non-ReferenceBinding not expected"; //$NON-NLS-1$ + return null; // overridden in ReferenceBinding, ParameterizedTypeBinding & WildcardBinding } TypeBinding [] additionalBounds() {