From 7bc2ae36d72f90c58f666f396559c49f04fda261 Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Mon, 8 Jan 2024 14:07:16 +0100 Subject: [PATCH] Make everything lenient by default except for SisuIndex --- .../sisu/space/QualifiedTypeVisitor.java | 7 ++- .../eclipse/sisu/space/QualifierCache.java | 10 +++- .../org/eclipse/sisu/space/SisuIndex.java | 2 +- .../org/eclipse/sisu/space/SpaceModule.java | 51 ++++++++++++++++++- .../org/eclipse/sisu/space/SpaceScanner.java | 3 ++ 5 files changed, 68 insertions(+), 5 deletions(-) diff --git a/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/QualifiedTypeVisitor.java b/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/QualifiedTypeVisitor.java index 08cc2fc1..4b49deac 100644 --- a/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/QualifiedTypeVisitor.java +++ b/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/QualifiedTypeVisitor.java @@ -28,7 +28,7 @@ public final class QualifiedTypeVisitor // Implementation fields // ---------------------------------------------------------------------- - private final QualifierCache qualifierCache = new QualifierCache(); + private final QualifierCache qualifierCache; private final QualifiedTypeListener listener; @@ -48,6 +48,11 @@ public final class QualifiedTypeVisitor public QualifiedTypeVisitor( final QualifiedTypeListener listener ) { + this( listener, false ); + } + + public QualifiedTypeVisitor( final QualifiedTypeListener listener, boolean isStrict ) { + qualifierCache = new QualifierCache( isStrict ); this.listener = listener; } diff --git a/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/QualifierCache.java b/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/QualifierCache.java index 5c2f7ff1..d2f45bb8 100644 --- a/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/QualifierCache.java +++ b/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/QualifierCache.java @@ -37,15 +37,23 @@ final class QualifierCache private boolean isQualified; + private final boolean isStrict; + // ---------------------------------------------------------------------- // Public methods // ---------------------------------------------------------------------- + public QualifierCache(boolean isStrict) { + super(); + this.isStrict = isStrict; + } + public void enterClass( final int modifiers, final String name, final String _extends, final String[] _implements ) { // no-op } + public AnnotationVisitor visitAnnotation( final String desc ) { isQualified |= QUALIFIER_DESC.equals( desc ); @@ -80,7 +88,7 @@ boolean qualify( final ClassSpace space, final String desc ) isQualified = false; final String name = desc.substring( 1, desc.length() - 1 ); - SpaceScanner.accept( this, space.getResource( name + ".class" ) ); + SpaceScanner.accept( this, space.getResource( name + ".class" ), isStrict ); cachedResults.put( desc, Boolean.valueOf( isQualified ) ); return isQualified; diff --git a/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/SisuIndex.java b/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/SisuIndex.java index 6c3978dc..0cae9d8f 100644 --- a/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/SisuIndex.java +++ b/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/SisuIndex.java @@ -41,7 +41,7 @@ public class SisuIndex // Implementation fields // ---------------------------------------------------------------------- - private final QualifierCache qualifierCache = new QualifierCache(); + private final QualifierCache qualifierCache = new QualifierCache( true ); private final File targetDirectory; diff --git a/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/SpaceModule.java b/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/SpaceModule.java index c88d7d97..359ceccf 100644 --- a/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/SpaceModule.java +++ b/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/SpaceModule.java @@ -60,29 +60,64 @@ private static final class RecordedElements private final ClassFinder finder; + /** + * If set to {@code true} will throw ISE in case class cannot be scanned + */ + private final boolean isStrict; + private Strategy strategy = Strategy.DEFAULT; // ---------------------------------------------------------------------- // Constructors // ---------------------------------------------------------------------- + /** + * + * @param space + * @deprecated Use {@link #SpaceModule(ClassSpace, ClassFinder, boolean)} instead. + */ + @Deprecated public SpaceModule( final ClassSpace space ) { this( space, BeanScanning.ON ); } + /** + * + * @param space + * @param finder + * @deprecated Use {@link #SpaceModule(ClassSpace, ClassFinder, boolean)} instead. + */ + @Deprecated public SpaceModule( final ClassSpace space, final ClassFinder finder ) + { + this( space, finder, false ); + } + + public SpaceModule( final ClassSpace space, final ClassFinder finder, boolean isStrict ) { caching = false; this.space = space; this.finder = finder; + this.isStrict = isStrict; } + /** + * + * @param space + * @param scanning + * @deprecated Use {@link #SpaceModule(ClassSpace, ClassFinder, boolean) instead + */ + @Deprecated public SpaceModule( final ClassSpace space, final BeanScanning scanning ) { - caching = BeanScanning.CACHE == scanning; + this( space, scanning, false ); + } + public SpaceModule( final ClassSpace space, final BeanScanning scanning, boolean isStrict ) + { + caching = BeanScanning.CACHE == scanning; this.space = space; switch ( scanning ) { @@ -99,6 +134,7 @@ public SpaceModule( final ClassSpace space, final BeanScanning scanning ) finder = LOCAL_SCAN; break; } + this.isStrict = isStrict; } // ---------------------------------------------------------------------- @@ -158,6 +194,17 @@ public SpaceVisitor visitor( final Binder binder ) return new QualifiedTypeVisitor( new QualifiedTypeBinder( binder ) ); } }; + + /** + * Same as {@link #DEFAULT} but throwing {@link IllegalStateException} in case class cannot be scanned. + */ + Strategy DEFAULT_STRICT = new Strategy() + { + public SpaceVisitor visitor( final Binder binder ) + { + return new QualifiedTypeVisitor( new QualifiedTypeBinder( binder ), true ); + } + }; } // ---------------------------------------------------------------------- @@ -166,7 +213,7 @@ public SpaceVisitor visitor( final Binder binder ) void scanForElements( final Binder binder ) { - new SpaceScanner( space, finder, true ).accept( strategy.visitor( binder ) ); + new SpaceScanner( space, finder, isStrict ).accept( strategy.visitor( binder ) ); } private void recordAndReplayElements( final Binder binder ) diff --git a/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/SpaceScanner.java b/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/SpaceScanner.java index 86747449..4a873b18 100644 --- a/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/SpaceScanner.java +++ b/org.eclipse.sisu.inject/src/main/java/org/eclipse/sisu/space/SpaceScanner.java @@ -42,6 +42,9 @@ public final class SpaceScanner private final ClassFinder finder; + /** + * If set to {@code true} will throw ISE in case class cannot be scanned + */ private final boolean isStrict; // ----------------------------------------------------------------------